90
March 15, 2022 2G1518, föreläsning 3, v t2005 1 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 Datorteknik

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

April 19, 2023 2G1518, föreläsning 3, vt2005 1

2G1518 Datorteknik

Föreläsning 3Metoder och subrutiner

Kursboken, valda delar av kapitel 4

version vt 2005för E och I m.fl.

April 19, 2023 2G1518, föreläsning 3, vt2005 2

Föreläsning 3Innehåll

4-stegs PIPE-LINE, repetitionMACRO, syntetisk instruktionMACRO-exempelLoad och Store med indexerad adressStack med SP samt PUSH och POPSubrutiner, anrop, retur, parametrar, Register Window

April 19, 2023 2G1518, föreläsning 3, vt2005 3

Viktiga delar i en dator

CPU

MEM

BUS

I/Oprogram

data

April 19, 2023 2G1518, föreläsning 3, vt2005 4

Programexekveringi två steg

(decode)EXECUTE

FETCH(update PC)

April 19, 2023 2G1518, föreläsning 3, vt2005 5

Programexekveringi fyra steg

EXecute/MEMory

Fetch Operand

WriteBack

FetchInstruction

ProgramMemory

m x 8

ALU

ADD

RegisterFile

32 x 32

RegisterFile

32 x 32

PC

NVZC

Logik förvillkorligt

hopp

op-code

CCR

true/false

PC+k/PC+Imm

RWM

April 19, 2023 2G1518, föreläsning 3, vt2005 6

Instruktioner Nios-Instruktioner

MOV Rdst, Rsrc

MOVI Rdst, Imm5 ;ADDI/SUBI

ADDRdst, Rsrc ;SUB/AND/OR/XOR

CMPRdst, Rsrc ;CMPIBR / JMP / BEQ / BNE LD Rdst, [Rsrc]

ST [Rdst], Rsrc

April 19, 2023 2G1518, föreläsning 3, vt2005 7

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

April 19, 2023 2G1518, föreläsning 3, vt2005 8

ADD Rdest, regA, regB

Skriv makro för add-instruktion med 3 register.macro ADD3 reg1, reg2, reg3MOV \reg1, \reg2ADD \reg1, \reg3

.endmEffekt: man kan använda en ny instruktionADD3 %rk, %rj, %ri för att skriva summan av

%ri och %rj till %rk

April 19, 2023 2G1518, föreläsning 3, vt2005 9

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

.endmEffekt: man kan använda en ny instruktionSWAPR %ri, %rj för att byta plats på

innehåll i %ri och %rj

April 19, 2023 2G1518, föreläsning 3, vt2005 10

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, vt2005 11

Programexekveringi fyra steg

EXecute/MEMory

Fetch Operand

WriteBack

FetchInstruction

ProgramMemory

m x 8

ALU

ADD

RegisterFile

32 x 32

RegisterFile

32 x 32

PC

NVZC

Logik förvillkorligt

hopp

op-code

CCR

true/false

PC+k/PC+Imm

RWM

April 19, 2023 2G1518, föreläsning 3, vt2005 12

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

April 19, 2023 2G1518, föreläsning 3, vt2005 13

Inför ny hårdvaraK - register

EXecute/MEMory

Fetch Operand

WriteBack

FetchInstruction

ProgramMemory

m x 8

ALU

ADD

RegisterFile

32 x 32

RegisterFile

32 x 32

PC

NVZC

Logik förvillkorligt

hopp

op-code

CCR

true/false

PC+k/PC+Imm

RWM

April 19, 2023 2G1518, föreläsning 3, vt2005 14

Hur används register K ?

PreFiX-instruktionen PFX Imm11

skriver ett 11 bitars värde till register K

Värdet finns kvar i en klockcykelsen nollställs register K

Instruktionen direkt efter PFX Imm11

kan använda innehåll i K

Imm5 ökar till (Imm11 cat Imm5 )

April 19, 2023 2G1518, föreläsning 3, vt2005 15

Nios: MOVIP Rdst, Imm16

