Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avMikael Berg
1
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)1 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
2
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)2 F1F2F3F4F5F7F8F9F10Ö2Ö1Ö3LAB-1Hemlab-1Ö4Ö7LAB-3Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time C-kod Nios2io Nios2int Cache-minnen CPU-scheduling IS1200 Datorteknik http://www.ict.kth.se/courses/IS1200 Hösten 2009 Våren 2010 F6Ö5Ö6LAB-2
3
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)3 Föreläsning 3 Innehå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
4
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)4 Litteraturhänvisningar &Kursboken, valda delar av kapitel 4 &4.1 -- 4.3 principer, ej MIPS-kod &4.5 Subrutiner och Stack
5
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)5 Viktiga delar i en dator CPU MEM BUS I/O program data
6
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)6 Programexekvering i två steg (decode) EXECUTE FETCH (update PC)
7
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)7 Programexekvering i fyra steg EXecute/ MEMory Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU ADD Register File 32 x 32 Register File 32 x 32 PC NVZC Logik för villkorligt hopp op-code Cond true/false PC+k/ PC+Imm RWM
8
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)8 Instruktioner i ”vår” 4-stegs CPU èADDR dst, R srcA, R srcB # SUB/AND/OR/XOR èADDIR dst, R srcA, Imm # SUBI/ANDI/ORI/XORI èJMP / BR# ovillkorliga hopp èLDWR dst, (R src )# LOAD èSTWR src, (R dst ) # STORE èCMPRsrcA, RsrcB èCMPIRsrcA, Imm èBCond# villkorliga hopp èR0 = 0 ger ytterligare funktioner, NOP, CLR, COPY
9
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)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” ...
10
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)10 Instruktioner Nios-II-Instruktioner èMOVR dst, R src èMOVIR dst, Imm 16 # ADDI/SUBI èADDR dst, R srcA, R srcB # SUB/AND/OR/XOR èADDIR dst, R srcA, Imm # SUBI/ANDI/ORI/XORI èBR / JMP / BCond èLDWR dst, offset(R src )# indexerad adress èSTWR src, offset(R dst) # indexerad adress èCMPCondRdst, RsrcA, RsrcB # CMPICond
11
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)11 Branch on Condition Nios-II-instructions BEQ rA, rB, Label if rA==rB then PC:=PC+Imm 16 else PC:=PC+4 Bcond rA, rB, Label if ”true” then PC:=PC+Imm 16 else PC:=PC+4 cond = EQ, NE, GT, GE,... Label = PC BEQ + 4 + Imm 16 Imm 16 = Label - PC BEQ - 4
12
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)12 Macro-instruction Pseudo-instruktion TYPEXEMPEL – MALL.macroNOP ADDr0, 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 !!!)
13
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)13 Macro-instruction Pseudo-instruktion TYPEXEMPEL – MALL.macroCLR 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 !!!)
14
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)14 NEG reg Skriv makro för NEG-instruktion.macroNEG 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 !!!)
15
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)15 SWAPR regA, regB (utmaning) Skriv makro för swap-instruktion med 2 register.macroSWAPR reg1, reg2 XOR\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 ?)
16
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)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
17
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)17 add rC, rA, rB#rC rA + rB INSTRUKTIONSFORMAT Nios-II: R-type 5 5 5 11 6 ABOPXOPC Andra exempel: sub, and, or, xor,...
18
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)18 addi rB, rA, IMM16#rB rA + sext(IMM16) INSTRUKTIONSFORMAT Nios-II: I-type 5 5 16 6 ABIMM16OP Andra exempel: subi, andi, ori, orhi, xori,...
19
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)19 call label#PC (PC 31..28 :IMM26x4) INSTRUKTIONSFORMAT Nios-II: J-type 26 6 OPIMM26 Enda exempel: call !!! (och snart JMPI)
20
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)20 ori rB, rA, IMM16 #rB rA | (0x0000:IMM16) ori rB, rA, IMM16 Instruktion i Nios-2, I-type 5 5 16 6 ABIMM16OP Komplettera IMM16 med nollor i de 16 mest signifikanta bitarna. Gör or-operation med innehåll i rA Skriv resultat till rB
21
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)21 orhi rB, rA, IMM16 #rB rA | (IMM16:0x0000) orhi rB, rA, IMM16 Instruktion i Nios-2, I-type 5 5 16 6 ABIMM16OP Komplettera IMM16 med nollor i de 16 minst signifikanta bitarna. Gör or-operation med innehåll i rA Skriv resultat till rB
22
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)22 Ladda ett register med ett konstant 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!?) orhirB, r0, %hi(Value)#fyller ut med nollor orirB, rB, %lo(Value) #fyller ut med nollor
23
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)23 Imm1 16 Hjälp från översättaren %hi (value) %lo (value) Imm2 16 = value orhirB, r0, %hi(Value)#fyller ut med nollor orirB, rB, %lo(Value) #fyller ut med nollor orhirB, r0, Imm1#fyller ut med nollor orirB, rB, Imm2 #fyller ut med nollor
24
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)24 MOVIA Rdest, Addr Nios-II macro Skriv makro för ladda register med 32 bitars värde.macroMOVIA reg, value ORHI\reg, r0, %hi(\value) ORI\reg, \reg, %lo(\value).endm OBS att inga registerinnehåll “förstörs”
25
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)25 LOAD och STORE i fyra stegs pipeline EXecute/ MEMory Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU ADD Register File 32 x 32 Register File 32 x 32 PC NVZC Logik för villkorligt hopp op-code CCR true/false PC+k/ PC+Imm RWM
26
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)26 LOAD och STORE i 4 stegs pipeline Vi kan utföra instruktionerna LDWR dst, (R addr ) STW R src, (R addr )
27
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)27 Behov av indexerad adress zProgramvariabler ligger samlade zEtt register pekar ut variabelarean zVarje LOAD/STORE behöver först en adressberäkning med ADD zIndexerad adress LOAD R2 ← 8(R28); R2 ← hm(r28 + 8) zSparar en klockcykel vid varje LOAD/STORE
28
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)28 Programvariabler placeras samlade i minnet zVariabler int i; int j; int k; zläggs efter varann i minnet av kompilatorn minne i j k
29
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)29 Ett register pekar ut variabelarean zVid programstart tilldelas registret adressen till variabelarean i minnet zGlobal pointer är r26 i Nios-II minne i j k register r26
30
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)30 Varje LOAD/STORE behöver adressberäkning med ADD zk ska hämtas till R2 zR17 är ledigt ADDI R17 <- R26 + 8 LOAD R2 <- (R17) zEn extra instruktion zEn extra klockcykel zExtra krångel i programkoden minne i j k register r26
31
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)31 Indexerad adress zAddition i LOAD- instruktionen zLOAD R2 ← 8(R26) zinnebär R2 ← hm(r26+8) zInnehåll i R26, plus talet 8, blir minnesadress minne i j k register r26
32
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)32 LOAD och STORE I Nios-II finns instruktionerna LDWR dst, Offset (R addr ) STW R src, Offset( R addr ) (De kan inte utföras i en 4 stegs pipeline utan behöver en 5 stegs pipeline som presenteras senare i kursen)
33
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)33 Typisk hopp-instruktion JUMP (R addr ) zKopiera registerinnehåll till PC zRegister med 32 bitar betyder att 32 bits adress kan användas zHur får man 32 bits adress till registret ? zMOVIA R addr, Imm 32 eller motsvarande
34
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)34 Nios-II hopp-instruktion JMP rA zKopiera innehållet i angivet register till PC
35
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)35 Om man vill kan man införa eget makro: JUMPA addr # Ladda ett 32 bitars värde till PC # Hopp med absolutadressering.macroJUMPA addr MOVIAr1, \addr JMPr1.endm OBS att innehåll i reg r1 “förstörs” r1 kallas även “at” – assembler temporary
36
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)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 !
37
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)37 Subrutinanrop CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … RETURN
38
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)38 Subrutinanrop i flera nvåer (nested procedures) CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … CALL FKN RETURN FKN:MUL … CALL NEW RETURN
39
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)39 Subrutinanrop, rekursion CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … CALL RUT RETURN
40
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)40 metoder, funktioner, subrutiner, Hur sker parameteröverföring Var lagras parametrar (register/minne) zfrån anropare till rutinen, inparametrar zfrån rutinen till anroparen, returvärden Olika typ av parameter zvärde zpekare
41
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)41 Nios-II hopp-instruktion CALLR rA Liknar JMP rA med tillägg att Returadress sparas i register r31 Returadressen är adressen till instruktionen närmast efter CALLR dvs adress till CALLR ökat med 4 !
42
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)42 Om man vill kan man införa eget makro: CALLA addr # Subrutinanrop med absolutadressering.macroCALLA addr MOVIAr1, \addr CALLRr1.endm # OBS att innehåll i reg r1 “förstörs”
43
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)43 Nios-II hopp-instruktion CALL 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
44
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)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
45
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)45 STACK operationer PUSH och POP Stack Pointer SP PUSH op: SP sp - n mem(sp) op POPdst: dst mem(sp) SP sp + n n = antal bytes + -
46
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)46 Nios-II: PUSH reg #Pusha ett register på stacken.macroPUSH reg SUBIsp, sp, 4#sp = r27 STW\reg, 0(sp).endm #PUSH sp är inte bra
47
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)47 Nios-II: POP reg #Poppa ett register från stacken.macroPOP reg LDW\reg,0(SP) ADDIsp, sp, 4#sp = r27.endm # POP sp är förödande
48
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)48 Nios-II: Stack Reservera plats, initiera SP Stack Pointer SP.equ size, 256.data.align2 stack:.fill size, 4, 0....text … movia sp, stack+size*4 + - stack: Behöver / SKA inte göras i laborationsprogramvaran !
49
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)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
50
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)50 Nios-II stöd för subrutiner Anrop med CALLR reg, returadress i register r31 = ra Retur med RET som medför att r31 kopieras till PC JMP r31 är “illegal” (och leder till exception)
51
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)51 Allmänt: Var placeras Returadress vid subrutinanrop zI ett speciellt register (fördel/nackdel) zI valfritt register (fördel/nackdel) zI minnet på speciell plats (fördel/nackdel) zI minnet på valfri plats (fördel/nackdel) zI minnet på en stack med PUSH (fördel/nackdel) zI första ordet i subrutinen (fördel/nackdel)
52
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)52 Parameterplats till och från subrutin zI register (fördel/nackdel) zI minnet på fast adress (fördel/nackdel) zI minnet på en stack (fördel/nackdel)
53
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)53 Exempel på parameteröverföring Nios-II: i r2-r3 och r4-r7 Anroparen lagrar parametrar i r4-r7 Anroparen gör CALL eller CALLR varvid returadress sparas i r31 Parametrar finns i r4-r7 Det finns 8 ”lediga” register, r8-r15 Returvärde ska placeras i r2-r3 Returadress i r31, retur ska göras med RET
54
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)54 Anrop av subrutin från subrutin ”nested subroutine call” Viktiga registerinnehåll måste skyddas Stacken används för att skydda register. Speciellt returadress i ra måste skyddas Anroparen, caller, har ansvar för register r8-r15 caller saved. De får förstöras av den anropade. Den anropade, callee, har ansvar att inte förändra innehåll i r16-r23, callee saved Parametrar i r2-r3 och r4-r7 måste hanteras rätt
55
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)55 Activation Record vid Funktionsanrop Stacken används vid funktionsanrop för att i ett aktiveringsblock lagra informationen zInparametrar zÅterhoppsadress zLokala variabler z...
56
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)56 old top push param-n... push param-2 push param-1 + - param-1 param-2 … param-n Stack Pointer SP Activation Record lagring av inparametrar
57
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)57 old top push param-n... push param-2 push param-1 callmethod + - param-1 param-2 … param-n Stack Pointer SP Activation Record funktionsanrop, returadress
58
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)58 old top method: push ra + - param-1 param-2 … param-n Stack Pointer SP Activation Record Save return address retaddr
59
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)59 old top method: push ra move fp, sp + - param-1 param-2 … param-n Stack Pointer SP Activation Record Frame Pointer retaddr Frame Pointer FP
60
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)60 Frame Pointer FP + - locvar-2 locvar-1 retaddr param-1 param-2 … param-n Stack Pointer SP Activation Record Local variables old top method: push ra move fp, sp subisp, sp, n*4
61
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)61 Adressering i metoden adress relativt frame pointer Frame Pointer FP param-1 = 1n(fp) param-2 = 2n(fp) param-k = kn(fp)... locvar-1 = -1n(fp) locvar-2 = -2n(fp) + - locvar-2 locvar-1 retaddr param-1 param-2 … param-n Stack Pointer SP
62
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)62 Frame Pointer FP + - locvar-2 locvar-1 retaddr param-1 param-2 … param-n Stack Pointer SP Activation Record return operation old top method: push ra move fp, sp subisp, sp, n*4 ”work” movsp, fp popra ret X X
63
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)63 old top push param-n... push param-2 push param-1 callmethod + - param-1 param-2 … param-n Stack Pointer SP Activation Record after return to caller
64
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)64 old top push param-n... push param-2 push param-1 callmethod addi sp, sp, 4*n + - param-1 param-2 … param-n Stack Pointer SP Activation Record after return to caller
65
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)65 Föreläsning 3 Innehå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
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.