Presentation laddar. Vänta.

Presentation laddar. Vänta.

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.

Liknande presentationer


En presentation över ämnet: "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."— Presentationens avskrift:

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


Ladda ner ppt "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."

Liknande presentationer


Google-annonser