(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

0………… …0 0……0 Imm111 Imm15

Resultat:

April 19, 2023 2G1518, föreläsning 3, vt2005 16

PFX Imm11

FI PFX - -PFX Imm11

MOVI Rdst, Imm5FI FO EXE WB

April 19, 2023 2G1518, föreläsning 3, vt2005 17

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, vt2005 18

Imm211 Imm25

Hjälp från översättaren

%xhi (value)%xlo (value)%hi (value)%lo (value)

value@h = 31 MSBits

Imm111 Imm15= value

April 19, 2023 2G1518, föreläsning 3, vt2005 19

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

April 19, 2023 2G1518, föreläsning 3, vt2005 20

LOAD och STORE

Vi kan utföra instruktionerna

LD Rdst, [ Raddr ]

ST [ Raddr ], Rsrc

April 19, 2023 2G1518, föreläsning 3, vt2005 21

Programexekveringi fyra steg

EXecute/MEMory

Fetch Operand

WriteBack

FetchInstruction

ProgramMemory

m x 8

ALU

ADD

RegisterFile

32 x 32

RegisterFile

32 x 32

PC

NVZC

Logik förvillkorligt

hopp

op-code

CCR

true/false

PC+k/PC+Imm

RWM

April 19, 2023 2G1518, föreläsning 3, vt2005 22

LOADA Rdest, Addr

Skriv makro för load med direkt adressering.macro LOADA reg, addrMOVIA \reg, \addrLD \reg, [\reg]

.endmOBS att inga registerinnehåll “förstörs”

April 19, 2023 2G1518, föreläsning 3, vt2005 23

STOREA Addr, Rdest,

Skriv makro för store med direkt adressering.macro STOREA addr, reg MOVIA %g7, \addrST [%g7], \reg

.endmOBS att innehåll i reg %g7 “förstörs”

April 19, 2023 2G1518, föreläsning 3, vt2005 24

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, vt2005 25

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, vt2005 26

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, vt2005 27

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, vt2005 28

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, vt2005 29

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, vt2005 30

LOAD Rdst <- Offset[Raddr]

Vi kan utföra operationenLOAD Rdst, Offset[ Raddr ]

med koden (tar 2 klockcykler eller hur)ADDI Raddr, Offset

LD Rdst, [ Raddr ]

OBS! Innehåll i Raddr ändras

April 19, 2023 2G1518, föreläsning 3, vt2005 31

STORE Offset[Raddr] <- Rsrc

Vi kan utföra operationenSTORE Offset[ Raddr ], Rsrc

med koden (tar 2 klockcykler eller hur)ADDI Raddr, Offset

ST [ Raddr ], Rsrc

OBS! Innehåll i Raddr ändras

April 19, 2023 2G1518, föreläsning 3, vt2005 32

LOAD Rdst <- Offset[Raddr]Nios-kod

Vi kan utföra operationenLOAD 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

April 19, 2023 2G1518, föreläsning 3, vt2005 33

STORE Offset[Raddr] <- Rsrc Nios-kod

Vi kan utföra operationenSTORE 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

April 19, 2023 2G1518, föreläsning 3, vt2005 34

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, vt2005 35

JUMP (Raddr)inför ny dataväg

EXecute/MEMory

Fetch Operand

WriteBack

FetchInstruction

ProgramMemory

m x 8

ALU

ADD

RegisterFile

32 x 32

RegisterFile

32 x 32

PC

NVZC

Logik förvillkorligt

hopp

op-code

CCR

true/false

PC+k/PC+Imm

RWM

Ny dataväg

April 19, 2023 2G1518, föreläsning 3, vt2005 36

BRA Immn

ADDitionsenhet och datavägar finns

EXecute/MEMory

Fetch Operand

WriteBack

FetchInstruction

ProgramMemory

m x 8

ALU

ADD

RegisterFile

32 x 32

RegisterFile

32 x 32

PC

NVZC

Logik förvillkorligt

hopp

op-code

CCR

true/false

PC+k/PC+Imm

RWM

April 19, 2023 2G1518, föreläsning 3, vt2005 37

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, vt2005 38

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, vt2005 39

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, vt2005 40

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, vt2005 41

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, vt2005 42

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, vt2005 43

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”

April 19, 2023 2G1518, föreläsning 3, vt2005 44

Imm211 Imm25

Hjälp från översättaren

%xhi (value)%xlo (value)%hi (value)%lo (value)

value@h = 31 MSBits

Imm111 Imm15= value

April 19, 2023 2G1518, föreläsning 3, vt2005 45

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, vt2005 46

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, vt2005 47

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, vt2005 48

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, vt2005 49

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, vt2005 50

STATUS-flaggor

EXecute/MEMory

Fetch Operand

WriteBack

FetchInstruction

ProgramMemory

m x 8

ALU

ADD

RegisterFile

32 x 32

RegisterFile

32 x 32

PC

NVZC

Logik förvillkorligt

hopp

op-code

CCR

true/false

PC+k/PC+Imm

RWM

April 19, 2023 2G1518, föreläsning 3, vt2005 51

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, vt2005 52

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, vt2005 53

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, vt2005 54

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 LabelNOP

April 19, 2023 2G1518, föreläsning 3, vt2005 55

BEQ Label

Skriv makro för villkorligt hopp BEQ.macro BEQ labelIFS cc_eqBR \labelNOP

.endm

April 19, 2023 2G1518, föreläsning 3, vt2005 56

Bxx Label

Skriv makro-mall för villkorligt hopp Bxx.macro Bxx labelIFS cc_xxBR \labelNOP

.endmkan skrivas för xx: eq, ne, … (14 olika !)

April 19, 2023 2G1518, föreläsning 3, vt2005 57

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, vt2005 58

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, vt2005 59

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

April 19, 2023 2G1518, föreläsning 3, vt2005 60

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 IFRNZOm nästa är en PFX så görs två nästa

April 19, 2023 2G1518, föreläsning 3, vt2005 61

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, vt2005 62

Subrutinanrop

CALL RUTRET1: ADD …

CALL RUTRET2: SUB ...

RUT: ADD …

RETURN

April 19, 2023 2G1518, föreläsning 3, vt2005 63

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, vt2005 64

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, vt2005 65

Nios hopp-instruktionBSR IMM11

Liknar BR IMM11 med tilläggg attReturadress sparas i register %R15/%o7Returadressen ä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, vt2005 66

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/%o7

April 19, 2023 2G1518, föreläsning 3, vt2005 67

Nios-MakrotCALLA addr

; Subrutinanrop med absolutadressering

.macro CALLA addrMOVIA %g7, \addr@hCALL %g7

.endm

OBS att innehåll i reg %g7 “förstörs”

April 19, 2023 2G1518, föreläsning 3, vt2005 68

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, vt2005 69

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, vt2005 70

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, vt2005 71

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, vt2005 72

Nios: StackReservera plats, initiera SP

Stack Pointer

SP

.equ size , 256

.data

.align 2stack: .fill size, 4, 0....text…movia %sp, stack+size*4

+

-stack:

April 19, 2023 2G1518, föreläsning 3, vt2005 73

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, vt2005 74

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, vt2005 75

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, vt2005 76

Register Window

Vad? Hur? Varför?

April 19, 2023 2G1518, föreläsning 3, vt2005 77

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, vt2005 78

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, vt2005 79

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, vt2005 80

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, vt2005 81

Exempel på subrutinkodutan SAVE och RESTOREnästlat subrutinanrop går ej

RUT: ......;BSR RUT2 ;subrutinanrop ger

fel…LRET ;JMP %07NOP ;hopplucka viktig nop

April 19, 2023 2G1518, föreläsning 3, vt2005 82

RUT: SAVE %sp,0 ;ändra inte %sp...BSR RUT2;subrutinanrop

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, vt2005 83

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, vt2005 84

Exempel på parameteröverföringmed SAVE och RESTORE

Anroparen lagrar parametrar i %o-register (utom %o6-%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, vt2005 85

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, vt2005 86

Programexempel - subrutin ta fram max av val1 och val2

int val1, val2, result; kan översättas till (av kompilator)

.data

.align 2 ;adress multipel av 22

val1: .word 0val2: .word 0result: .word 0...

April 19, 2023 2G1518, föreläsning 3, vt2005 87

anrop av max (val1, val2)inparametrar i register

; result = max ( val1, val2) kan översättas till.text

movia %L0, val1ld %o0, [%L0] ;parameter val1 till %o0 från minnetmovia %L0, val2ld %o1, [%L0] ;parameter val2 till %o1 från minnetmovia %L0, max@h ;dst-adress/2 till ett register call %L0 ;ea/2 i registernopmovia %L0, resultst [%L0], %o0 ;returvärde i %o0 kopieras till minnet

April 19, 2023 2G1518, föreläsning 3, vt2005 88

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, vt2005 89

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, vt2005 90

Föreläsning 3Innehåll

4-stegs PIPE-LINE, repetitionMACRO, syntetisk instruktionMACRO-exempelLoad och Store med indexerad adressStack med SP samt PUSH och POPSubrutiner, anrop, retur, parametrar, Register Window