2g1518 datorteknik
Download
1 / 72

2G1518 Datorteknik - PowerPoint PPT Presentation


  • 64 Views
  • Uploaded on

2G1518 Datorteknik. Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version vt 2005 för IT-1 och ME-3 m.fl. Föreläsning 3 Innehåll. 4-stegs PIPE-LINE, repetition MACRO, syntetisk instruktion MACRO-exempel Load och Store med indexerad adress

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 2G1518 Datorteknik' - valentine-gaines


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
2g1518 datorteknik

2G1518 Datorteknik

Föreläsning 3

Metoder och subrutiner

Kursboken, valda delar av kapitel 4

version vt 2005

för IT-1 och ME-3 m.fl.

2G1518, förel. 3, vt2005 (IT/ME)


F rel sning 3 inneh ll
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. 3, vt2005 (IT/ME)


Viktiga delar i en dator
Viktiga delar i en dator

CPU

BUS

program

I/O

MEM

data

2G1518, förel. 3, vt2005 (IT/ME)


Programexekvering i tv steg

FETCH

(update PC)

(decode)

EXECUTE

Programexekveringi två steg

2G1518, förel. 3, vt2005 (IT/ME)


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

4 stegs PIPE-LINE

ADD

PC

RWM

true/false

ALU

op-code

NVZC

Logik för

villkorligt

hopp

CCR

2G1518, förel. 3, vt2005 (IT/ME)


Instruktioner nios instruktioner
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. 3, vt2005 (IT/ME)


Mall f r makro en syntetisk instruktion
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. 3, vt2005 (IT/ME)


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. 3, vt2005 (IT/ME)


Immediate data r bara 5 bitar
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. 3, vt2005 (IT/ME)


Makrot movia reg addr
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. 3, vt2005 (IT/ME)


Load och store
LOAD och STORE

  • Vi kan utföra instruktionerna LD Rdst, [ Raddr ] ST [ Raddr ], Rsrc

2G1518, förel. 3, vt2005 (IT/ME)


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

4 stegs PIPE-LINE

ADD

PC

RWM

true/false

ALU

op-code

NVZC

Logik för

villkorligt

hopp

CCR

2G1518, förel. 3, vt2005 (IT/ME)


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. 3, vt2005 (IT/ME)


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. 3, vt2005 (IT/ME)


Programvariabler samlade i minnet
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. 3, vt2005 (IT/ME)


Indexerad adress

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. 3, vt2005 (IT/ME)


LOAD och STORE

  • Vi vill alltså kunna utföra instruktionerna LOAD Rdst, Offset[ Raddr ] STORE Offset[ Raddr ], Rsrc

2G1518, förel. 3, vt2005 (IT/ME)


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. 3, vt2005 (IT/ME)


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. 3, vt2005 (IT/ME)


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. 3, vt2005 (IT/ME)


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. 3, vt2005 (IT/ME)


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)dataväg finns

Dataväg

ADD

PC

RWM

true/false

ALU

op-code

NVZC

Logik för

villkorligt

hopp

CCR

2G1518, förel. 3, vt2005 (IT/ME)


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. 3, vt2005 (IT/ME)


Ovillkorligt hopp villkorligt hopp
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. 3, vt2005 (IT/ME)


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. 3, vt2005 (IT/ME)


Nios hopp-instruktionJMP %rA

  • Skifta innehåll i register %rA ett steg åt vänster och kopiera till PC

2G1518, förel. 3, vt2005 (IT/ME)


Nios makrot jumpa addr
Nios-MakrotJUMPA addr

; Ladda ett 32 bitars värde till PC

; Hopp med absolutadressering

.macro JUMPA addrMOVIA %g7, \[email protected] %g7

.endm

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

2G1518, förel. 3, vt2005 (IT/ME)


Hj lp fr n vers ttaren
Hjälp från översättaren

%xhi (value)

%xlo (value)

%hi (value)

%lo (value)

= value

Imm211Imm25

Imm111Imm15

[email protected] = 31 MSBits

2G1518, förel. 3, vt2005 (IT/ME)


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. 3, vt2005 (IT/ME)


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. 3, vt2005 (IT/ME)


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. 3, vt2005 (IT/ME)


Status flaggor
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. 3, vt2005 (IT/ME)


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. 3, vt2005 (IT/ME)


Villkorlig hopp-instruktionBcond Immn

  • PC sätts till PC + Immn om cond är sant

  • PC sätts till PC + nom 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

2G1518, förel. 3, vt2005 (IT/ME)


Nios har villkorlig instruktion IFS cc_IMM4

  • IFS - Conditionally execute next instruction

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

2G1518, förel. 3, vt2005 (IT/ME)


Nios har villkorlig instruktion SKPS cc_IMM4

  • SKPS - Skip On Condition Code

  • Om 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

