Presentation laddar. Vänta.

Presentation laddar. Vänta.

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F31 IS1200 Datorteknik Föreläsning CE F3 Metoder / subrutiner Kursboken, delar av kapitel 4.

Liknande presentationer


En presentation över ämnet: "2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F31 IS1200 Datorteknik Föreläsning CE F3 Metoder / subrutiner Kursboken, delar av kapitel 4."— Presentationens avskrift:

1 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F31 IS1200 Datorteknik Föreläsning CE F3 Metoder / subrutiner Kursboken, delar av kapitel 4

2 IS1200 Datorteknik http://www.ict.kth.se/courses/IS1200 Assemblerprogram C In- och utmatning Avbrott och "trap" Cacheminnen Trådar, synkronisering CE F1 CE F3 CE F4 CE F5 CE F6 CE F7 CE F8 CE F9 CE F2 CE Ö4 CE Ö1 CE Ö2 CE Ö3 CE Ö7 CE Ö8 CE Ö9 CE Ö5CE Ö6 lab nios2time hemlab C lab nios2io lab nios2int hemlab cache hemlab trådar CE F10CE Ö10 tentamen 2 April 20152 IS1200 Datorteknik o k, föreläsning CE - F3

3 ”Öppet hus” välkommen Öppet hus i labbsalen: torsdag 19 januari kl 13-17 har vi öppet hus i sal 648. Ingen bokning behövs för det här tillfället. - Du kan få hjälp att provköra labprogramvara på de stationära datorer som finns i salen - Vi svarar på frågor om labbarna och kursen. - Du kan få hjälp att installera labprogramvara - Du kan testa att din bärbara dator fungerar med vår hårdvara. 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F33

4 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F34 Föreläsning 3 Innehåll  4- (och 5-) 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

5 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F35 Litteraturhänvisningar &Kursboken, valda delar av kapitel 4 &4.1 -- 4.3 principer, ej MIPS-kod &4.5 Subrutiner och Stack

6 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F36 4 Viktiga delar i en dator CPU MEM BUS I/O program data

7 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F37 Programexekvering i två steg (decode) EXECUTE FETCH (update PC)

8 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F38 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+4 PC+Imm RWM

9 Villkorliga hopp Kvar att fundera över zNär beräknas hoppadress zNär ”beräknas” villkor zVar finns all kontroll-logik och avkodning av instruktioner Detta diskuteras i boken och tas eventuellt upp senare i kursen 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F39

10 September 15, 2010 IS1500 Datorteknik o k, föreläsning CE - F210 CPU med 5 stegs PIPE-LINE Register File 32 x 32 Program Memory n x 16 ALU PC ADD IR0 IR1 IR2 IR3 +2 Register File 32 x 32 RWM PC+n PC+Imm ALU/EXE FO MEM FI WB NYTT 2 April 201510 IS1200 Datorteknik o k, föreläsning CE - F3

11 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F311 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/MOVE

12 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F312 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” ...

13 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F313 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/Set on Cond èForts.

14 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F314 CMP: ”Set on Condition” Nios-II-instructions  CMPEQ Rdst, rA, rB if rA==rB then Rdst := 1 else Rdst := 0  CMPcond Rdst, rA, rB if ”true” then Rdst := 1 else Rdst := 0 cond = EQ, NE, GT, GE,... 1 = ”True”, 0 = ”False”

15 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F315 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

16 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F316 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 !!!)

17 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F317 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 implementeras med ADDI !!! (case sensitive !!!)

18 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F318 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 !!!)

19 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F319 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 ?)

20 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F320 Något om Nios-II Instruktionsformat Nios-II-processorn Varje instruktion i Nios-II upptar 32 bitar ! Det finns endast 3 olika instruktionsformat  R-format  I-format  J-format

21 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F321 add rC, rA, rB#rC  rA + rB INSTRUKTIONSFORMAT Nios-II: R-type 5 5 5 11 6 ABOPXOPC Andra exempel: sub, and, or, xor,...

22 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F322 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,...

23 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F323 call label#PC  (PC 31..28 :IMM26x4) INSTRUKTIONSFORMAT Nios-II: J-type 26 6 OPIMM26 Enda exempel: call !!! (och snart JMPI)

24 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F324 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

25 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F325 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

26 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F326 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

27 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F327 Imm1 16 Hjälp från översättaren %hi (value) %lo (value) Imm2 16 = value 32 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

