2G1518 Datorteknik allmän kurs

84
June 12, 2022 2G1518, föreläsning 3, h t2004 1 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.

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

Transcript of 2G1518 Datorteknik allmän kurs

Page 1: 2G1518 Datorteknik allmän kurs

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.

Page 2: 2G1518 Datorteknik allmän kurs

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

Page 3: 2G1518 Datorteknik allmän kurs

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

Viktiga delar i en dator

CPU

MEM

BUS

I/O

Page 4: 2G1518 Datorteknik allmän kurs

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

Programexekveringi två steg

(decode)EXECUTE

FETCH(update PC)

Page 5: 2G1518 Datorteknik allmän kurs

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

Page 6: 2G1518 Datorteknik allmän kurs

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

Page 7: 2G1518 Datorteknik allmän kurs

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

Page 8: 2G1518 Datorteknik allmän kurs

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

Page 9: 2G1518 Datorteknik allmän kurs

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

Page 10: 2G1518 Datorteknik allmän kurs

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

Page 11: 2G1518 Datorteknik allmän kurs

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

Page 12: 2G1518 Datorteknik allmän kurs

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

Page 13: 2G1518 Datorteknik allmän kurs

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

PFX Imm11

FI PFX - -PFX Imm11

MOVI Rdst, Imm5FI FO EXE WB

Page 14: 2G1518 Datorteknik allmän kurs

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:

Page 15: 2G1518 Datorteknik allmän kurs

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

Page 16: 2G1518 Datorteknik allmän kurs

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

Page 17: 2G1518 Datorteknik allmän kurs

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

LOAD och STORE

Vi kan utföra instruktionerna

LD Rdst, [ Raddr ]

ST [ Raddr ], Rsrc

Page 18: 2G1518 Datorteknik allmän kurs

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

Page 19: 2G1518 Datorteknik allmän kurs

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

Page 20: 2G1518 Datorteknik allmän kurs

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

Page 21: 2G1518 Datorteknik allmän kurs

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

Page 22: 2G1518 Datorteknik allmän kurs

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

Page 23: 2G1518 Datorteknik allmän kurs

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

Page 24: 2G1518 Datorteknik allmän kurs

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

Page 25: 2G1518 Datorteknik allmän kurs

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

Page 26: 2G1518 Datorteknik allmän kurs

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

Page 27: 2G1518 Datorteknik allmän kurs

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 ]

Page 28: 2G1518 Datorteknik allmän kurs

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

Page 29: 2G1518 Datorteknik allmän kurs

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

Page 30: 2G1518 Datorteknik allmän kurs

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

Programexekveringi fem steg

FI - Fetch InstructionFO - Fetch OperandALU - CalculationMEM - Memory ReferenceWB - Write Back

Page 31: 2G1518 Datorteknik allmän kurs

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

Page 32: 2G1518 Datorteknik allmän kurs

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

Page 33: 2G1518 Datorteknik allmän kurs

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

Page 34: 2G1518 Datorteknik allmän kurs

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

Page 35: 2G1518 Datorteknik allmän kurs

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:

Page 36: 2G1518 Datorteknik allmän kurs

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

Page 37: 2G1518 Datorteknik allmän kurs

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

Page 38: 2G1518 Datorteknik allmän kurs

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

Page 39: 2G1518 Datorteknik allmän kurs

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

Page 40: 2G1518 Datorteknik allmän kurs

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 ?

Page 41: 2G1518 Datorteknik allmän kurs

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)

Page 42: 2G1518 Datorteknik allmän kurs

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

Page 43: 2G1518 Datorteknik allmän kurs

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

Page 44: 2G1518 Datorteknik allmän kurs

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 ...

Page 45: 2G1518 Datorteknik allmän kurs

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

Page 46: 2G1518 Datorteknik allmän kurs

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

Page 47: 2G1518 Datorteknik allmän kurs

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.)

Page 48: 2G1518 Datorteknik allmän kurs

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

Page 49: 2G1518 Datorteknik allmän kurs

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

Page 50: 2G1518 Datorteknik allmän kurs

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

Page 51: 2G1518 Datorteknik allmän kurs

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

Page 52: 2G1518 Datorteknik allmän kurs

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

Page 53: 2G1518 Datorteknik allmän kurs

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

Page 54: 2G1518 Datorteknik allmän kurs

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

Page 55: 2G1518 Datorteknik allmän kurs

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

Page 56: 2G1518 Datorteknik allmän kurs

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 ?

Page 57: 2G1518 Datorteknik allmän kurs

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

Subrutinanrop

CALL RUTRET1: ADD …

CALL RUTRET2: SUB ...

RUT: ADD …

RETURN

Page 58: 2G1518 Datorteknik allmän kurs

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

Page 59: 2G1518 Datorteknik allmän kurs

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

Page 60: 2G1518 Datorteknik allmän kurs

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

Page 61: 2G1518 Datorteknik allmän kurs

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

Page 62: 2G1518 Datorteknik allmän kurs

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

Page 63: 2G1518 Datorteknik allmän kurs

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

+

-

Page 64: 2G1518 Datorteknik allmän kurs

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

Page 65: 2G1518 Datorteknik allmän kurs

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

Page 66: 2G1518 Datorteknik allmän kurs

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:

Page 67: 2G1518 Datorteknik allmän kurs

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

Page 68: 2G1518 Datorteknik allmän kurs

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)

Page 69: 2G1518 Datorteknik allmän kurs

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)

Page 70: 2G1518 Datorteknik allmän kurs

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

Register Window

Vad? Hur? Varför?

Page 71: 2G1518 Datorteknik allmän kurs

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

Page 72: 2G1518 Datorteknik allmän kurs

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 !

Page 73: 2G1518 Datorteknik allmän kurs

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

Page 74: 2G1518 Datorteknik allmän kurs

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

Page 75: 2G1518 Datorteknik allmän kurs

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

Page 76: 2G1518 Datorteknik allmän kurs

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

Page 77: 2G1518 Datorteknik allmän kurs

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)

Page 78: 2G1518 Datorteknik allmän kurs

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)

Page 79: 2G1518 Datorteknik allmän kurs

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 */

Page 80: 2G1518 Datorteknik allmän kurs

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...

Page 81: 2G1518 Datorteknik allmän kurs

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

Page 82: 2G1518 Datorteknik allmän kurs

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)

Page 83: 2G1518 Datorteknik allmän kurs

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

Page 84: 2G1518 Datorteknik allmän kurs

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