Presentation laddar. Vänta.

Presentation laddar. Vänta.

1 June 20152G1502, föreläsning 3, vt20041 2G1502 Datorteknik allmän kurs Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version.

Liknande presentationer


En presentation över ämnet: "1 June 20152G1502, föreläsning 3, vt20041 2G1502 Datorteknik allmän kurs Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version."— Presentationens avskrift:

1 1 June 20152G1502, föreläsning 3, vt G1502 Datorteknik allmän kurs Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version vt 2004 för E och I

2 1 June 20152G1502, föreläsning 3, vt20042 Innehåll z4-stegs PIPE-LINE zLoad och Store mot Minne z5-stegs PIPE-LINE zNios hårdvara för hopp zSubrutiner, anrop, retur, stack zRegister Window zParameteröverföring

3 1 June 20152G1502, föreläsning 3, vt20043 Programexekvering i två steg (decode) EXECUTE FETCH (update PC)

4 1 June 20152G1502, föreläsning 3, vt20044 Hårdvara i processorn Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU IR PC +n Register File 32 x 32 Register File 32 x 32 32

5 1 June 20152G1502, föreläsning 3, vt20045 PIPE - LINE införs nu ! Flera register IR Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU IR0 IR1 IR2 NYTT PC +n Register File 32 x 32 Register File 32 x 32

6 1 June 20152G1502, föreläsning 3, vt20046 Fenomen pga PIPE-LINE Data Dependencies zProgramexempel 44:ADD R1 <- R2 + R3 48:ADD R4 <- R5 + R6 52:ADD R7 <- R1 + R4 z”nya” R1 och R4 finns inte i REG-FILE

7 1 June 20152G1502, föreläsning 3, vt20047 Data Forward inför nya data-vägar Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU IR0 IR1 IR2 Register File 32 x 32 Register File 32 x 32 52: R7 <- R1+R4 44: R4 <- R5+R6 48: R1 <- R2+R3 NYTT

8 1 June 20152G1502, föreläsning 3, vt20048 ADDI R A, data n ADDI Hur många bitar behövs? ~6+5+5! Hur stor blir varje instruktion? 16! Nios INSTRUKTIONSFORMAT med immediate data Exempelvis: 6 5 5

9 1 June 20152G1502, föreläsning 3, vt20049 Immediate data inför nya datavägar Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU PC IR0 IR1 IR2 +n Ny dataväg Register File 32 x 32 Register File 32 x 32

10 1 June 20152G1502, föreläsning 3, vt Immediate data är bara 5 bitar zEn PreFiX-instruktion PFX införs zPFX modifierar efterföljande instruktion och ger den ett längre immediate-värde zPFX använder ett specialregister K zPrincipen med prefixinstruktioner finns även i Pentium-serien R

11 1 June 20152G1502, föreläsning 3, vt Inför ny hårdvara K - register Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU ADD IR0 IR1 IR2 Register File 32 x 32 Register File 32 x 32 PC+2 PC+Imm PC

12 1 June 20152G1502, föreläsning 3, vt Hur används register K ? zPreFiX-instruktionen PFX Imm 11 skriver ett 11 bitars värde till register K zInstruktionen direkt efter PFX Imm 11 använder innehåll i K – sedan nollställs register K zImm 5 ökar till (Imm 11 cat Imm 5 ) R

13 1 June 20152G1502, föreläsning 3, vt PFX Imm 11 FIPFX - - PFX IMM 11 MOVI R dst, Imm 5 FIFOEXEWB

14 1 June 20152G1502, föreläsning 3, vt Mall för makro – en syntetisk instruktion.macroCLR reg MOVI\reg, 0x0.endm Effekt: man kan använda en ny instruktion clr %ri för att nollställa register %ri R

15 1 June 20152G1502, föreläsning 3, vt ADD Rdest, regA, regB Skriv makro för add-instruktion med 3 register.macroADD reg1, reg2, reg3 MOV\reg1, \reg2 ADD\reg1, \reg3.endm R

16 1 June 20152G1502, föreläsning 3, vt Makrot MOVIA reg, Addr ;Ladda ett 32 bitars värde till ett register ;Värdet kan vara negativt.macroMOVIA reg, Addr PFX%hi(\Addr) MOVI\reg, %lo(\Addr) PFX%xhi(\Addr) MOVHI\reg, %xlo(\Addr).endm R

