2g1518 datorteknik allmän kurs

Post on 31-Dec-2015

81 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

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

top related