2G1518, förel. 3, vt2005 (IT/ME)


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 Label

    CMPI reg1, 0 ;jämför reg1 med noll

    IFS cc_eq ;om Z=1

    BR Label ;hoppa till Label

    NOP

2G1518, förel. 3, vt2005 (IT/ME)


BEQ Label

Skriv makro för villkorligt hopp BEQ

.macro BEQ label

IFS cc_eqBR \labelNOP

.endm

2G1518, förel. 3, vt2005 (IT/ME)


Bxx Label

Skriv makro-mall för villkorligt hopp Bxx

.macro Bxx label

IFS cc_xxBR \labelNOP

.endm

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

2G1518, förel. 3, vt2005 (IT/ME)


14 olika villkor finns i nios

cc_gt not(Zor(NxorV))

cc_le Zor(NxorV)

cc_nv V = 0

cc_v V = 1

cc_hi not (C or Z)

cc-la C or Z

14 olika villkor finns i Nios

  • cc_nc C = 0

  • cc_c C = 1

  • cc_nz Z = 0

  • cc_z Z = 1

  • cc_pl N = 0

  • cc_mi N = 1

  • cc_lt N xor V

  • cc_ge not(N xor V)

2G1518, förel. 3, vt2005 (IT/ME)


Alias f r villkor i nios
Alias för villkor i Nios

  • cc_cs = cc_c Carry Set = Carry

  • cc_n = cc_mi Negative = MInus

  • cc_cc = cc_nc Carry Clear = No Carry

  • cc_vc = cc_nv oVerflow Clear = No oVe...

  • cc_eq = cc_z Equal = Zero

  • cc_ne = cc_nz Not Equal = Not Zero

  • cc_vs = cc_v oVerflow Set = oVerflow

  • cc_p = cc_pl Plus = PLus

2G1518, förel. 3, vt2005 (IT/ME)


Nios instruktion ifrz reg
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

2G1518, förel. 3, vt2005 (IT/ME)


Nios instruktion ifrnz reg
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 IFRNZ

  • Om nästa är en PFX så görs två nästa

2G1518, förel. 3, vt2005 (IT/ME)


Funktioner subrutiner metoder
funktioner, subrutiner, metoder

  • Hur sker anrop ?

  • Med hoppinstruktion !

  • Hur sker återhopp ?

  • Med hoppinstruktion !

  • Returadress måste lagras ! Var ?

2G1518, förel. 3, vt2005 (IT/ME)


Subrutinanrop
Subrutinanrop

RUT: ADD …

RETURN

CALL RUT

RET1: ADD …

CALL RUT

RET2: SUB ...

2G1518, förel. 3, vt2005 (IT/ME)


Subrutinanrop

RUT: ADD …

CALL FKN

RETURN

FKN: MUL …

CALL NEW

RETURN

CALL RUT

RET1: ADD …

CALL RUT

RET2: SUB ...

2G1518, förel. 3, vt2005 (IT/ME)


Funktioner subrutiner metoder1
funktioner, subrutiner, metoder

Hur sker parameteröverföringVar lagras parametrar

  • från anropare till rutinen, inparametrar

  • från rutinen till anroparen, returvärden

    Olika typ av parameter

  • värde

  • pekare

2G1518, förel. 3, vt2005 (IT/ME)


Nios hopp-instruktionBSR IMM11

  • Liknar BR IMM11 med tilläggg att

  • Returadress sparas i register %R15/%o7

  • Returadressen ä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

2G1518, förel. 3, vt2005 (IT/ME)


Nios hopp-instruktionCALL %rA

  • Liknar JMP %rA med tillägg att

  • Returadress sparas i register %R15=%o7

  • Returadressen ä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

2G1518, förel. 3, vt2005 (IT/ME)


Stackhantering
Stackhantering

  • Stack är speciell reserverad plats i minnet

  • Stack Pekare pekar på plats i stacken

  • PUSH-operation, lägg på stack

  • POP-operation, hämta från stack

2G1518, förel. 3, vt2005 (IT/ME)


Stack operationer push och pop
STACKoperationer PUSH och POP

PUSH op:

SP <- sp - n mem(sp) <- op

POP dst:

dst <- mem(sp)

SP <- sp + n

n = antal bytes

-

Stack Pointer

SP

+

2G1518, förel. 3, vt2005 (IT/ME)


Nios: PUSH reg

; Pusha ett register på stacken

.macro PUSH regSUBI %sp,4 ;%sp = %o6ST [%sp],\reg

.endm

; PUSH %o6 är inte bra

2G1518, förel. 3, vt2005 (IT/ME)


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

2G1518, förel. 3, vt2005 (IT/ME)


Nios: StackReservera plats, initiera SP

.equ size , 256

.data

.align 2

stack: .fill size, 4, 0

...

.text

movia %sp, stack+size*4

-

stack:

Stack Pointer

SP

+

2G1518, förel. 3, vt2005 (IT/ME)