17 1 June 20152G1502, föreläsning 3, vt JUMP (R addr ) inför nya datavägar Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU PC IR0 IR1 IR2 +n Ny dataväg Register File 32 x 32 Register File 32 x 32

18 1 June 20152G1502, föreläsning 3, vt BRA Imm n inför ADDitionsenhet och datavägar Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU ADD IR0 IR1 IR2 Register File 32 x 32 Register File 32 x 32 PC PC+4 PC+Imm

19 1 June 20152G1502, föreläsning 3, vt Fenomen pga PIPE-LINE Branch Delay Slot Instruktionen i minnespositionen närmast efter en hoppinstruktion kommer utföras innan hoppet verkställs Programexempel 16: BRA 64 20: ADD … 24: … … 84: SUB...

20 1 June 20152G1502, föreläsning 3, vt LOAD och STORE zVi vill kunna utföra instruktionerna LOADR dst, [ R addr ] STORE [ R addr ], R src

21 1 June 20152G1502, föreläsning 3, vt Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU ADD IR0 IR1 IR2 RWM LOAD och STORE med 4 stegs PIPE-LINE Register File 32 x 32 Register File 32 x 32 PC+4 PC+Imm PC

22 1 June 20152G1502, föreläsning 3, vt LOAD och STORE med 4 stegs PIPE-LINE LOAD to Rd USE Rd FIFO MEM WBFIFOEXEWB Data från MEM finns tillgängligt Data från MEM finns tillgängligt för FO tack vare Data Forward

23 1 June 20152G1502, föreläsning 3, vt 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

24 1 June 20152G1502, föreläsning 3, vt Programvariabler samlade i minnet zVariabler yint i; yint j; yint k; zläggs efter varann i minnet av kompilatorn minne i j k

25 1 June 20152G1502, föreläsning 3, vt Ett register pekar ut variabelarean zVid programstart tilldelas registret adressen till variabelarean i minnet minne i j k register r28

26 1 June 20152G1502, föreläsning 3, vt Varje LOAD/STORE behöver adressberäkning med ADD zk ska hämtas till R2 zR17 är ledigt  ADDI R17 <- R  LOAD R2 <- (R17) zEn extra instruktion zEn extra klockcykel zExtra krångel i programkoden minne i j k register r28

27 1 June 20152G1502, föreläsning 3, vt Indexerad adress zAddition i LOAD- instruktionen zLOAD R2 ← 8(R28) zinnebär R2 ← hm(r28+8) zInnehåll i R28, plus talet 8, blir minnesadress minne i j k register r28

28 1 June 20152G1502, föreläsning 3, vt Sparar en klockcykel vid varje LOAD zadd följt av load byts mot zload med "inbyggd" addition addi r17←r28+8 load r2←(r17) FIFO EXE WB FIFO MEM WB load r2←8(r17) FIFOALUWB MEM

29 1 June 20152G1502, föreläsning 3, vt LOAD och STORE zVi vill alltså kunna utföra instruktionerna LOADR dst, Offset[ R addr ] STOREOffset[ R addr ], R src

30 1 June 20152G1502, föreläsning 3, vt LOAD Rdst <- Offset[Raddr] zVi kan utföra instruktionen LOADR dst, Offset[ R addr ] zmed koden (tar 2 klockcykler eller hur) ADDIR adr, Offset LOADR dst, [ R addr ]

31 1 June 20152G1502, föreläsning 3, vt STORE Offset[Raddr] <- Rsrc zVi kan utföra instruktionen STOREOffset[ R addr ], R src zmed koden (tar 2 klockcykler eller hur) ADDIR adr, Offset ST[ R addr ], R src

32 1 June 20152G1502, föreläsning 3, vt stegs PIPE-LINE ALUFetch OperandMEMFetch Instruction Register File 32 x 32 Register File 32 x 32 Program Memory m x 8 ALU Register File 32 x 32 Register File 32 x 32 PC ADD IR0 IR1 IR2 RWM IR3 Write Back +n

33 1 June 20152G1502, föreläsning 3, vt Programexekvering i fem steg zFI- Fetch Instruction zFO - Fetch Operand zALU - Calculation zMEM - Memory Reference zWB - Write Back

34 1 June 20152G1502, föreläsning 3, vt stegs PIPE-LINE LOAD FIFOALUWB MEM FIFOALUWB MEM ADD Hur lång tid tar en instruktion ? 5 cykler Antal cykler per instruktion, CPI ? 1 cykel! Antal instruktioner per cykel ? 1 instruktion !

