1 / 68

IS1200 Datorteknik

IS1200 Datorteknik. Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4. Ö10. F10. Hemlab-3. Hemlab-2. Hemlab-1. Ö2. Ö1. Ö3. Ö5. Ö7. Ö8. Ö9. Ö6. Ö4. F1. F5. F7. F8. F4. F6. F9. F3. F2. Tentamen. LAB-2. LAB-3. LAB-1.

shamus
Télécharger la présentation

IS1200 Datorteknik

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. IS1200 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4 IS1200 Datorteknik, föreläsning 3

  2. Ö10 F10 Hemlab-3 Hemlab-2 Hemlab-1 Ö2 Ö1 Ö3 Ö5 Ö7 Ö8 Ö9 Ö6 Ö4 F1 F5 F7 F8 F4 F6 F9 F3 F2 Tentamen LAB-2 LAB-3 LAB-1 IS1200 Datorteknikhttp://www.ict.kth.se/courses/IS1200 Assemblerkod 4 stegs pipeline Nios2time C-kod Nios2io Nios2int Cache-minnen CPU-scheduling IS1200 Datorteknik, föreläsning 3

  3. Föreläsning 3Innehåll • 4-stegs PIPE-LINE, repetition • Nios-II, Instruktioner och -format • MACRO, pseudo-instruction,exempel • Load och Store med indexerad adress • Stack med SP samt PUSH och POP • Subrutiner, anrop, retur, parametrar • Activation Record, aktiveringsblock IS1200 Datorteknik, föreläsning 3

  4. Litteraturhänvisningar • Kursboken, valda delar av kapitel 4 • 4.1 -- 4.3 principer, ej MIPS-kod • 4.5 Subrutiner och Stack IS1200 Datorteknik, föreläsning 3

  5. Viktiga delar i en dator CPU BUS program I/O MEM data IS1200 Datorteknik, föreläsning 3

  6. FETCH (update PC) (decode) EXECUTE Programexekveringi två steg IS1200 Datorteknik, föreläsning 3

  7. Fetch Operand Write Back Fetch Instruction Register File 32 x 32 EXecute/ MEMory PC+k/PC+Imm Program Memory m x 8 Register File 32 x 32 Programexekveringi fyra steg ADD PC RWM true/false ALU op-code NVZC Logik för villkorligt hopp Cond IS1200 Datorteknik, föreläsning 3

  8. Instruktioner i ”vår” 4-stegs CPU • ADD Rdst, RsrcA , RsrcB # SUB/AND/OR/XOR • ADDI Rdst, RsrcA , Imm # SUBI/ANDI/ORI/XORI • JMP / BR # ovillkorliga hopp • LDW Rdst , (Rsrc) # LOAD • STW Rsrc , (Rdst) # STORE • CMP RsrcA , RsrcB • CMPI RsrcA , Imm • BCond # villkorliga hopp • R0 = 0 ger ytterligare funktioner, NOP, CLR, COPY IS1200 Datorteknik, föreläsning 3

  9. Innehåll i register r0 om det alltid är 0 • Det medför att • ADD r0, r0, r0 utför NOP, No OPeration • ADD rA, r0, r0 utför CLR rA, CLeaR reg • ADD rA, rB, r0 utför COPY rA  rB, MOV • ADDI rA, rB, 0 utför ”MOV rA, rB” • ADDI rA, r0, Imm utför ”MOVI rA, Imm” • ... IS1200 Datorteknik, föreläsning 3

  10. Instruktioner Nios-II-Instruktioner • MOV Rdst, Rsrc • MOVI Rdst, Imm16 # ADDI/SUBI • ADD Rdst, RsrcA , RsrcB # SUB/AND/OR/XOR • ADDI Rdst, RsrcA , Imm # SUBI/ANDI/ORI/XORI • BR / JMP / BCond • LDW Rdst , offset(Rsrc) # indexerad adress • STW Rsrc , offset(Rdst) # indexerad adress • CMPCond Rdst, RsrcA , RsrcB # CMPICond • Forts. IS1200 Datorteknik, föreläsning 3

  11. Branch on ConditionNios-II-instructions • BEQ rA, rB, Label if rA==rB then PC:=PC+Imm16else PC:=PC+4 • Bcond rA, rB, Label if ”true” then PC:=PC+Imm16else PC:=PC+4 cond = EQ, NE, GT, GE, ... Label = PCBEQ + 4 + Imm16 Imm16 = Label - PCBEQ - 4 IS1200 Datorteknik, föreläsning 3

  12. Macro-instructionPseudo-instruktion TYPEXEMPEL – MALL .macro NOP ADD r0, r0, r0 .endm Effekt: man kan använda en ny (pseudo-) instruktion NOP – No Operation – som inte gör något mer än att förbruka tid (case sensitive !!!) IS1200 Datorteknik, föreläsning 3

  13. Macro-instructionPseudo-instruktion TYPEXEMPEL – MALL .macro CLR reg MOVI \reg, 0x0 .endm Effekt: man kan använda en ny (pseudo-) instruktion CLR %ri för att nollställa register %ri MOVI görs med ADDI !!! (case sensitive !!!) IS1200 Datorteknik, föreläsning 3

  14. NEG reg Skriv makro för NEG-instruktion .macro NEG reg SUB \reg, r0, \reg .endm Effekt: man kan använda en ny (pseudo-) instruktion NEG rA, för att ta fram 2-komplementet av innehållet i ett register, rA (case sensitive !!!) IS1200 Datorteknik, föreläsning 3

  15. SWAPR regA, regB (utmaning) Skriv makro för swap-instruktion med 2 register .macro SWAPR reg1, reg2XOR \reg1, \reg1, \reg2... #här saknas en del... #icketrivial kod .endm Effekt: man kan använda en ny (pseudo-) instruktion SWAPR rA, rB för att byta plats på innehåll i rA och rB (begräsningar ?) IS1200 Datorteknik, föreläsning 3

  16. Något om Nios-II Nios-II-processorn Varje instruktion i Nios-II upptar 32 bitar ! Det finns endast 3 olika instruktionsformat • R-format • I-format • J-format IS1200 Datorteknik, föreläsning 3

  17. INSTRUKTIONSFORMAT Nios-II: R-type add rC, rA, rB #rC  rA + rB A B C OPX OP 5 5 5 11 6 Andra exempel: sub, and, or, xor, ... IS1200 Datorteknik, föreläsning 3

  18. INSTRUKTIONSFORMAT Nios-II: I-type addi rB, rA, IMM16 #rB  rA + sext(IMM16) A B IMM16 OP 5 5 16 6 Andra exempel: subi, andi, ori, orhi, xori, ... IS1200 Datorteknik, föreläsning 3

  19. INSTRUKTIONSFORMAT Nios-II: J-type call label #PC  (PC31..28 :IMM26x4) IMM26 OP 26 6 Enda exempel: call !!! (och snart JMPI) IS1200 Datorteknik, föreläsning 3

  20. ori rB, rA, IMM16 Instruktion i Nios-2, I-type ori rB, rA, IMM16 #rB  rA | (0x0000:IMM16) A B IMM16 OP 5 5 16 6 Komplettera IMM16 med nollor i de 16 mest signifikanta bitarna. Gör or-operation med innehåll i rA Skriv resultat till rB IS1200 Datorteknik, föreläsning 3

  21. orhi rB, rA, IMM16 Instruktion i Nios-2, I-type orhi rB, rA, IMM16 #rB  rA | (IMM16:0x0000) A B IMM16 OP 5 5 16 6 Komplettera IMM16 med nollor i de 16 minst signifikanta bitarna. Gör or-operation med innehåll i rA Skriv resultat till rB IS1200 Datorteknik, föreläsning 3

  22. Ladda ett register med ettkonstant värde, Nios-II • 16-bitars värde MOVI rB, IMMED movi r6, -30 #sign extension to 32 bits ”movi is implemented as addi rB, r0, IMMED” • 32-bitars värde MOVIA rB, Value #Value is any 32 bits might be implemented as (but it is not!?) orhi rB, r0, %hi(Value) #fyller ut med nollor ori rB, rB, %lo(Value) #fyller ut med nollor IS1200 Datorteknik, föreläsning 3

  23. Hjälp från översättaren %hi (value) %lo (value) = value32 Imm116 Imm216 orhi rB, r0, %hi(Value) #fyller ut med nollor ori rB, rB, %lo(Value) #fyller ut med nollor orhi rB, r0, Imm1 #fyller ut med nollor ori rB, rB, Imm2 #fyller ut med nollor IS1200 Datorteknik, föreläsning 3

  24. MOVIA Rdest, Addr Nios-II macro Skriv makro för ladda register med 32 bitars värde .macro MOVI32 reg, value ORHI \reg, r0, %hi(\value)ORI \reg, \reg, %lo(\value) .endm OBS att inga registerinnehåll “förstörs” MOVIA är implementerad på annat (fel) sätt! IS1200 Datorteknik, föreläsning 3

  25. Fetch Operand Write Back Fetch Instruction Register File 32 x 32 EXecute/ MEMory PC+k/PC+Imm Program Memory m x 8 Register File 32 x 32 LOAD och STOREi fyra stegs pipeline ADD PC RWM true/false ALU op-code NVZC Logik för villkorligt hopp CCR IS1200 Datorteknik, föreläsning 3

  26. LOAD och STOREi 4 stegs pipeline Vi kan utföra instruktionerna LDW Rdst, (Raddr) STW Rsrc , (Raddr) IS1200 Datorteknik, föreläsning 3

  27. Behov av indexerad adress • Programvariabler ligger samlade • Ett register pekar ut variabelarean • Varje LOAD/STORE behöver först en adressberäkning med ADD • Indexerad adress LOAD R2 ← 8(R28) ; R2 ← hm(r28 + 8) • Sparar en klockcykel vid varje LOAD/STORE IS1200 Datorteknik, föreläsning 3

  28. Programvariabler placerassamlade i minnet • Variabler int i; int j; int k; • läggs efter varanni minnet av kompilatorn minne i j k IS1200 Datorteknik, föreläsning 3

  29. minne Ett register pekar ut variabelarean • Vid programstart tilldelas registret adressen till variabelarean i minnet • Global pointer är r26 i Nios-II i j register k r26 IS1200 Datorteknik, föreläsning 3

  30. minne Varje LOAD/STORE behöver adressberäkning med ADD • k ska hämtas till R2 • R17 är ledigt • ADDI R17 <- R26 + 8 • LOAD R2 <- (R17) • En extra instruktion • En extra klockcykel • Extra krångel i programkoden i j register k r26 IS1200 Datorteknik, föreläsning 3

  31. minne Indexerad adress • Addition i LOAD-instruktionen • LOAD R2 ← 8(R26) • innebärR2 ← hm(r26+8) • Innehåll i R26, plus talet 8, blir minnesadress i j register k r26 IS1200 Datorteknik, föreläsning 3

  32. LOAD och STORE I Nios-II finns instruktionerna LDW Rdst, Offset (Raddr ) STW Rsrc , Offset( Raddr ) (De kan inte utföras i en 4 stegs pipeline utan behöver en 5 stegs pipeline som presenteras senare i kursen) IS1200 Datorteknik, föreläsning 3

  33. Typisk hopp-instruktionJUMP (Raddr) • Kopiera registerinnehåll till PC • Register med 32 bitar betyder att32 bits adress kan användas • Hur får man 32 bits adress till registret ? • MOVIA Raddr , Imm32 eller motsvarande IS1200 Datorteknik, föreläsning 3

  34. Nios-II hopp-instruktionJMP rA • Kopiera innehållet i angivet register till PC IS1200 Datorteknik, föreläsning 3

  35. Om man vill kan man införaeget makro: JUMPA addr # Ladda ett 32 bitars värde till PC # Hopp med absolutadressering .macro JUMPA addrMOVIA r1, \addrJMP r1 .endm OBS att innehåll i reg r1 “förstörs” r1 kallas även “at” – assembler temporary IS1200 Datorteknik, föreläsning 3

  36. Metoder, funktioner, subrutiner • Hur sker anrop ? • Med “hopp”-instruktion ! • Hur sker återhopp ? • Med “hopp”-instruktion ! • Returadress måste lagras ! Var ? • I register eller minne ! IS1200 Datorteknik, föreläsning 3

  37. Subrutinanrop RUT: ADD … RETURN CALL RUT RET1: ADD … CALL RUT RET2: SUB ... IS1200 Datorteknik, föreläsning 3

  38. Subrutinanrop i flera nvåer(nested procedures) RUT: ADD … CALL FKN RETURN FKN: MUL … CALL NEW RETURN CALL RUT RET1: ADD … CALL RUT RET2: SUB ... IS1200 Datorteknik, föreläsning 3

  39. Subrutinanrop, rekursion RUT: ADD … CALL RUT RETURN CALL RUT RET1: ADD … CALL RUT RET2: SUB ... IS1200 Datorteknik, föreläsning 3

  40. metoder, funktioner, subrutiner, Hur sker parameteröverföringVar lagras parametrar (register/minne) • från anropare till rutinen, inparametrar • från rutinen till anroparen, returvärden Olika typ av parameter • värde • pekare IS1200 Datorteknik, föreläsning 3

  41. Nios-II hopp-instruktionCALLR rA Liknar JMP rA med tillägg att • Returadress sparas i register r31 Returadressen är adressen till instruktionen närmast efter CALLRdvs adress till CALLR ökat med 4 ! IS1200 Datorteknik, föreläsning 3

  42. Om man vill kan man införaeget makro: CALLA addr # Subrutinanrop med absolutadressering .macro CALLA addrMOVIA r1, \addrCALLR r1 .endm # OBS att innehåll i reg r1 “förstörs” IS1200 Datorteknik, föreläsning 3

  43. Nios-II hopp-instruktionCALL Label Liknar CALLA med begränsning att Label måste ligga inom det 256MB område som anges av de 4 mest signifikanta bitarna i PC IS1200 Datorteknik, föreläsning 3

  44. Stackhantering • Stack är speciell reserverad plats i minnet • stack-pekare pekar på plats i stacken • PUSH-operation, lägg på stack • POP-operation, hämta från stack IS1200 Datorteknik, föreläsning 3

  45. STACKoperationer PUSH och POP PUSH op: SP  sp - n mem(sp)  op POP dst: dst  mem(sp) SP  sp + n n = antal bytes - Stack Pointer SP + IS1200 Datorteknik, föreläsning 3

  46. Nios-II: PUSH reg # Pusha ett register på stacken .macro PUSH regSUBI sp, sp, 4 #sp = r27STW \reg, 0(sp) .endm # PUSH sp är inte bra IS1200 Datorteknik, föreläsning 3

  47. Nios-II: POP reg # Poppa ett register från stacken .macro POP regLDW \reg,0(SP) ADDI sp, sp, 4 #sp = r27 .endm # POP sp är förödande IS1200 Datorteknik, föreläsning 3

  48. Nios-II: StackReservera plats, initiera SP .equ size , 256 .data .align 2 stack: .fill size, 4, 0 ... .text … movia sp, stack+size*4 - stack: Stack Pointer SP + Behöver / SKA inte göras i laborationsprogramvaran ! IS1200 Datorteknik, föreläsning 3

  49. Nios-II stöd för stack • Stack Pointer = r27 = sp • Finns det Stack-operationer ? Nej ! Jo! • LDW reg, offset(sp) • STW reg, offset(sp) • Ingen PUSH- eller POP-instruktion • Inga subrutinanrop och returhopp med returadress på stack IS1200 Datorteknik, föreläsning 3

  50. Nios-II stöd för subrutiner • Anrop med CALLR reg, returadress i register r31 = ra • Retur med RETsom medför att r31 kopieras till PC • JMP r31 är “illegal” (och leder till exception) IS1200 Datorteknik, föreläsning 3

More Related