Upload
joshua-hebert
View
101
Download
0
Embed Size (px)
DESCRIPTION
2G1518 Datorteknik allmän kurs. Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version ht 2004 för D m.fl. Innehåll. 4-stegs PIPE-LINE, repetition MACRO, syntetisk instruktion Load och Store med indexerad adress 5-stegs PIPE-LINE hårdvara för hopp, Nios - PowerPoint PPT Presentation
Citation preview
April 19, 2023 2G1518, föreläsning 3, ht2004 1
2G1518 Datorteknik allmän kurs
Föreläsning 3Metoder och subrutiner
Kursboken, valda delar av kapitel 4
version ht 2004för D m.fl.
April 19, 2023 2G1518, föreläsning 3, ht2004 2
Innehåll
4-stegs PIPE-LINE, repetitionMACRO, syntetisk instruktionLoad och Store med indexerad adress5-stegs PIPE-LINEhårdvara för hopp, NiosSubrutiner, anrop, retur, parametrar, Stack och Register Window
April 19, 2023 2G1518, föreläsning 3, ht2004 3
Viktiga delar i en dator
CPU
MEM
BUS
I/O
April 19, 2023 2G1518, föreläsning 3, ht2004 4
Programexekveringi två steg
(decode)EXECUTE
FETCH(update PC)
April 19, 2023 2G1518, föreläsning 3, ht2004 5
Programexekveringi fyra steg
Execute
Fetch Operand
Write Back
Fetch Instruction
ProgramMemory
m x 8
ALU
ADD
IR0
IR1
IR2
RegisterFile
32 x 32
RegisterFile
32 x 32PC+2PC+Imm
PC
April 19, 2023 2G1518, föreläsning 3, ht2004 6
Mall för makro– en syntetisk instruktion
.macro CLR regMOVI\reg, 0x0.endm
Effekt: man kan använda en ny instruktionclr %ri för att nollställa register %ri
R
April 19, 2023 2G1518, föreläsning 3, ht2004 7
ADD Rdest, regA, regB
Skriv makro för add-instruktion med 3 register.macro ADD reg1, reg2, reg3MOV \reg1, \reg2ADD \reg1, \reg3
.endm
R
April 19, 2023 2G1518, föreläsning 3, ht2004 8
MOVI RA, datan
MOVI
Hur många bitar behövs? ~6+5+5!Hur stor blir varje instruktion? 16!
Nios INSTRUKTIONSFORMATmed immediate data
Exempelvis: 6 5 5
April 19, 2023 2G1518, föreläsning 3, ht2004 9
Immediate dataNios dataväg finns
Execute
Fetch Operand
Write Back
Fetch Instruction
ProgramMemory
m x 8
ALU
ADD
IR0
IR1
IR2
RegisterFile
32 x 32
RegisterFile
32 x 32PC+2PC+Imm
PC
April 19, 2023 2G1518, föreläsning 3, ht2004 10
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
R
April 19, 2023 2G1518, föreläsning 3, ht2004 11
Inför ny hårdvaraK - register
Execute
Fetch Operand
Write Back
Fetch Instruction
ProgramMemory
m x 8
ALU
ADD
IR0
IR1
IR2
RegisterFile
32 x 32
RegisterFile
32 x 32PC+2PC+Imm
PC
April 19, 2023 2G1518, föreläsning 3, ht2004 12
Hur används register K ?
PreFiX-instruktionen PFX Imm11
skriver ett 11 bitars värde till register K
Instruktionen direkt efter PFX Imm11
använder innehåll i K– sedan nollställs register K
Imm5 ökar till (Imm11 cat Imm5 )
R
April 19, 2023 2G1518, föreläsning 3, ht2004 13
PFX Imm11
FI PFX - -PFX Imm11
MOVI Rdst, Imm5FI FO EXE WB
April 19, 2023 2G1518, föreläsning 3, ht2004 14
Nios: MOVIA Rdst, Imm32
(MACRO) 32 bitar till Rdst alla bitar 31-00 påverkas
PFX Imm111 ;11 bitar till K-regMOVI Rdst, Imm15 ;16 bitar i Rdst
fyller ut med nollor i bit 31-16
PFX Imm211 ;11 bitar till K-regMOVHI Rdst, Imm25 ;32 bitar i Rdst
bit 15-0 påverkas ej av MOVHI
Imm211 Imm25 Imm111 Imm15
Resultat:
April 19, 2023 2G1518, föreläsning 3, ht2004 15
Hjälp från översättaren
%xhi%xlo%hi%lo
@h = 31 MSBits
Imm211 Imm25 Imm111 Imm15= value
April 19, 2023 2G1518, föreläsning 3, ht2004 16
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
R
April 19, 2023 2G1518, föreläsning 3, ht2004 17
LOAD och STORE
Vi kan utföra instruktionerna
LD Rdst, [ Raddr ]
ST [ Raddr ], Rsrc
April 19, 2023 2G1518, föreläsning 3, ht2004 18
Execute
Fetch Operand
Write Back
Fetch Instruction
ProgramMemory
m x 8
ALU
ADD
IR0
IR1
IR2
RWM
LOAD och STOREmed 4 stegs PIPE-LINE
RegisterFile
32 x 32
RegisterFile
32 x 32PC+4PC+Imm
PC
April 19, 2023 2G1518, föreläsning 3, ht2004 19
LOADA Rdest, Addr
Skriv makro för load med direkt adressering.macro LOADA reg, addrMOVIA \reg, \addrLD \reg, [\reg]
.endm
R
April 19, 2023 2G1518, föreläsning 3, ht2004 20
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
April 19, 2023 2G1518, föreläsning 3, ht2004 21
Programvariabler samlade i minnet
Variabler int i; int j; int k;
läggs efter varanni minnet av kompilatorn
minne
ijk
April 19, 2023 2G1518, föreläsning 3, ht2004 22
Ett register pekar ut variabelarean
Vid programstart tilldelas registret adressen till variabelarean i minnet
minne
ijk
register
r28
April 19, 2023 2G1518, föreläsning 3, ht2004 23
Varje LOAD/STORE behöver adressberäkning med ADD
k ska hämtas till R2R17 är ledigtADDI R17 <- R28 + 8LOAD R2 <- (R17)En extra instruktionEn extra klockcykelExtra krångel i
programkoden
minne
ijk
register
r28
April 19, 2023 2G1518, föreläsning 3, ht2004 24
Indexerad adress
Addition i LOAD-instruktionen
LOAD R2 ← 8(R28)
innebärR2 ← hm(r28+8)
Innehåll i R28, plus talet 8, blir minnesadress
minne
ijk
register
r28
April 19, 2023 2G1518, föreläsning 3, ht2004 25
Sparar en klockcykel vid varje LOAD
add följt av load
byts mot
load med "inbyggd" addition
addi r17←r28+8
load r2←(r17)
FI FO EXE WB
FI FO MEM WB
load r2←8(r17) FI FO ALU WBMEM
April 19, 2023 2G1518, föreläsning 3, ht2004 26
LOAD och STORE
Vi vill alltså kunna utföra instruktionerna
LOAD Rdst, Offset[ Raddr ]
STORE Offset[ Raddr ], Rsrc
April 19, 2023 2G1518, föreläsning 3, ht2004 27
LOAD Rdst <- Offset[Raddr]
Vi kan utföra instruktionenLOAD Rdst, Offset[ Raddr ]
med koden (tar 2 klockcykler eller hur) ADDI Radr, Offset
LD Rdst, [ Raddr ]
April 19, 2023 2G1518, föreläsning 3, ht2004 28
STORE Offset[Raddr] <- Rsrc
Vi kan utföra instruktionenSTORE Offset[ Raddr ], Rsrc
med koden (tar 2 klockcykler eller hur) ADDI Radr, Offset
ST [ Raddr ], Rsrc
April 19, 2023 2G1518, föreläsning 3, ht2004 29
5 stegs PIPE-LINE
ALU
Fetch Operand
MEM
Fetch InstructionRegister
File32 x 32
RegisterFile
32 x 32
ProgramMemory
m x 8
ALU
RegisterFile
32 x 32
RegisterFile
32 x 32
PC
ADD
IR0
IR1
IR2
RWM
IR3
Write Back
+n
April 19, 2023 2G1518, föreläsning 3, ht2004 30
Programexekveringi fem steg
FI - Fetch InstructionFO - Fetch OperandALU - CalculationMEM - Memory ReferenceWB - Write Back
April 19, 2023 2G1518, föreläsning 3, ht2004 31
Programmering med hopp
Hopp = ett värde skrivs till PCEffektivadress skrivs till PCOlika adresseringsmetoder finnsJUMP Label
brukar använda absolut adressBRA Label
brukar använda PC-relativ adress
April 19, 2023 2G1518, föreläsning 3, ht2004 32
JUMP (Raddr)inför nya datavägar
Execute
Fetch Operand
Write Back
Fetch Instruction
ProgramMemory
m x 8
ALU
PC
IR0
IR1
IR2
+n
Ny dataväg
RegisterFile
32 x 32
RegisterFile
32 x 32
April 19, 2023 2G1518, föreläsning 3, ht2004 33
BRA Immn
inför ADDitionsenhet och datavägar
Execute
Fetch Operand
Write Back
Fetch Instruction
ProgramMemory
m x 8
ALU
ADD
IR0
IR1
IR2
RegisterFile
32 x 32
RegisterFile
32 x 32
PC
PC+4PC+Imm
April 19, 2023 2G1518, föreläsning 3, ht2004 34
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
April 19, 2023 2G1518, föreläsning 3, ht2004 35
JUMP och BRAOvillkorliga hopp
JUMP brukar ha direkt adress 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:
April 19, 2023 2G1518, föreläsning 3, ht2004 36
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
April 19, 2023 2G1518, föreläsning 3, ht2004 37
Typisk hopp-instruktionBRA Label
PC-relativ adresseringLäget Label motsvarar en binär adressFöre körning beräknar assemblern hur
långt från instruktionen Label finnsAvståndet lagras i instruktionen som
displacement eller offsetVid körning adderas offset till PCoffset kan vara positivt eller negativt
April 19, 2023 2G1518, föreläsning 3, ht2004 38
Typisk hopp-instruktionJUMP (Raddr)
Kopiera registerinnehåll till PCRegister med 32 bitar betyder att
32 bits adress kan användasHur får man 32 bits adress till
registret ?MOVIA Raddr , Imm32 eller
motsvarande
April 19, 2023 2G1518, föreläsning 3, ht2004 39
Nios hopp-instruktionJMP %rA
Skifta innehåll i register %rA ett steg åt vänster och kopiera till PC
April 19, 2023 2G1518, föreläsning 3, ht2004 40
Typisk hopp-instruktionBR Immn
PC sätts till PC + Immn
Hur stor är Immn ?
Hur stor vill vi att Immn ska vara helst ?
April 19, 2023 2G1518, föreläsning 3, ht2004 41
Nios hopp-instruktionBR IMM11
Skifta IMM11 ett steg vänster gör Sign Extensionaddera till aktuellt värde i PCPC <- PC + 2 + (sext (IMM11) <<1)
April 19, 2023 2G1518, föreläsning 3, ht2004 42
Typisk instruktionSUB RsrcA, RsrcB
Subtrahera innehåll i RsrcB från RsrcA
och skriv till RsrcA
Förutom resultatet / skillnadenså lagras ytterligare informationi STATUS-flaggor
April 19, 2023 2G1518, föreläsning 3, ht2004 43
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 registerInformation om resultatet / skillnaden
lagras som informationi STATUS-flaggor
April 19, 2023 2G1518, föreläsning 3, ht2004 44
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 ALUPåverkas av ADD, SUB, CMP ...
April 19, 2023 2G1518, föreläsning 3, ht2004 45
STATUS -flaggor
Execute
Fetch Operand
Write Back
Fetch Instruction
ProgramMemory
m x 8
ALU
PC
ADD
IR0
IR1
IR2
+n
NVZC
RegisterFile
32 x 32
RegisterFile
32 x 32
April 19, 2023 2G1518, föreläsning 3, ht2004 46
Villkorlig hopp-instruktionBcond Immn
PC sätts till PC + Immn 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
April 19, 2023 2G1518, föreläsning 3, ht2004 47
Nios har villkorlig instruktion IFS cc_IMM4
IFS - Conditionally execute next instructionOm 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.)
April 19, 2023 2G1518, föreläsning 3, ht2004 48
Nios har villkorlig instruktion SKPS cc_IMM4
SKPS - Skip On Condition CodeOm 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
April 19, 2023 2G1518, föreläsning 3, ht2004 49
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 LabelCMPI reg1, 0 ;jämför reg1 med nollIFS cc_eq ;om Z=1BR Label ;hoppa till Label
April 19, 2023 2G1518, föreläsning 3, ht2004 50
BEQ Label
Skriv makro för villkorligt hopp BEQ.macro BEQ labelIFS cc_eqBR \labelNOP
.endm
R
April 19, 2023 2G1518, föreläsning 3, ht2004 51
Bxx Label
Skriv makro-mall för villkorligt hopp Bxx.macro Bxx labelIFS cc_xxBR \labelNOP
.endmkan skrivas för xx: eq, ne, ...
R
April 19, 2023 2G1518, föreläsning 3, ht2004 52
14 olika villkor finns i Nios
cc_ncC = 0cc_c C = 1cc_nzZ = 0cc_z Z = 1cc_pl N = 0cc_mi N = 1cc_lt N xor Vcc_ge not(N xor
V)
cc_gtnot(Zor(NxorV))
cc_le Zor(NxorV)cc_nv V = 0cc_v V = 1cc_hi not (C or Z)cc-la C or Z
April 19, 2023 2G1518, föreläsning 3, ht2004 53
Alias för villkor i Nios
cc_cs = cc_c Carry Set = Carrycc_n = cc_mi Negative = MInuscc_cc = cc_nc Carry Clear = No Carrycc_vc = cc_nv oVerflow Clear = No oVe...cc_eq = cc_z Equal = Zerocc_ne = cc_nz Not Equal = Not Zerocc_vs = cc_v oVerflow Set = oVerflowcc_p = cc_pl Plus = PLus
April 19, 2023 2G1518, föreläsning 3, ht2004 54
Nios instruktionIFRZ reg
Execute next instruction if register is Zero
Exempel: if (reg1==0) goto LabelIFRZ reg1 ;om reg1 = 0BR Label ;hoppa till Label
SKPRNZ är ekvivalent med IFRZ
Om nästa är en PFX så görs två nästa
April 19, 2023 2G1518, föreläsning 3, ht2004 55
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 Label
SKPRZ är ekvivalent med IFRNZOm nästa är en PFX så görs två
nästa
April 19, 2023 2G1518, föreläsning 3, ht2004 56
funktioner, subrutiner, metoder
Hur sker anrop ?Med hoppinstruktion !Hur sker återhopp ?Med hoppinstruktion !Returadress måste lagras ! Var ?
April 19, 2023 2G1518, föreläsning 3, ht2004 57
Subrutinanrop
CALL RUTRET1: ADD …
CALL RUTRET2: SUB ...
RUT: ADD …
RETURN
April 19, 2023 2G1518, föreläsning 3, ht2004 58
Subrutinanrop
CALL RUTRET1: ADD …
CALL RUTRET2: SUB ...
RUT: ADD …
CALL FKN
RETURN
FKN: MUL …
CALL NEW
RETURN
April 19, 2023 2G1518, föreläsning 3, ht2004 59
funktioner, subrutiner, metoder
Hur sker parameteröverföringVar lagras parametrar
från anropare till rutinen, inparametrarfrån rutinen till anroparen, returvärdenOlika typ av parameter värdepekare
April 19, 2023 2G1518, föreläsning 3, ht2004 60
Nios hopp-instruktionBSR IMM11
Liknar BR IMM11 med tilläggg attReturadress sparas i register %R15Returadressen ä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
April 19, 2023 2G1518, föreläsning 3, ht2004 61
Nios hopp-instruktionCALL %rA
Liknar JMP %rA med tillägg attReturadress sparas i register %R15=%o7Returadressen ä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
April 19, 2023 2G1518, föreläsning 3, ht2004 62
Stackhantering
Stack är speciell reserverad plats i minnet
Stack Pekare pekar på plats i stacken
PUSH-operation, lägg på stackPOP-operation, hämta från stack
April 19, 2023 2G1518, föreläsning 3, ht2004 63
STACKoperationer PUSH och POP
Stack Pointer
SP
PUSH op:SP <- sp - nmem(sp) <- op
POP dst:dst <- mem(sp)SP <- sp + n
n = antal bytes
+
-
April 19, 2023 2G1518, föreläsning 3, ht2004 64
Nios: PUSH reg
; Pusha ett register på stacken.macro PUSH regSUBI %sp,4 ;%sp = %o6ST [%sp],\reg
.endm; PUSH %o6 är inte bra
April 19, 2023 2G1518, föreläsning 3, ht2004 65
Nios: POP reg
; Poppa ett register från stacken.macro POP regLD \reg,[%sp] ADDI %sp,4 ;%sp = %o6
.endm;POP %o6 är förödande
April 19, 2023 2G1518, föreläsning 3, ht2004 66
Nios: StackReservera plats, initiera SP
Stack Pointer
SP
.equ size , 256
.data
.align 4stack: .fill size, 4, 0....text…movia %sp, stack+size*4
+
-stack:
April 19, 2023 2G1518, föreläsning 3, ht2004 67
Nios stöd för stack
Stack Pointer = %r14 = %sp (alias %o6) Finns det Stack-operationer ?LDS är LOAD Rdst <- [%sp, IMM8]
STS är STORE [%sp,IMM8] <- Rsrc
med flera variationerIngen PUSH- eller POP-instruktionIngen JSR/RTS med returadress på stack
April 19, 2023 2G1518, föreläsning 3, ht2004 68
Nios stöd för subrutiner
Anrop med CALL reg, returadress i register %r15 = %o7innehållet i reg multipliceras med 2 innan det skrivs till PC, jämför med JMP reg
Anrop med BSR LabelRetur med RET (JMP %r31 alias %i7)Retur med LRET (JMP %r15 alias %o7)
April 19, 2023 2G1518, föreläsning 3, ht2004 69
Returadress vid subrutinanrop
I ett speciellt register (fördel/nackdel)I valfritt register (fördel/nackdel)I minnet på speciell plats (fördel/nackdel)I minnet på valfri plats (fördel/nackdel)I minnet på en stack med PUSH
(fördel/nackdel)I första ordet i subrutinen (fördel/nackdel)
April 19, 2023 2G1518, föreläsning 3, ht2004 70
Register Window
Vad? Hur? Varför?
April 19, 2023 2G1518, föreläsning 3, ht2004 71
Register Window
32 registers are direct available%i0-%i7 = %r24-%r31 ; In regs%L0-%L7 = %r16-%r23 ; Local
regs%o0-%o7 = %r8 -%r15 ; Out regs%g0-%g7 = %r0 -%r7 ; Global
regs
April 19, 2023 2G1518, föreläsning 3, ht2004 72
Register Window
32 registers are direct available128 or 256 or 512 possible registers CWP - Current Window Pointer
anger vilka register som just nuär direkt åtkomliga
CWP finns i statusregister %ctl0 !
April 19, 2023 2G1518, föreläsning 3, ht2004 73
Register Window
CWP = Current Window PointerSAVE ”öppna nytt fönster”
minska CWP med 1RESTORE ”byt till gammalt fönster”
öka CWP med 1
April 19, 2023 2G1518, föreläsning 3, ht2004 74
Table 20. Smallest Nios Register File
Reg[..
Reg[..
Reg[..
Reg[..
Reg[..
Reg[..
Reg[..
Reg[..
Reg[..
Reg[24..31]
Reg[16..23]
Reg[8..15]
Reg[104..111]
Reg[112..119]
Reg[120..127]
Reg[0..7]
%o0..%o7
%L0..%L7
%i0..%i7
%g0..%g7
%o0..%o7
%L0..%L7
%i0..%i7
%g0..%g7 %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 = 4CWP = 2
April 19, 2023 2G1518, föreläsning 3, ht2004 75
Exempel på subrutinkodutan SAVE och RESTOREnästlat subrutinanrop går ej
RUT: kodkod;BSR RUT2 ;subrutinanrop
nix…LRET ;JMP %07
April 19, 2023 2G1518, föreläsning 3, ht2004 76
RUT: SAVE %sp,0 ;ändra inte %spkodBSR RUT2 ;fungerar…RET ;JMP %i7RESTORE ;i hopplucka
Exempel på subrutinkodmed SAVE och RESTOREnästlat subrutinanrop går bra
April 19, 2023 2G1518, föreläsning 3, ht2004 77
Parameterplatstill och från subrutin
I register (fördel/nackdel)I minnet på fast adress
(fördel/nackdel)I minnet på en stack (fördel/nackdel)
April 19, 2023 2G1518, föreläsning 3, ht2004 78
Exempel på parameteröverföringmed SAVE och RESTORE
Anroparen lagrar parametrar i %o-register (utom %o7) Anroparen gör BSR eller CALL varvid
returadress sparas i %o7 Subrutinen gör SAVE varvid
alla %oreg hamnar på platser %ireg Returadress finns nu i %i7 Parametrar finns nu i %i-register Det finns 16 ”nya” register, 8 st %Local och 8 st %Out Subrutinen gör RESTORE Returadress finns nu i %o7 varvid
retur ska göras med JMP %o7 (samma som LRET)
April 19, 2023 2G1518, föreläsning 3, ht2004 79
Programexempel - subrutinta fram max av val1 och val2
Exempel på C-kod torde kunna vara...int val1, val2, result; /* variabler */... int max (int val1, int val2); /* prototyp */...result = max ( val1, val2); /* anrop */
April 19, 2023 2G1518, föreläsning 3, ht2004 80
Programexempel - subrutin ta fram max av val1 och val2
int val1, val2, result; kan översättas till (av kompilator)
.dataval1: .word 0val2: .word 0result: .word 0...
April 19, 2023 2G1518, föreläsning 3, ht2004 81
anrop av max (val1, val2)inparametrar i register
; result = max ( val1, val2) kan översättas till.text
movia %L0, val1ld %o0, [%L0] ;parameter val1 i %o0movia %L0, val2ld %o1, [%L0] ;parameter val2 i %o1movia %L0, max@h ;dst-adress/2 till ett register call %L0 ;ea i registernopmovia %L0, resultst [%L0], %o0 ;returvärde i %o0
April 19, 2023 2G1518, föreläsning 3, ht2004 82
Programexempel - subrutinta 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)
April 19, 2023 2G1518, föreläsning 3, ht2004 83
int max (int val1, int val2)inparametrar i register
max: cmp %o0, %01ifs cc_ltmov %o0, %o1lret ;jmp %o7
April 19, 2023 2G1518, föreläsning 3, ht2004 84
Föreläsning 3Sammanfattning
4-stegs PIPE-LINE, repetitionMACRO, syntetisk instruktionLoad och Store med indexerad adress5-stegs PIPE-LINEhårdvara för hopp, NiosSubrutiner, anrop, retur, parametrar, Stack och Register Window