35 1 June 20152G1502, föreläsning 3, vt Fenomen pga PIPE-LINE 3. Load Delay LOAD to Rd FIFOALUWB MEM FIFOALUWB MEM Rd tillgängligt från minne Rd önskas till ALU-reg men finns inte tillgängligt USE Rd

36 1 June 20152G1502, föreläsning 3, vt Load DELAY även vid Data Forward LOAD FIFOALUWB MEM ADD Tillgängligt från minne FIFOALUWB MEM Skriv till ALU-reg Data Forward fungerar FIFOALUWB MEM NOP?

37 1 June 20152G1502, föreläsning 3, vt Slut på ”repetitionen” Nu kommer en hel del om hopp med mera Speciellt för Nios-processorn

38 1 June 20152G1502, föreläsning 3, vt Programmering med hopp zHopp = ett värde skrivs till PC zEffektivadress skrivs till PC zOlika adresseringsmetoder finns zJUMP Label brukar använda absolut adress zBRA Label brukar använda PC-relativ adress

39 1 June 20152G1502, föreläsning 3, vt Ovillkorligt hopp Villkorligt hopp zOvillkorligt hopp utförs alltid Exempel: JMP och BRA zVillkorligt hopp utförs endast om ett angivet villkor är sant Exempel Bcc där cc är villkoret zExempel på villkor EQZ = EQual to Zero NEZ = Not Equal to Zero

40 1 June 20152G1502, föreläsning 3, vt JUMP och BRA Ovillkorliga hopp z JUMP brukar ha direkt adress z BRA brukar ha PC-relativ adress JMP 104 ;PC := 104”hopp till 104”. BRA 40 ;PC := pc + 40”hopp till 268” 32: 104: 224: 268:

41 1 June 20152G1502, föreläsning 3, vt Typisk hopp-instruktion JUMP Label  Absolut adressering  Läget Label motsvarar en binär adress  Kopiera Label till PC  Om PC har 32 bitar bör Label vara 32 bitar  Adressen Label lagras i instruktionen

42 1 June 20152G1502, föreläsning 3, vt Typisk hopp-instruktion BRA Label  PC-relativ adressering  Läget Label motsvarar en binär adress  Före körning beräknar assemblern hur långt från instruktionen Label finns  Avståndet lagras i instruktionen som displacement eller offset  Vid körning adderas offset till PC  offset kan vara positivt eller negativt

43 1 June 20152G1502, föreläsning 3, vt 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

44 1 June 20152G1502, föreläsning 3, vt Nios hopp-instruktion JMP %rA zSkifta innehåll i register %rA ett steg åt vänster och kopiera till PC

45 1 June 20152G1502, föreläsning 3, vt Nios JMP %rA inför nya datavägar Execute Fetch Operand Write Back Fetch Instruction Register File 32 x 32 Register File 32 x 32 Program Memory n x 16 ALU Register File 32 x 32 Register File 32 x 32 PC IR0 IR1 IR2 +2

46 1 June 20152G1502, föreläsning 3, vt Nios hårdvara för JMP %rA 32 bitar från ”A-busen” Program Counter 0 ignoreras

47 1 June 20152G1502, föreläsning 3, vt Typisk hopp-instruktion BR Imm n zPC sätts till PC + Imm n zHur stor är Imm n ? zHur stor vill vi att Imm n ska vara helst ?

48 1 June 20152G1502, föreläsning 3, vt Nios hopp-instruktion BR IMM11 zSkifta IMM11 ett steg vänster zgör Sign Extension zaddera till aktuellt värde i PC zPC <- PC (sext (IMM11) <<1)

49 1 June 20152G1502, föreläsning 3, vt BRA Imm n inför ADDitionsenhet och datavägar Execute Fetch Operand Write Back Fetch Instruction Register File 32 x 32 Register File 32 x 32 Program Memory n x 16 ALU Register File 32 x 32 Register File 32 x 32 PC ADD IR0 IR1 IR2 +2

50 1 June 20152G1502, föreläsning 3, vt Nios hårdvara för BR IMM IR0 PC ADD IMM11: 11 bitar från IR0 Sign Extension

51 1 June 20152G1502, föreläsning 3, vt Typisk instruktion SUBR dst, R srcA, R srcB zSubtrahera innehåll i R srcA från R srcB zoch skriv till R dst zFörutom resultatet / skillnaden zså lagras ytterligare information zi STATUS-flaggor

