Presentation laddar. Vänta.

Presentation laddar. Vänta.

10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)1 2G1518 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4 vt 2007.

Liknande presentationer


En presentation över ämnet: "10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)1 2G1518 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4 vt 2007."— Presentationens avskrift:

1 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)1 2G1518 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4 vt 2007 (period 3-4) för E, I och CLMDA

2 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)2 F1F2F3F4F5F6F7F8F9F10Ö2Ö1Ö3Ö4Ö5LAB-1LAB-2Hemlab-1Ö6Ö7LAB-3Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time Nios2io C-kod Nios2int Cache-minnen CPU-scheduling 2G1518 Datorteknik http://www.imit.kth.se/courses/2G1518 http://www.imit.kth.se/courses/2G1518

3 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)3 Föreläsning 3 Innehåll  4-stegs PIPE-LINE, repetition  MACRO, pseudo-instruction  Några MACRO-exempel  Load och Store med indexerad adress  Stack med SP samt PUSH och POP  Subrutiner, anrop, retur, parametrar,

4 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)4 Litteraturhänvisningar &Kursboken, valda delar av kapitel 4 &4.1 -- 4.3 principer, ej MIPS-kod &4.5 Subrutiner och Stack

5 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)5 Viktiga delar i en dator CPU MEM BUS I/O program data

6 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)6 Programexekvering i två steg (decode) EXECUTE FETCH (update PC)

7 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)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 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)8 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, (R src ) èSTWR src, (R dst ) èCMPCondRdst, RsrcA, RsrcB # CMPICond

9 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)9 Branch on Condition Nios-II-instructions  BEQ rA, rB, Label if rA==rB then PC:=PC+Imm else PC:=PC+4  Bcond rA, rB, Label if ”true” then PC:=PC+Imm else PC:=PC+4 cond = EQ, NE, GT, GE,... Label = PC BEQ + 4 + Imm Imm = Label - PC BEQ - 4

10 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)10 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 (case sensitive !!!)

11 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)11 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 !!!)

12 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)12 SWAPR regA, regB (utmaning) Skriv makro för swap-instruktion med 2 register.macroSWAPR reg1, reg2 ADD\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 ?)

13 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)13 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

14 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)14 add rC, rA, rB#rC  rA + rB INSTRUKTIONSFORMAT Nios-II: R-type 5 5 5 11 6 ABOPXOPC Andra exempel: sub, and, or, xor,...

15 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)15 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,...

16 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)16 call label#PC  (PC 31..28 :IMM26x4) INSTRUKTIONSFORMAT Nios-II: J-type 26 6 OPIMM26 Enda exempel: call !!!

17 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)17 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

18 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)18 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

19 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)19 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

20 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)20 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

21 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)21 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”

22 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)22 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

23 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)23 LOAD och STORE i 4 stegs pipeline Vi kan utföra instruktionerna LDWR dst, (R addr ) STW R src, (R addr )

24 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)24 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

25 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)25 Programvariabler samlade i minnet zVariabler int i; int j; int k; zläggs efter varann i minnet av kompilatorn minne i j k

26 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)26 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

27 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)27 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

28 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)28 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

29 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)29 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)

30 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)30 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

31 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)31 Nios-II hopp-instruktion JMP rA zKopiera innehållet i angivet register till PC

32 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)32 Nios-II-Makrot 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

33 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)33 Metoder, funktioner, subrutiner  Hur sker anrop ?  Med “hopp”-instruktion !  Hur sker återhopp ?  Med “hopp”-instruktion !  Returadress måste lagras ! Var ?  I register eller minne !

34 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)34 Subrutinanrop CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … RETURN

35 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)35 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

36 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)36 Subrutinanrop, rekursion CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … CALL RUT RETURN

37 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)37 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

38 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)38 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 !

39 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)39 Nios-II-Makrot CALLA addr # Subrutinanrop med absolutadressering.macroCALLA addr MOVIAr1, \addr CALLRr1.endm # OBS att innehåll i reg r1 “förstörs”

40 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)40 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

41 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)41 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

42 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)42 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 + -

43 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)43 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

44 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)44 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

45 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)45 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 inte göras i laborationsprogramvaran !

46 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)46 Nios-II stöd för stack  Stack Pointer = r27 = sp  Finns det Stack-operationer ?  LDW reg, offset(sp)  STW reg, offset(sp)  Ingen PUSH- eller POP-instruktion  Inga subrutinanrop och returhopp med returadress på stack

47 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)47 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)

48 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)48 Allmänt 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)

49 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)49 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)

50 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)50 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

51 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)51 Anrop av subrutin från subrutin  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

52 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)52 Programexempel - subrutin ta fram max av val1 och val2 zExempel på C-liknande kod torde kunna vara... int val1, val2, result; /* variabler */... extern int max (int val1, int val2); /* prototyp */... result = max ( val1, val2); /* anrop */

53 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)53 Programexempel - subrutin ta fram max av val1 och val2 zint val1=0, val2=0, result=0; kan översättas till (av kompilator).data.align2#adress multipel av 2 2 val1:.word0 val2:.word0 result:.word0...

54 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)54 anrop av max (val1, val2) inparametrar i register #result = max ( val1, val2) kan översättas till.text moviar4, val1# adress till val1 i r4 ldwr4, 0(r4)# värde val1 till r4 från minnet moviar5, val2# adress till val2 i r5 ldwr5, 0(r5) # värde val2 till r5 från minnet movia r1, max# subrutin-adress till ett register callrr1# anropa subrutin moviar1, result# adress till result i r1 stwr2, 0(r1)# returvärde i r2 kopieras till minnet

55 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)55 Programexempel - subrutin ta fram max av val1 och val2 int max (int val1, int val2); { int tmp; tmp = val1; if (val2 > val1 ) tmp = val2; return (tmp); } kan översättas till (kompileras till)

56 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)56 int max (int val1, int val2) inparametrar i register max:movr2, r4# kopiera r4 till returplats bgtr4, r5, foo# hoppa om r4 > r5 movr2, r5# bara om r5 >=r4 foo:ret# PC := r31

57 10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)57 Föreläsning 3 Innehåll  4-stegs PIPE-LINE, repetition  MACRO, pseudo-instruction  Några MACRO-exempel  Load och Store med indexerad adress  Stack med SP samt PUSH och POP  Subrutiner, anrop, retur, parametrar,


Ladda ner ppt "10 June 2015 2G1518, föreläsning 3, vt2007 (E/I/CLMDA)1 2G1518 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4 vt 2007."

Liknande presentationer


Google-annonser