900 likes | 1.09k Views
2G1518 Datorteknik. Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version vt 2005 för E och I m.fl. Föreläsning 3 Innehåll. 4-stegs PIPE-LINE, repetition MACRO, syntetisk instruktion MACRO-exempel Load och Store med indexerad adress
E N D
2G1518 Datorteknik Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version vt 2005 för E och I m.fl. 2G1518, föreläsning 3, vt2005
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äsning 3, vt2005
Viktiga delar i en dator CPU BUS program I/O MEM data 2G1518, föreläsning 3, vt2005
FETCH (update PC) (decode) EXECUTE Programexekveringi två steg 2G1518, föreläsning 3, vt2005
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 Programexekveringi fyra steg ADD PC RWM true/false ALU op-code NVZC Logik för villkorligt hopp CCR 2G1518, föreläsning 3, vt2005
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äsning 3, vt2005
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äsning 3, vt2005
ADD Rdest, regA, regB Skriv makro för add-instruktion med 3 register .macro ADD3 reg1, reg2, reg3 MOV \reg1, \reg2ADD \reg1, \reg3 .endm Effekt: man kan använda en ny instruktion ADD3 %rk, %rj, %ri för att skriva summan av %ri och %rj till %rk 2G1518, föreläsning 3, vt2005
SWAPR regA, regB Skriv makro för swap-instruktion med 2 register .macro SWAPR reg1, reg2ADD \reg1, \reg2... ;här saknas en del... ;icketrivial kod .endm Effekt: man kan använda en ny instruktion SWAPR %ri, %rj för att byta plats på innehåll i %ri och %rj 2G1518, föreläsning 3, vt2005
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äsning 3, vt2005
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 Programexekveringi fyra steg ADD PC RWM true/false ALU op-code NVZC Logik för villkorligt hopp CCR 2G1518, föreläsning 3, vt2005
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äsning 3, vt2005
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 Inför ny hårdvaraK - register ADD PC RWM true/false ALU op-code NVZC Logik för villkorligt hopp CCR 2G1518, föreläsning 3, vt2005
Hur används register K ? • PreFiX-instruktionen PFX Imm11skriver ett 11 bitars värde till register K • Värdet finns kvar i en klockcykelsen nollställs register K • Instruktionen direkt efter PFX Imm11kan använda innehåll i K • Imm5 ökar till (Imm11 cat Imm5 ) 2G1518, föreläsning 3, vt2005
Nios: MOVIP Rdst, Imm16(MACRO) 32 bitar till Rdst alla bitar 31-00 påverkas • PFX Imm111;11 bitar till K-reg • MOVI Rdst, Imm15;16 bitar i Rdstfyller ut med nollor i bit 31-16 Resultat: 0………… …0 0……0 Imm111Imm15 2G1518, föreläsning 3, vt2005
FI PFX - EXE FI - WB FO PFX Imm11 PFX Imm11 MOVI Rdst, Imm5 2G1518, föreläsning 3, vt2005
Nios: MOVIA Rdst, Imm32(MACRO) 32 bitar till Rdst alla bitar 31-00 påverkas • PFX Imm111;11 bitar till K-reg • MOVI Rdst, Imm15;16 bitar i Rdstfyller ut med nollor i bit 31-16 • PFX Imm211;11 bitar till K-reg • MOVHI Rdst, Imm25;32 bitar i Rdstbit 15-0 påverkas ej av MOVHI Resultat: Imm211Imm25 Imm111Imm15 2G1518, föreläsning 3, vt2005
Hjälp från översättaren %xhi (value) %xlo (value) %hi (value) %lo (value) = value Imm211Imm25 Imm111Imm15 value@h = 31 MSBits 2G1518, föreläsning 3, vt2005
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äsning 3, vt2005
LOAD och STORE • Vi kan utföra instruktionerna LD Rdst, [ Raddr ] ST [ Raddr ], Rsrc 2G1518, föreläsning 3, vt2005
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 Programexekveringi fyra steg ADD PC RWM true/false ALU op-code NVZC Logik för villkorligt hopp CCR 2G1518, föreläsning 3, vt2005
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äsning 3, vt2005
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äsning 3, vt2005
Behov av indexerad adress • Programvariabler ligger samlade • Ett register pekar ut variabelarean • Varje LOAD/STORE behöver först en adressberäkning med ADD • Indexerad adress LOAD R2 ← 8(R28) ; R2 ← hm(r28 + 8) • Sparar en klockcykel vid varje LOAD 2G1518, föreläsning 3, vt2005
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äsning 3, vt2005
minne Ett register pekar ut variabelarean • Vid programstart tilldelas registret adressen till variabelarean i minnet i j register k r28 2G1518, föreläsning 3, vt2005
minne Varje LOAD/STORE behöver adressberäkning med ADD • k ska hämtas till R2 • R17 är ledigt • ADDI R17 <- R28 + 8 • LOAD R2 <- (R17) • En extra instruktion • En extra klockcykel • Extra krångel i programkoden i j register k r28 2G1518, föreläsning 3, vt2005
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äsning 3, vt2005
LOAD och STORE • Vi vill alltså kunna utföra instruktionerna LOAD Rdst, Offset[ Raddr ] STORE Offset[ Raddr ], Rsrc 2G1518, föreläsning 3, vt2005
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äsning 3, vt2005
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äsning 3, vt2005
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äsning 3, vt2005
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äsning 3, vt2005
Programmering med hopp • Hopp = ett värde skrivs till PC • Effektivadress skrivs till PC • Olika adresseringsmetoder finns • JUMP Label brukar använda absolut adress • BRA Label brukar använda PC-relativ adress 2G1518, föreläsning 3, vt2005
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)inför ny dataväg Ny dataväg ADD PC RWM true/false ALU op-code NVZC Logik för villkorligt hopp CCR 2G1518, föreläsning 3, vt2005
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äsning 3, vt2005
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äsning 3, vt2005
JUMP och BRAOvillkorliga hopp • JUMP brukar ha direkt adress • BRA brukar ha PC-relativ adress 32: JMP 104 ;PC := 104 ”hopp till 104” . . 104: 224: BRA 40 ;PC := pc + 40 ”hopp till 268” 268: 2G1518, föreläsning 3, vt2005
Typisk hopp-instruktionJUMP 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 2G1518, föreläsning 3, vt2005
Typisk hopp-instruktionBRA 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 2G1518, föreläsning 3, vt2005
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äsning 3, vt2005
Nios hopp-instruktionJMP %rA • Skifta innehåll i register %rA ett steg åt vänster och kopiera till PC 2G1518, föreläsning 3, vt2005
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äsning 3, vt2005
Hjälp från översättaren %xhi (value) %xlo (value) %hi (value) %lo (value) = value Imm211Imm25 Imm111Imm15 value@h = 31 MSBits 2G1518, föreläsning 3, vt2005
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äsning 3, vt2005
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äsning 3, vt2005
Typisk instruktionSUB RsrcA, RsrcB • Subtrahera innehåll i RsrcB från RsrcA • och skriv till RsrcA • Förutom resultatet / skillnaden • så lagras ytterligare information • i STATUS-flaggor 2G1518, föreläsning 3, vt2005
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äsning 3, vt2005
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äsning 3, vt2005
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äsning 3, vt2005