52 1 June 20152G1502, föreläsning 3, vt Typisk instruktion CMPR srcA, R srcB zJämför innehåll i R srcA och R srcB genom att zSubtrahera innehåll i R srcA från R srcB zmen skriv ej resultat till något register zInformation om resultatet / skillnaden lagras som information i STATUS-flaggor

53 1 June 20152G1502, föreläsning 3, vt STATUS-flaggor zZ - Zero; ”utfall lika med noll” zN - Negativ; ”utfall med negativt tecken” zV - oVerflow; ”utfall med overflow” zC - Carry; Carry-ut från ALU zPåverkas av ADD, SUB, CMP...

54 1 June 20152G1502, föreläsning 3, vt STATUS -flaggor Execute Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU PC ADD IR0 IR1 IR2 +n NVZC Register File 32 x 32 Register File 32 x 32

55 1 June 20152G1502, föreläsning 3, vt Gäller detta för Nios-Processorn ? R0 R31 R1 PC Minne Generella registerProgramräknare NVZC Status

56 1 June 20152G1502, föreläsning 3, vt Villkorlig hopp-instruktion Bcond Imm n  PC sätts till PC + Imm n om cond är sant  PC sätts till PC + n om cond är falskt (n är antal bytes per instruktion)  Nios har ingen instruktion Bcond Imm  Det måste finnas minst en villkorlig instruktion för att klara en IF-sats

57 1 June 20152G1502, föreläsning 3, vt Nios har villkorlig instruktion IFS cc_IMM4  IFS - Conditionally execute next instruction  Om villkoret är sant utförs nästa instr.  Om villkoret är falskt skippas nästa instruktion  (Om nästa är en PFX så skippas 2 instr.)

58 1 June 20152G1502, föreläsning 3, vt Nios har villkorlig instruktion SKPS cc_IMM4  SKPS - Skip On Condition Code  Om villkoret är sant skippas nästa instr.  (Om nästa är en PFX så skippas 2 instr.)  Om villkoret är falskt utförs nästa instruktion

59 1 June 20152G1502, föreläsning 3, vt IFS cc_IMM4 SKPS cc_IMM4  cc_IMM4 kan väljas bland 14 olika  cc_eq, cc_ne, cc_lt osv. enligt tabell Program-exempel: if (reg1==0) goto Label CMPIreg1, 0;jämför reg1 med noll IFScc_eq;om Z=1 BRLabel;hoppa till Label

60 1 June 20152G1502, föreläsning 3, vt olika villkor finns i Nios zcc_ncC = 0 zcc_cC = 1 zcc_nzZ = 0 zcc_zZ = 1 zcc_plN = 0 zcc_miN = 1 zcc_ltN xor V zcc_ge not(N xor V) z cc_gt not(Zor(NxorV)) z cc_le Zor(NxorV) z cc_nvV = 0 z cc_vV = 1 z cc_hinot (C or Z) z cc-laC or Z

61 1 June 20152G1502, föreläsning 3, vt Alias för villkor i Nios zcc_cs = cc_cCarry Set = Carry zcc_n = cc_miNegative = MInus zcc_cc = cc_ncCarry Clear = No Carry zcc_vc = cc_nvoVerflow Clear = No oVe... zcc_eq = cc_zEqual = Zero zcc_ne = cc_nzNot Equal = Not Zero zcc_vs = cc_voVerflow Set = oVerflow zcc_p = cc_plPlus = PLus

62 1 June 20152G1502, föreläsning 3, vt Nios instruktion IFRZ reg zExecute next instruction if register is Zero zExempel: if (reg1==0) goto Label IFRZreg1;om reg1 = 0 BRLabel;hoppa till Label zSKPRNZ är ekvivalent med IFRZ zOm nästa är en PFX så görs två nästa

63 1 June 20152G1502, föreläsning 3, vt Nios instruktion IFRNZ reg zExecute next instruction if register is Not Zero zExempel: if (reg1 != 0) goto Label IFRNZreg1;om reg1 ej är 0 BRLabel;hoppa till Label zSKPRZ är ekvivalent med IFRNZ zOm nästa är en PFX så görs två nästa

64 1 June 20152G1502, föreläsning 3, vt Nios instruktion NOP = No OPeration Binärkod för NOP = Det är samma binärkod som för MOV %r0, %r0 Vad gör MOV %r0,%r0 ? (tar tid)