28 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F328 MOVIA Rdest, Addr Nios-II macro Skriv makro för ladda register med 32 bitars värde.macroMOVI32 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 sätt!

29 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F329 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

30 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F330 LOAD och STORE i 4 stegs pipeline Vi kan utföra instruktionerna LDWR dst, (R addr ) STW R src, (R addr )

31 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F331 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

32 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F332 Programvariabler placeras samlade i minnet zVariabler int i; int j; int k; zläggs efter varann i minnet av kompilatorn minne i j k

33 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F333 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

34 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F334 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

35 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F335 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

36 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F336 LOAD och STORE I Nios-II finns instruktionerna LDWR dst, Offset (R addr ) STW R src, Offset( R addr ) (De kan utföras i en 5 stegs pipeline)

37 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F337 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

38 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F338 Nios-II hopp-instruktion JMP rA zKopiera innehållet i angivet register till PC

39 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F339 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

40 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F340 Metoder, funktioner, subrutiner  Hur sker anrop ?  Med “hopp”-instruktion !  Hur sker återhopp ?  Med “hopp”-instruktion !  Returadress måste lagras ! Var ?  I register eller minne !

41 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F341 Subrutinanrop CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … RETURN

42 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F342 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

43 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F343 Subrutinanrop, rekursion CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … CALL RUT RETURN

44 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F344 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

45 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F345 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 !

46 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F346 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”

47 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F347 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

48 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F348 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

49 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F349 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 + -

50 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F350 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

51 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F351 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

52 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F352 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 !

53 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F353 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

54 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F354 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” (ger fel vid översättning eller vid exekvering)

55 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F355 Allmänt: Var placeras Returadress vid subrutinanrop zI ett speciellt register (fördel/nackdel) zI minnet på en stack med ”PUSH” (fördel/nackdel)

56 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F356 Parameterplats till och från subrutin zI register (fördel/nackdel) zI minnet på en stack (fördel/nackdel)

57 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F357 Exempel på parameteröverföring Nios-II: i r4-r7 och r2-r3  Anroparen lagrar in-parametrar i r4-r7  Anroparen gör CALL eller CALLR varvid returadress sparas i r31  In-Parametrar finns i r4-r7  Det finns 8 ”lediga” register, r8-r15  Returvärde ska placeras i r2-r3  Returadress finns i r31, retur ska göras med RET

58 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F358 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 r31/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 r4-r7 och r2-r3 måste hanteras rätt

59 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F359 Activation Record vid Funktionsanrop Stacken används av många kompilatorer vid funktionsanrop för att i ett aktiveringsblock lagra informationen zInparametrar zÅterhoppsadress zLokala variabler z...

60 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F360 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

61 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F361 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

62 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F362 old top method: push ra + - param-1 param-2 … param-n Stack Pointer SP Activation Record Spara return address retaddr

63 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F363 old top method: push ra move fp, sp + - param-1 param-2 … param-n Stack Pointer SP Activation Record Skapa en Frame Pointer retaddr Frame Pointer FP Frame pointer är r28 i Nios-II

64 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F364 Frame Pointer FP + - locvar-2 locvar-1 retaddr param-1 param-2 … param-n Stack Pointer SP Activation Record Reservera plats för Local variables old top method: push ra move fp, sp subisp, sp, n*4

65 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F365 Operandutpekning 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

66 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F366 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

67 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F367 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

68 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F368 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

69 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F369 Föreläsning 3 Innehåll  4- och 5-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

70 Spara returadress-register vid nestade anrop # use r8 to r15, do no use r16- r23 subrutin:pushr31... callannan1# use r8 to r15 callannan2# use r8 to r15... popr31 ret 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F370

71 Spara arbets-register vid nestade anrop, alt 1 # use r8 to r15, do no use r16- r23 subrutin:pushr31 use r8 to r15... pushr8 to r15 callannan1#use r8 to r15 callannan2#use r8 to r15 popr15 to r8... use r8 to r15 popr31 ret 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F371

72 Spara register vid nestade anrop, alt 2 # use r8 to r15, do no use r16- r23 subrutin:pushr31 pushr16 to r23 user16 to r23 callannan1#use r8 to r15 callannan2#use r8 to r15 use r16 to r23 popr23 to r16 popr31 ret 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F372


Ladda ner ppt "2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F31 IS1200 Datorteknik Föreläsning CE F3 Metoder / subrutiner Kursboken, delar av kapitel 4."

Liknande presentationer


Google-annonser