1 / 72

2G1518 Datorteknik

2G1518 Datorteknik. Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version vt 2005 för IT-1 och ME-3 m.fl. Föreläsning 3 Innehåll. 4-stegs PIPE-LINE, repetition MACRO, syntetisk instruktion MACRO-exempel Load och Store med indexerad adress

Télécharger la présentation

2G1518 Datorteknik

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2G1518 Datorteknik Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version vt 2005 för IT-1 och ME-3 m.fl. 2G1518, förel. 3, vt2005 (IT/ME)

  2. Föreläsning 3Innehåll • 4-stegs PIPE-LINE, repetition • MACRO, syntetisk instruktion • MACRO-exempel • Load och Store med indexerad adress • Stack med SP samt PUSH och POP • Subrutiner, anrop, retur, parametrar, • Register Window 2G1518, förel. 3, vt2005 (IT/ME)

  3. Viktiga delar i en dator CPU BUS program I/O MEM data 2G1518, förel. 3, vt2005 (IT/ME)

  4. FETCH (update PC) (decode) EXECUTE Programexekveringi två steg 2G1518, förel. 3, vt2005 (IT/ME)

  5. Fetch Operand Write Back Fetch Instruction Register File 32 x 32 EXecute/ MEMory PC+k/PC+Imm Program Memory m x 8 Register File 32 x 32 4 stegs PIPE-LINE ADD PC RWM true/false ALU op-code NVZC Logik för villkorligt hopp CCR 2G1518, förel. 3, vt2005 (IT/ME)

  6. Instruktioner Nios-Instruktioner • MOV Rdst, Rsrc • MOVI Rdst, Imm5 ;ADDI/SUBI • ADD Rdst, Rsrc ;SUB/AND/OR/XOR • CMP Rdst, Rsrc ;CMPI • BR / JMP / BEQ / BNE • LD Rdst, [Rsrc] • ST [Rdst], Rsrc 2G1518, förel. 3, vt2005 (IT/ME)

  7. Mall för makro– en syntetisk instruktion .macro CLR reg MOVI \reg, 0x0 .endm Effekt: man kan använda en ny instruktion clr %ri för att nollställa register %ri 2G1518, förel. 3, vt2005 (IT/ME)

  8. Nios INSTRUKTIONSFORMAT med immediate data MOVI RA, datan MOVI Exempelvis: 6 5 5 Hur många bitar behövs? ~6+5+5! Hur stor blir varje instruktion? 16! 2G1518, förel. 3, vt2005 (IT/ME)

  9. Immediate dataär bara 5 bitar • En PreFiX-instruktion PFX införs • PFX modifierar efterföljande instruktion och ger den ett längre immediate-värde • PFX använder ett specialregister K • Principen med prefixinstruktioner finns även i Pentium-serien 2G1518, förel. 3, vt2005 (IT/ME)

  10. MakrotMOVIA reg, Addr ; Ladda ett 32 bitars värde till ett register ; Värdet kan vara negativt .macro MOVIA reg, value PFX %hi(\value)MOVI \reg, %lo(\value)PFX %xhi(\value)MOVHI \reg, %xlo(\value) .endm 2G1518, förel. 3, vt2005 (IT/ME)

  11. LOAD och STORE • Vi kan utföra instruktionerna LD Rdst, [ Raddr ] ST [ Raddr ], Rsrc 2G1518, förel. 3, vt2005 (IT/ME)

  12. Fetch Operand Write Back Fetch Instruction Register File 32 x 32 EXecute/ MEMory PC+k/PC+Imm Program Memory m x 8 Register File 32 x 32 4 stegs PIPE-LINE ADD PC RWM true/false ALU op-code NVZC Logik för villkorligt hopp CCR 2G1518, förel. 3, vt2005 (IT/ME)

  13. LOADA Rdest, Addr Skriv makro för load med direkt adressering .macro LOADA reg, addr MOVIA \reg, \addrLD \reg, [\reg] .endm OBS att inga registerinnehåll “förstörs” 2G1518, förel. 3, vt2005 (IT/ME)

  14. STOREA Addr, Rdest, Skriv makro för store med direkt adressering .macro STOREA addr, reg MOVIA %g7, \addrST [%g7], \reg .endm OBS att innehåll i reg %g7 “förstörs” 2G1518, förel. 3, vt2005 (IT/ME)

  15. Programvariabler samlade i minnet • Variabler • int i; • int j; • int k; • läggs efter varanni minnet av kompilatorn minne i j k 2G1518, förel. 3, vt2005 (IT/ME)

  16. minne Indexerad adress • Addition i LOAD-instruktionen • LOAD R2 ← 8(R28) • innebärR2 ← hm(r28+8) • Innehåll i R28, plus talet 8, blir minnesadress i j register k r28 2G1518, förel. 3, vt2005 (IT/ME)

  17. LOAD och STORE • Vi vill alltså kunna utföra instruktionerna LOAD Rdst, Offset[ Raddr ] STORE Offset[ Raddr ], Rsrc 2G1518, förel. 3, vt2005 (IT/ME)

  18. LOAD Rdst <- Offset[Raddr] • Vi kan utföra operationen LOAD Rdst, Offset[ Raddr ] • med koden (tar 2 klockcykler eller hur) ADDI Raddr, Offset LD Rdst, [ Raddr ] • OBS! Innehåll i Raddr ändras 2G1518, förel. 3, vt2005 (IT/ME)

  19. STORE Offset[Raddr] <- Rsrc • Vi kan utföra operationen STORE Offset[ Raddr ], Rsrc • med koden (tar 2 klockcykler eller hur) ADDI Raddr, Offset ST [ Raddr ], Rsrc • OBS! Innehåll i Raddr ändras 2G1518, förel. 3, vt2005 (IT/ME)

  20. LOAD Rdst <- Offset[Raddr]Nios-kod • Vi kan utföra operationen LOAD Rdst, Offset[ Raddr ] • med koden (tar ~6 klockcykler eller hur) MOVIA Raddr, addr32 ADDI Raddr, offset5 LD Rdst, [Raddr] • OBS! Innehåll i Raddr ändras 2G1518, förel. 3, vt2005 (IT/ME)

  21. STORE Offset[Raddr] <- Rsrc Nios-kod • Vi kan utföra operationen STORE Offset[ Raddr] , Rsrc • med koden (tar ~6 klockcykler eller hur) MOVIA Raddr, addr32 ADDI Raddr, offset5 ST [Raddr], Rsrc • OBS! Innehåll i Raddr ändras 2G1518, förel. 3, vt2005 (IT/ME)

  22. Fetch Operand Write Back Fetch Instruction Register File 32 x 32 EXecute/ MEMory PC+k/PC+Imm Program Memory m x 8 Register File 32 x 32 JUMP (Raddr)dataväg finns Dataväg ADD PC RWM true/false ALU op-code NVZC Logik för villkorligt hopp CCR 2G1518, förel. 3, vt2005 (IT/ME)

  23. Fetch Operand Write Back Fetch Instruction Register File 32 x 32 EXecute/ MEMory PC+k/PC+Imm Program Memory m x 8 Register File 32 x 32 BRA ImmnADDitionsenhet och datavägar finns ADD PC RWM true/false ALU op-code NVZC Logik för villkorligt hopp CCR 2G1518, förel. 3, vt2005 (IT/ME)

  24. Ovillkorligt hoppVillkorligt hopp • Ovillkorligt hopp utförs alltidExempel: JMP och BRA • Villkorligt hopp utförs endast om ett angivet villkor är santExempel Bcc där cc är villkoret • Exempel på villkorEQZ = EQual to ZeroNEZ = Not Equal to Zero 2G1518, förel. 3, vt2005 (IT/ME)

  25. Typisk hopp-instruktionJUMP (Raddr) • Kopiera registerinnehåll till PC • Register med 32 bitar betyder att32 bits adress kan användas • Hur får man 32 bits adress till registret ? • MOVIA Raddr , Imm32 eller motsvarande 2G1518, förel. 3, vt2005 (IT/ME)

  26. Nios hopp-instruktionJMP %rA • Skifta innehåll i register %rA ett steg åt vänster och kopiera till PC 2G1518, förel. 3, vt2005 (IT/ME)

  27. Nios-MakrotJUMPA addr ; Ladda ett 32 bitars värde till PC ; Hopp med absolutadressering .macro JUMPA addrMOVIA %g7, \addr@hJMP %g7 .endm OBS att innehåll i reg %g7 “förstörs” 2G1518, förel. 3, vt2005 (IT/ME)

  28. Hjälp från översättaren %xhi (value) %xlo (value) %hi (value) %lo (value) = value Imm211Imm25 Imm111Imm15 value@h = 31 MSBits 2G1518, förel. 3, vt2005 (IT/ME)

  29. Typisk hopp-instruktionBR Immn • PC sätts till PC + Immn • Hur stor är Immn ? • Hur stor vill vi att Immn ska vara helst ? 2G1518, förel. 3, vt2005 (IT/ME)

  30. Nios hopp-instruktionBR IMM11 • Skifta IMM11 ett steg vänster • gör Sign Extension • addera till aktuellt värde i PC • PC <- PC + 2 + (sext (IMM11) <<1) 2G1518, förel. 3, vt2005 (IT/ME)

  31. Typisk instruktionCMP RsrcA, RsrcB • Jämför innehåll i RsrcA och RsrcB genom att • Subtrahera innehåll i RsrcB från RsrcA • men skriv ej resultat till något register • Information om resultatet / skillnadenlagras som informationi STATUS-flaggor 2G1518, förel. 3, vt2005 (IT/ME)

  32. STATUS-flaggor • Z - Zero; ”utfall lika med noll” • N - Negativ; ”utfall med negativt tecken” • V - oVerflow; ”utfall med overflow” • C - Carry; Carry-ut från ALU • Påverkas av ADD, SUB, CMP ... 2G1518, förel. 3, vt2005 (IT/ME)

  33. Fetch Operand Write Back Fetch Instruction Register File 32 x 32 EXecute/ MEMory PC+k/PC+Imm Program Memory m x 8 Register File 32 x 32 STATUS-flaggor ADD PC RWM true/false ALU op-code NVZC Logik för villkorligt hopp CCR 2G1518, förel. 3, vt2005 (IT/ME)

  34. Villkorlig hopp-instruktionBcond Immn • PC sätts till PC + Immn om cond är sant • PC sätts till PC + nom 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 2G1518, förel. 3, vt2005 (IT/ME)

  35. 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.) 2G1518, förel. 3, vt2005 (IT/ME)

  36. 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 2G1518, förel. 3, vt2005 (IT/ME)

  37. 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 CMPI reg1, 0 ;jämför reg1 med noll IFS cc_eq ;om Z=1 BR Label ;hoppa till Label NOP 2G1518, förel. 3, vt2005 (IT/ME)

  38. BEQ Label Skriv makro för villkorligt hopp BEQ .macro BEQ label IFS cc_eqBR \labelNOP .endm 2G1518, förel. 3, vt2005 (IT/ME)

  39. Bxx Label Skriv makro-mall för villkorligt hopp Bxx .macro Bxx label IFS cc_xxBR \labelNOP .endm kan skrivas för xx: eq, ne, … (14 olika !) 2G1518, förel. 3, vt2005 (IT/ME)

  40. cc_gt not(Zor(NxorV)) cc_le Zor(NxorV) cc_nv V = 0 cc_v V = 1 cc_hi not (C or Z) cc-la C or Z 14 olika villkor finns i Nios • cc_nc C = 0 • cc_c C = 1 • cc_nz Z = 0 • cc_z Z = 1 • cc_pl N = 0 • cc_mi N = 1 • cc_lt N xor V • cc_ge not(N xor V) 2G1518, förel. 3, vt2005 (IT/ME)

  41. Alias för villkor i Nios • cc_cs = cc_c Carry Set = Carry • cc_n = cc_mi Negative = MInus • cc_cc = cc_nc Carry Clear = No Carry • cc_vc = cc_nv oVerflow Clear = No oVe... • cc_eq = cc_z Equal = Zero • cc_ne = cc_nz Not Equal = Not Zero • cc_vs = cc_v oVerflow Set = oVerflow • cc_p = cc_pl Plus = PLus 2G1518, förel. 3, vt2005 (IT/ME)

  42. Nios instruktionIFRZ reg • Execute next instruction if register is Zero • Exempel: if (reg1==0) goto LabelIFRZ reg1 ;om reg1 = 0BR Label ;hoppa till LabelNOP • SKPRNZ är ekvivalent med IFRZ • Om nästa är en PFX så görs två nästa 2G1518, förel. 3, vt2005 (IT/ME)

  43. Nios instruktionIFRNZ reg • Execute next instruction if register is Not Zero • Exempel: if (reg1 != 0) goto LabelIFRNZ reg1 ;om reg1 ej är 0BR Label ;hoppa till LabelNOP • SKPRZ är ekvivalent med IFRNZ • Om nästa är en PFX så görs två nästa 2G1518, förel. 3, vt2005 (IT/ME)

  44. funktioner, subrutiner, metoder • Hur sker anrop ? • Med hoppinstruktion ! • Hur sker återhopp ? • Med hoppinstruktion ! • Returadress måste lagras ! Var ? 2G1518, förel. 3, vt2005 (IT/ME)

  45. Subrutinanrop RUT: ADD … RETURN CALL RUT RET1: ADD … CALL RUT RET2: SUB ... 2G1518, förel. 3, vt2005 (IT/ME)

  46. Subrutinanrop RUT: ADD … CALL FKN RETURN FKN: MUL … CALL NEW RETURN CALL RUT RET1: ADD … CALL RUT RET2: SUB ... 2G1518, förel. 3, vt2005 (IT/ME)

  47. funktioner, subrutiner, metoder Hur sker parameteröverföringVar lagras parametrar • från anropare till rutinen, inparametrar • från rutinen till anroparen, returvärden Olika typ av parameter • värde • pekare 2G1518, förel. 3, vt2005 (IT/ME)

  48. Nios hopp-instruktionBSR IMM11 • Liknar BR IMM11 med tilläggg att • Returadress sparas i register %R15/%o7 • Returadressen är adressen till instruktionen närmast efter hoppluckandvs adress till BSR ökat med 4 • Returadressen sparas skiftad ett steg höger för att passa ihop med JMP %R15 2G1518, förel. 3, vt2005 (IT/ME)

  49. Nios hopp-instruktionCALL %rA • Liknar JMP %rA med tillägg att • Returadress sparas i register %R15=%o7 • Returadressen är adressen till instruktionen närmast efter hoppluckandvs adress till CALL ökat med 4 ! • Returadressen sparas skiftad ett steg höger för att passa ihop med JMP %R15/%o7 2G1518, förel. 3, vt2005 (IT/ME)

  50. 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 2G1518, förel. 3, vt2005 (IT/ME)

More Related