65 1 June 20152G1502, föreläsning 3, vt funktioner, subrutiner, metoder zHur sker anrop ? zMed hoppinstruktion ! zHur sker återhopp ? zMed hoppinstruktion ! zReturadress måste lagras !

66 1 June 20152G1502, föreläsning 3, vt Subrutinanrop CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … RETURN

67 1 June 20152G1502, föreläsning 3, vt Subrutinanrop CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … CALL FKN RETURN FKN:MUL … CALL NEW RETURN

68 1 June 20152G1502, föreläsning 3, vt funktioner, subrutiner, metoder Hur sker parameteröverföring Var lagras parametrar zfrån anropare till rutinen, inparametrar zfrån rutinen till anroparen, returvärden Olika typ av parameter zvärde zpekare

69 1 June 20152G1502, föreläsning 3, vt Nios hopp-instruktion BSR IMM11 zLiknar BR IMM11 med tilläggg att zReturadress sparas i register %R15 zReturadressen är adressen till zinstruktionen närmast efter hoppluckan zdvs adress till BSR ökat med 4 zReturadressen sparas skiftad ett steg höger för att passa ihop med JMP %R15

70 1 June 20152G1502, föreläsning 3, vt Nios hopp-instruktion CALL %rA zLiknar JMP %rA med tillägg att zReturadress sparas i register %R15=%o7 zReturadressen är adressen till instruktionen närmast efter hoppluckan dvs adress till CALL ökat med 4 ! zReturadressen sparas skiftad ett steg höger för att passa ihop med JMP %R15

71 1 June 20152G1502, föreläsning 3, vt Nios hårdvara för BSR och CALL 0 PC A-bus till ALU-A register 32 bitar från PC ignoreras... A-bus till ALU-A register

72 1 June 20152G1502, föreläsning 3, vt Stackhantering zStack är speciell reserverad plats i minnet zStack Pekare pekar på plats i stacken zPUSH-operation, lägg på stack zPOP-operation, hämta från stack

73 1 June 20152G1502, föreläsning 3, vt 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 + -

74 1 June 20152G1502, föreläsning 3, vt Nios: PUSH reg ;Pusha ett register på stacken.macroPUSH reg SUBI%sp, 4;%sp = %o6 ST[%sp], \reg.endm ;PUSH %o6 är inte bra

75 1 June 20152G1502, föreläsning 3, vt Nios: POP reg ;Poppa ett register från stacken.macroPOP reg LD \reg, [%sp] ADDI%sp, 4;%sp = %o6.endm ;POP %o6 är förödande

76 1 June 20152G1502, föreläsning 3, vt Nios: Stack Reservera plats, initiera SP Stack Pointer SP.equ size, 256.data.align4 stack:.fill size, 4, 0....text … movia %sp, stack+size*4 + - stack:

77 1 June 20152G1502, föreläsning 3, vt Nios stöd för stack zStack Pointer = %r14 = %sp (alias %o6) zFinns det Stack-operationer ? zLDS är LOAD R dst <- [%sp, IMM8] zSTS är STORE [%sp,IMM8] <- R src med flera variationer zIngen PUSH- eller POP-instruktion zIngen JSR/RTS med returadress på stack

78 1 June 20152G1502, föreläsning 3, vt Nios stöd för subrutiner  Anrop med CALL reg, returadress i register %r15 = %o7 innehållet i reg multipliceras med 2 innan det skrivs till PC, jämför med JMP reg  Anrop med BSR Label  Retur med RET (JMP %r31 alias %i7)  Retur med LRET (JMP %r15 alias %o7)

79 1 June 20152G1502, föreläsning 3, vt 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)

80 1 June 20152G1502, föreläsning 3, vt Register Window Vad? Hur? Varför?

81 1 June 20152G1502, föreläsning 3, vt Register Window z32 registers are direct available z%g0-%g7 = %r0 -%r7; Global regs z%o0-%o7 = %r8 -%r15; Out regs z%L0-%L7 = %r16-%r23; Local regs z%i0-%i7 = %r24-%r31; In regs

82 1 June 20152G1502, föreläsning 3, vt Register Window z32 registers are direct available z128 or 256 or 512 possible registers zCWP - Current Window Pointer anger vilka register som just nu är direkt åtkomliga zCWP finns i statusregister %ctl0 !

83 1 June 20152G1502, föreläsning 3, vt Register Window zCWP = Current Window Pointer zSAVE ”öppna nytt fönster” minska CWP med 1 zRESTORE ”byt till gammalt fönster” öka CWP med 1

