650 likes | 790 Views
IS1200 Datorteknik. Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4 ht 2009 – vt 2010 (period 2-3) För D-2. Ö10. F10. Hemlab-3. Hemlab-2. Hemlab-1. Ö4. Ö2. Ö1. Ö3. Ö6. Ö7. Ö8. Ö9. Ö5. F3. F1. F2. F4. F8. F5. F7. F9. F6. Tentamen. LAB-2. LAB-3.
E N D
IS1200 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4 ht 2009 – vt 2010 (period 2-3) För D-2 IS1200 Datorteknik ht2009 föreläsning 3, (D2)
Ö10 F10 Hemlab-3 Hemlab-2 Hemlab-1 Ö4 Ö2 Ö1 Ö3 Ö6 Ö7 Ö8 Ö9 Ö5 F3 F1 F2 F4 F8 F5 F7 F9 F6 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 Hösten 2009 Våren 2010 IS1200 Datorteknik ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
Litteraturhänvisningar • Kursboken, valda delar av kapitel 4 • 4.1 -- 4.3 principer, ej MIPS-kod • 4.5 Subrutiner och Stack IS1200 Datorteknik ht2009 föreläsning 3, (D2)
Viktiga delar i en dator CPU BUS program I/O MEM data IS1200 Datorteknik ht2009 föreläsning 3, (D2)
FETCH (update PC) (decode) EXECUTE Programexekveringi två steg IS1200 Datorteknik ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 IS1200 Datorteknik ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
INSTRUKTIONSFORMAT Nios-II: J-type call label #PC (PC31..28 :IMM26x4) IMM26 OP 26 6 Enda exempel: call !!! (och snart JMPI) IS1200 Datorteknik ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
Hjälp från översättaren %hi (value) %lo (value) = value 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 ht2009 föreläsning 3, (D2)
MOVIA Rdest, Addr Nios-II macro Skriv makro för ladda register med 32 bitars värde .macro MOVIA reg, value ORHI \reg, r0, %hi(\value)ORI \reg, \reg, %lo(\value) .endm OBS att inga registerinnehåll “förstörs” IS1200 Datorteknik ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
LOAD och STOREi 4 stegs pipeline Vi kan utföra instruktionerna LDW Rdst, (Raddr) STW Rsrc , (Raddr) IS1200 Datorteknik ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
Programvariabler placerassamlade i minnet • Variabler int i; int j; int k; • läggs efter varanni minnet av kompilatorn minne i j k IS1200 Datorteknik ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
Nios-II hopp-instruktionJMP rA • Kopiera innehållet i angivet register till PC IS1200 Datorteknik ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
Subrutinanrop RUT: ADD … RETURN CALL RUT RET1: ADD … CALL RUT RET2: SUB ... IS1200 Datorteknik ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
Subrutinanrop, rekursion RUT: ADD … CALL RUT RETURN CALL RUT RET1: ADD … CALL RUT RET2: SUB ... IS1200 Datorteknik ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)
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 ht2009 föreläsning 3, (D2)