Nios st d f r stack
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] <- Rsrcmed flera variationer

  • Ingen PUSH- eller POP-instruktion

  • Ingen JSR/RTS med returadress på stack

2G1518, förel. 3, vt2005 (IT/ME)


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 Label

  • Retur med RET (JMP %r31 alias %i7)

  • Retur med LRET (JMP %r15 alias %o7)

2G1518, förel. 3, vt2005 (IT/ME)


Returadress vid subrutinanrop
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)

2G1518, förel. 3, vt2005 (IT/ME)


Register window

Register Window

Vad? Hur? Varför?

2G1518, förel. 3, vt2005 (IT/ME)


Register window1
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

2G1518, förel. 3, vt2005 (IT/ME)


Register Window

  • 32 registers are direct available

  • 128 or 256 or 512 possible registers

  • CWP - Current Window Pointer anger vilka register som just nu är direkt åtkomliga

  • CWP finns i statusregister %ctl0 !

2G1518, förel. 3, vt2005 (IT/ME)


Register window2
Register Window

  • CWP = Current Window Pointer

  • SAVE ”öppna nytt fönster” minska CWP med 1

  • RESTORE ”byt till gammalt fönster” öka CWP med 1

2G1518, förel. 3, vt2005 (IT/ME)


Table 20 smallest nios register file

%i0..%i7

Reg[..

Reg[..

Reg[..

Reg[..

Reg[..

Reg[..

Reg[..

%i0..%i7

Reg[..

Reg[16..23]

Reg[8..15]

Reg[104..111]

Reg[112..119]

Reg[120..127]

Reg[0..7]

%o0..%o7

Reg[24..31]

%L0..%L7

%o0..%o7

Reg[..

%L0..%L7

%g0..%g7

%g0..%g7

%o0..%o7

%L0..%L7

%g0..%g7

%g0..%g7

%o0..%o7

%L0..%L7

%i0..%i7

%i0..%i7

%L0..%L7

%i0..%i7

%g0..%g7

%o0..%o7

%L0..%L7

%o0..%o7

%i0..%i7

%g0..%g7

Table 20. Smallest Nios Register File

SAVE

CWP = 6

RESTORE

CWP = 5

CWP = 2

CWP = 4

CWP = 1

CWP = 0

2G1518, förel. 3, vt2005 (IT/ME)


Exempel p subrutinkod utan save och restore n stlat subrutinanrop g r ej
Exempel på subrutinkodutan SAVE och RESTOREnästlat subrutinanrop går ej

RUT: ...

...

;BSR RUT2 ;subrutinanrop ger fel

LRET ;JMP %07

NOP ;hopplucka viktig nop

2G1518, förel. 3, vt2005 (IT/ME)


Exempel på subrutinkodmed SAVE och RESTOREnästlat subrutinanrop går bra

RUT: SAVE %sp,0 ;ändra inte %sp

...

BSR RUT2 ;subrutinanrop fungerar

RET ;JMP %i7

RESTORE ;i hopplucka

2G1518, förel. 3, vt2005 (IT/ME)


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)

2G1518, förel. 3, vt2005 (IT/ME)


Exempel på parameteröverföringmed SAVE och RESTORE

  • Anroparen lagrar parametrar i %o-register (utom %o6-%o7)

  • Anroparen gör BSR eller CALL varvidreturadress sparas i %o7

  • Subrutinen gör SAVE varvidalla %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 varvidretur ska göras med JMP %o7 (samma som LRET)

2G1518, förel. 3, vt2005 (IT/ME)


Programexempel subrutin ta fram max av val1 och val2
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 */

2G1518, förel. 3, vt2005 (IT/ME)


Programexempel subrutin ta fram max av val1 och val21
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 0

    val2: .word 0

    result: .word 0

    ...

2G1518, förel. 3, vt2005 (IT/ME)


Anrop av max val1 val2 inparametrar i register
anrop av max (val1, val2)inparametrar i register

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

.text

movia %L0, val1

ld %o0, [%L0] ;parameter val1 till %o0 från minnet

movia %L0, val2

ld %o1, [%L0] ;parameter val2 till %o1 från minnet

movia %L0, [email protected] ;dst-adress/2 till ett register

call %L0 ;ea/2 i register

nop

movia %L0, result

st [%L0], %o0 ;returvärde i %o0 kopieras till minnet

2G1518, förel. 3, vt2005 (IT/ME)


Programexempel subrutin ta fram max av val1 och val22
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)

2G1518, förel. 3, vt2005 (IT/ME)


Int max int val1 int val2 inparametrar i register
int max (int val1, int val2)inparametrar i register

max: cmp %o0, %01

ifs cc_lt

mov %o0, %o1

lret ;jmp %o7

2G1518, förel. 3, vt2005 (IT/ME)


F rel sning 3 inneh ll1
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. 3, vt2005 (IT/ME)


ad