84 1 June 20152G1502, föreläsning 3, vt Table 20. Smallest Nios Register File Reg[.. Reg[24..31] Reg[16..23] Reg[8..15] Reg[ ] Reg[ ] Reg[ ] Reg[0..7] %o0..%o7 %L0..%L7 %i0..%i7 %g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7 %g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7 %g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7 %o0..%o7 %L0..%L7 %i0..%i7%g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7%g0..%g7 SAVE RESTORE CWP = 0 CWP = 1 CWP = 5 CWP = 6 CWP = 4 CWP = 2

85 1 June 20152G1502, föreläsning 3, vt Exempel på subrutinkod utan SAVE och RESTORE nästlat subrutinanrop går ej RUT:kod kod ;BSR RUT2;subrutinanrop nix … LRET;JMP %07

86 1 June 20152G1502, föreläsning 3, vt RUT:SAVE %sp,0;ändra inte %sp kod BSR RUT2;fungerar … RET;JMP %i7 RESTORE;i hopplucka Exempel på subrutinkod med SAVE och RESTORE nästlat subrutinanrop går bra

87 1 June 20152G1502, föreläsning 3, vt 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)

88 1 June 20152G1502, föreläsning 3, vt Exempel på parameteröverföring med SAVE och RESTORE zAnroparen lagrar parametrar i %o-register (utom %o7) zAnroparen gör BSR eller CALL varvid returadress sparas i %o7 zSubrutinen gör SAVE varvid alla %oreg hamnar på platser %ireg zReturadress finns nu i %i7 zParametrar finns nu i %i-register zDet finns 16 ”nya” register, 8 st %Local och 8 st %Out zSubrutinen gör RESTORE zReturadress finns nu i %o7 varvid retur ska göras med JMP %o7 (samma som LRET)

89 1 June 20152G1502, föreläsning 3, vt Programexempel - subrutin ta fram max av val1 och val2 zExempel på C-kod torde kunna vara... int val1, val2, result; /* variabler */... int max (int val1, int val2); /* prototyp */... result = max ( val1, val2); /* anrop */

90 1 June 20152G1502, föreläsning 3, vt Programexempel - subrutin ta fram max av val1 och val2 zint val1, val2, result; kan översättas till (av kompilator).data val1:.word0 val2:.word0 result:.word0...

91 1 June 20152G1502, föreläsning 3, vt anrop av max (val1, val2) inparametrar i register ;result = max ( val1, val2) kan översättas till.text movia%L0, val1 ld%o0, [%L0];parameter val1 i %o0 movia%L0, val2 ld%o1, [%L0] ;parameter val2 i %o1 movia %L0, till ett register call%L0;ea i register nop movia%L0, result st[%L0], %o0;returvärde i %o0

92 1 June 20152G1502, föreläsning 3, vt anrop av max (val1, val2) inparametrar på stack ;result = max ( val1, val2);.text movia%L0, val2 ld%L1, [%L0] push%L1;inparameter val2 till stack movia%L0, val1 ld%L1, [%L0] push%L1;inparameter val1 till stack bsrmax;PC-relativ adress nop addi%sp, 8;rensa stacken från parametrar movia%L0, result st[%L0], %o0;kopiera returvärde i %o0 till minnet

93 1 June 20152G1502, föreläsning 3, vt 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)

94 1 June 20152G1502, föreläsning 3, vt int max (int val1, int val2) inparametrar i register max:cmp%o0, %01 ifscc_lt mov%o0, %o1 lret;jmp %o7

95 1 June 20152G1502, föreläsning 3, vt int max (int val1, int val2) inparametrar på stack max:save %sp, 0;nytt reg-window lds%i0, [%sp, 1 ];val2 till %i0 lds%L0, [%sp, 0];val1 till %L0 cmp%i0, %L0 ifscc_lt;om val2 < val1 mov%i0, %L0;val1 till %i0 ret;jmp %i7 restore;”stäng fönster”

96 1 June 20152G1502, föreläsning 3, vt Föreläsning 3 Sammanfattning z4-stegs PIPE-LINE zLoad och Store mot Minne z5-stegs PIPE-LINE zNios hårdvara för hopp zSubrutiner, anrop, retur, stack zRegister Window zParameteröverföring


Ladda ner ppt "1 June 20152G1502, föreläsning 3, vt20041 2G1502 Datorteknik allmän kurs Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version."

Liknande presentationer


Google-annonser