69
Máté: Architektú rák 9. előadás 1 Történeti áttekintés • Kezdetben: kevés, egyszerű utasítás. • Később: sok, egyre összetettebb utasítás. IBM 360-as család. Lefelé kompatibilis, csak a nagyobb gépek hajtják végre hardveresen az utasításokat (gyors), a kicsik interpretálnak (olcsó). Interpretálás (mikroprogramozás) előnyei: • hibásan interpretált utasítások könnyű javítása, • új utasítások egyszerű hozzáadása, • strukturált felépítés; összetett utasítások hatékony fejlesztése.

Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

  • Upload
    tawana

  • View
    32

  • Download
    0

Embed Size (px)

DESCRIPTION

Történeti áttekintés Kezdetben: kevés, egyszerű utasítás. Később: sok, egyre összetettebb utasítás. IBM 360 -as család. Lefelé kompatibilis, csak a nagyobb gépek hajtják végre hardveresen az utasításokat (gyors), a kicsik interpretálnak (olcsó). Interpretálás (mikroprogramozás) előnyei: - PowerPoint PPT Presentation

Citation preview

Page 1: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 1

Történeti áttekintés

• Kezdetben: kevés, egyszerű utasítás.

• Később: sok, egyre összetettebb utasítás.

• IBM 360-as család. Lefelé kompatibilis, csak a nagyobb gépek hajtják végre hardveresen az utasításokat (gyors), a kicsik interpretálnak (olcsó).

Interpretálás (mikroprogramozás) előnyei:

• hibásan interpretált utasítások könnyű javítása,

• új utasítások egyszerű hozzáadása,

• strukturált felépítés; összetett utasítások hatékony fejlesztése.

Page 2: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 2

Hetvenes évek vége:

• a csak olvasásra használható gyors memóriák (vezérlőtárak – ROM Read Only Memory) megjelenése és beépülése a CPU-ba.

• az első 8 bites processzorok:

- Motorola 68000 egyszerű utasításokkal nagy

interpretert épít (siker),

- Zilog 8000 bonyolult hardver utasításokat

(kudarc).

Page 3: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 3

A nyolcvanas évek elejétől: A központi memória sebessége csaknem elérte a vezérlő tárak sebességét.

RISC (Reduced Instruction Set Computer - csökkentett utasításkészletű számítógép): SPARC, DEC Alpha.

Cél: minél gyorsabban indítani és átlapolni a gyors, egyszerű utasításokat. Az utasítások általában két regiszteren hajtanak végre műveletet, az eredményt egy harmadik regiszterbe tárolják.

CISC (Complex Instruction Set Computer, összetett utasításkészletű számítógép): IBM nagy gépek, VAX, …. Összetett, és lassabb utasítások.

Page 4: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 4

RISC tervezési elvei • hardveres (nem mikroprogramozott) utasítások, • az utasítások indítási sebességének maximalizálása, • könnyen dekódolható utasítások, • memóriához fordulás csak betöltés (load) és tárolás

(store) esetén.

Sok regiszter kell!

Miért nem nyert a RISC? Kompatibilitás + az elveket az Intel is részben átveszi

(486-tól RISC mag).

Page 5: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 5

Pentium II CPU mikroarchitektúrája (4.46. ábra)Magas szintű csővezeték:

Betöltő/Dekódoló: az utasításokat szétdarabolja, a RISC szerű mikroműveleteket ROB-ba teszi (ROB: ReOrder Buffer – mikroművelet tár terület).

Elküldő/Végrehajtó: a ROB-ban lévő utasításokat – esetleg eltérő sorrendben – végrehajtja.

Befejező: sorrendben befejezi az összes mikroművelet végrehajtását, frissíti a regisztereket.

Betöltő/dekódolóegység

Elküldő/Végrehajtóegység

Befejezőegység

mikroművelet tár terület

Page 6: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 6

Utasítás hossz dekódolóIFU1

1. szintű I gyorsító tár

gyorsító sor betöltőIFU0

Utasítás sorba állítóIFU2

0 1 2ID0

• IFU0: ha a puffere üres, 32 bájtos gyorsító sort tölt be.

• IFU1: legfeljebb 30 utasítás határát megkeresi.

• IFU2: beteszi egy sorba az utasításokat.

• ID0: az egyszerű utasításokat kettő, a többit a harmadik dekódolja (mint Mic-4), mikroműveletenként: – műveleti kód, – két forrás és – egy cél regiszter.

Betöltö/Dekódoló

4.47. ábra

Page 7: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 7

• ID1, statikus + dinamikus elágazás jövendölés (4 bites előzmény figyelés).

Utasítás hossz dekódolóIFU1

1. szintű I gyorsító tár

gyorsító sor betöltőIFU0

Utasítás sorba állítóIFU2

Mikroművelet sorba állító (qeuer)

ID1

Regiszter lefoglalóRAT

Következő IP

Dinamikuselágazás jövendölő

Mikroműveletsorba állító (sequencer)

Statikuselágazás jövendölő

0 1 2ID0

A mikroműveletek a ROB-ba mennek

ROB

4.47. ábra

Page 8: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 8

• ROB (ReOrder Buffer): maximum 3 mikroműveletet fogad ciklusonként.

• RAT: 40 firkáló regiszter WAR és WAW feloldására

Utasítás hossz dekódolóIFU1

1. szintű I gyorsító tár

gyorsító sor betöltőIFU0

Utasítás sorba állítóIFU2

Mikroművelet sorba állító (qeuer)

ID1

Regiszter lefoglalóRAT

Következő IP

Dinamikuselágazás jövendölő

Mikroműveletsorbaállító (sequencer)

Statikuselágazás jövendölő

0 1 2ID0

A mikroműveletek a ROB-ba mennek

ROB

Page 9: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 9

Foglalóhely

0. port

1. port

2. port

3. port

4. port

Elküldő/VégrehajtóÜtemezi és végrehajtja a mikroműveleteket, feloldja a függőségeket és erőforrás igény ütközéseket. Egy ciklusban öt művelet is kiosztható.

Foglalóhely: 20 elemű sor azoknak a műveleteknek, amelyeknek minden operandusa megvan.

Portok: ezekhez kapcsolódnak a végrehajtó egységek.

Ha több művelet osztható ki egy végrehajtó egységnek, akkor bonyolult algoritmus dönt, pl.: egy elágazás végrehajtása elsőbbséget élvez egy aritmetikai művelettel szemben.

Portonként sorbaállás lehetséges.

Page 10: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 10

Elküldő/Végrehajtó (4.48. ábra)

MMX végrehajtó egységLebegőpontos

végrehajtó egység

Egész végrehajtó egység

MMX végrehajtó egységLebegőpontos

végrehajtó egység

Egész végrehajtó egység

Betöltő egység

Tároló egység

Tároló egység

Foglalóhely

0. port

1. port

2. port

3. port

4. port

RO

B

Betöltések

Tárolások

Tárolások

Page 11: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 11

Befejező (4.46. ábra) Ez küldi az eredményeket a megfelelő helyre – regiszterbe és az Elküldő/Végrehajtóba, ahol az eredményre várnak RAW függőség esetén. Az utasításokat a programban lévő sorrendben fejezi be, még akkor is, ha a végrehajtás sorrendje ettől eltért.A feltételesen végrehajtott utasítások eredményét eldobja, ha ezeket az utasításokat nem kellett volna végrehajtani.

Betöltő/dekódolóegység

Elküldő/Végrehajtóegység

Befejezőegység

mikroművelet tár terület

Page 12: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 12

Pentium II CPU mikroarchitektúrája (4.46. ábra)

1. szintű I gyorsító tár

1. szintű D gyorsító tár

Sín illesztő egység

2. Szintű gyorsító tár felé

Lokális sín a PCI hídhoz

Betöltő/dekódolóegység

Elküldő/Végrehajtóegység

Befejezőegység

mikroművelet tár terület

Page 13: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 13

UltraSPARC II CPU mikroarchitektúrájaA SPARC sorozat RISC elgondoláson alapul. A

legtöbb utasításnak két forrás és egy cél regisztere van.

PREFETCH utasítás feltételezett betöltésre, nem okoz gyorsító sor cserét gyorsító tár hiánykor.

2 bites elágazás jövendölő + statikus elágazás jövendölés.

Page 14: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 14

Előre betöltő/Elküldő (4.49. ábra): ciklusonként négy utasítást tölt be – egy fél gyorsító sort, és dekódolja.

Dekódoló: Néhány „irányító” bitet ad minden utasításhoz, ezzel a későbbi folyamatot gyorsítja. Maximum 12 elemű sort épít. A kiosztás sorrendben történik.

Csoportosító logika

1. szintű I gyorsító tár

Előre betöltő/Elküldő

2. szintű gyorsító tár Külső gyorsító tár egység

Memória illesztő egységFő memória

Dekódoló

Page 15: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 15

Csoportosító logika: egyszerre maximum 4 (2 fix- és 2 lebegőpontos) utasítást tud kiosztani a sorból. A kiosztás és befejezés a sorrendtől eltérő lehet.

Az egész és lebegőpontos egység tejesen független.Betöltő/Tároló: írás áteresztő. A gyorsító tár hiány miatti

várakozás elkerülésére külön sor a függőben lévő LOAD-ok és STORE-ok számára.

ALU

Egész regiszterek

Egész végrehajtó

ALU FP ALU

FP regiszterek

Lebegőpontos egység

FP ALU

Grafikai egység

Betöltő sor

1. szintű D gyorsító

Betöltő/Tároló

Tároló sor

Csoportosító logika

Page 16: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 16

Az UltraSPARC II mikroarchitektúrája (4.49. ábra)

ALU

Egész regiszterek

Egész végrehajtó

ALU FP ALU

FP regiszterek

Lebegőpontos egység

FP ALU

Grafikai egység

Betöltő sor

1. szintű D gyorsító tár

Betöltő/Tároló

Tároló sor

Dekódoló

1. szintű I gyorsító tár

Előre betöltő/Elküldő

2. szintű gyorsító Külső gyorsító egység

Memória illesztő egységFő memória

Csoportosító logika

Page 17: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 17

1. max. 4 utasítás az I-gyorsítóból,

2. irányító bitek az utasításokhoz,

3. kioszt annyi utasítást, ahányat tud

8. csapda kezelés

9. regiszterekbe írás

Egé

sz c

sőve

zeté

k

Betölt

Dekódol

Csoportosít

N3

Gyorsító tár

Végrehajt

N1

N2

X1

Regiszter

X2

X3F

P/G

rafi

kus

csőv

ezet

ék

ír

9 szakaszos csővezeték (4.50. ábra)

4.

5.

6.

7.

Page 18: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 18

4 - 7. szakasz– a fix pontos utasítások

1 ciklus alatt végrehajtódnak + 3 üres szakasz,

– LOAD és STORE még dolgozik a gyorsító tár szakaszban + 2 üres szakasz,

– a lebegőpontos utasítások a regiszterek eléréséhez általában 1 szakaszt igényelnek + 3-at a végrehajtáshoz.

Egé

sz c

sőve

zeté

k

Betölt

Dekódol

Csoportosít

N3

Gyorsító tár

Végrehajt

N1

N2

X1

Regiszter

X2

X3F

P/G

rafi

kus

csőv

ezet

ék

ír

Page 19: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 19

picoJava II CPU mikroarchitektúrája (4.51. ábra)

Nem szuperskaláris: a mikroműveleteket a kiosztás sorrendjében hajtja végre és fejezi be (a fő cél az volt, hogy olcsó legyen).

Regiszter oszlop: 64 db 32 bites regiszter, a verem tetején lévő szavakat tartalmazza.

Automatikus eljárás (cselező – dribbling): a regiszter oszlop ne legyen túl tele vagy túl üres.

Ciklikus puffer 2 mutatóval: nem kell másolgatni.

Page 20: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 20

A regiszter oszlop közvetlenül, a D gyorsító egy ciklus késleltetéssel érhető el.

picoJava II CPU mikro-architektúrája (4.51. ábra)

32Végrehajtást

vezérlő egység

Előre betöltő, dekódoló, összevonó

egység

Egész és lebegőpontos

egység

0-16 KBI gyorsító tár

0-16 KBD gyorsító tár

Memória és B/K sín illesztő egység

64 db 32 bites regiszter

32

32

32

3x32

2x32

Regiszter oszlop

Page 21: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 21

picoJava II csővezetéke (4.52. ábra)

Nem szuperskaláris, a mikroműveleteketa kiosztás sorrendjében hajtja végre.

1. Betöltés: egyszerre 8 bájt az I gyorsítótárból.

2. Dekódolás: RISC jellegű, két forrás és egy cél regisztert tartalmazó mikroutasításokat állít előa CISC utasítás folyamból.

3. Operandus betöltés a veremből (regiszter oszlopból).

4. Utasítás végrehajtás.5. Ha kell, a D gyorsítóba írás.6. Eredmények verembe írása, ha kell.

Betöltés az I gyorsítótárból

Dekódolás, összevonás

Operandusok a veremből

Utasítás végrehajtás

D gyorsítóba írás

Eredmények verembe írása

Page 22: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 22

Utasítás összevonás, pl.: n=k+m; (4.53. ábra)mk

k

n

m

k

n

m

k

k+m

m

A dekódoló egyetlen mikroműveletté vonja össze.

k

k+m

m

k+m

k

n

m

k

k

n

m

k

n

m

SP→ 876543210

Kez

detb

en

ILO

AD

k

után

ILO

AD

m

után

IAD

D

után

IST

OR

E n

u

tán

Kez

detb

en

Öss

zevo

nt

utas

ítás

ut

án

Page 23: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 23

Utasítás csoportok (4.54. ábra)

Csoport Leírás Példa

NF Nem összevonható utasítások GOTO

LV Betesz egy szót a verembe ILOAD

MEM Egy szót a veremből a memóriába tesz ISTORE

BG1 Egy verem operandusú utasítások IFEQ

BG2 Két verem operandusú utasítások IF_CMPEQ

OP Két operandusú utasítások eredménnyel IADD

JVM-nek több utasítása van, mint IJVM-nek! Több utasítás tartozik egy csoportba.

Page 24: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 24

Utasítások összevonásaA dekódoló figyeli, hogy a sorozat megfelel-e egy legfeljebb 4 hosszú mintának (4.55. ábra). Ha megfelel, akkor a sorozatot egyetlen mikroutasítással helyettesíti. 74 bites mikroműveleteket oszt ki, ezek legtöbbje egy kódot és három regisztert tartalmaz, és egy ciklusban végrehajtható.

Utasítás sorozat PéldaLV LV OP MEM ILOAD, ILOAD, IADD, ISTORELV LV OP ILOAD, ILOAD, IADDLV LV BG2 ILOAD, ILOAD, IF_CMPEQLV BG1 ILOAD, IFEQLV BG2 ILOAD, IF_CMPEQLV MEM ILOAD, ISTOREOP MEM IADD, ISTORE

Page 25: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 25

Elágazás jövendölés: nem lesz elágazás!

Inkább olcsó, mint bonyolult hardver!

Page 26: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 26

Összehasonlítás

Pentium II CISC gép

egy CISC utasítás → több RISC mikroutasítás

UltraSPARC II RISC gép

picoJava II verem gép, sok memória hivatkozás

több CISC utasítás → egy RISC mikroutasítás

Page 27: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 27

Makró és blokk ismétlésMakró definíció: M_névMACRO [fpar1[,fpar2...]]

; makró fej (kezdet)

... ; makró törzsENDM ; makró vége

fpar1,fpar2... formális paraméterek vagy egyszerűen paraméterek.

A makró definíció nem lesz része a lefordított programnak, csupán azt határozza meg, hogy később mit kell a makró hívás helyére beírni (makró kifejtés, helyettesítés).

A makró törzsön belül előfordulhat makró hívás és másik makró definíció is.

Page 28: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 28

Makró hívás: M_név [apar1[,apar2...]]

apar1,apar2... aktuális paraméterek/argumentumok. A műveleti kód helyére írt M_név hatására a korábban

megadott definíció szerint megtörténik a makró helyettesítés, más néven makró kifejtés. Ez a makró törzs bemásolását jelenti, miközben az összes paraméter összes előfordulása a megfelelő argumentummal helyettesítődik. A helyettesítés szövegesen történik, azaz minden paraméter – mint szöveg – helyére a megfelelő argumentum – mint szöveg – kerül.

A helyettesítés nem rekurzív. Makró hívás argumentuma sem lehet makró hívás.

Az argumentumnak megfelelő formális paraméternek lehet olyan előfordulása, amely a későbbiek során makró hívást eredményez.

Page 29: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 29

Dupla szavas összeadás: (DX:AX)(DX:AX)+(CX:BX)

Eljárás deklaráció:

EDADD PROC NEAR

ADD AX,BX

ADC DX,CXRET

EDADD ENDP

Makró definíció:

MDADD MACRO

ADD AX,BX

ADC DX,CX

ENDM

Page 30: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 30

Ha a programban valahol dupla szavas összeadást kell

végezzünk, akkor hívnunk kell az eljárást illetve a makrót:

Eljárás hívás:

CALL EDADD

Makró hívás:

MDADD

Futás közben felhívásra kerül az EDADD eljárás

Fordítás közben megtörténik a makró helyettesítés:

ADD AX,BX

ADC DX,CX

Futás közben ez a két utasítás kerül csak végrehajtásra.

Page 31: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 31

Látható, hogy eljárás esetén kettővel több utasítást kell végrehajtanunk, mint makró esetében (CALL EDADD és RET).

Még nagyobb különbséget tapasztalunk, ha (CX:BX) helyett paraméterként kívánjuk megadni az egyik összeadandót:

Page 32: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 32

Eljárás deklaráció:

EDADD2 PROC NEAR

PUSH BP

MOV BP,SP ADD

AX,4[BP]

ADC DX,6[BP]

POP BP

RET 4

EDADD ENDP

Ha SI az összeadandónk címét tartalmazza, akkor a felhívás:

PUSH 2[SI]

PUSH [SI]

CALL EDADD2

Futás közben végrehajtásra kerül a paraméter átadás, az eljárás hívás, az eljárás: összesen 9 utasítás

Page 33: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 33

Most sem része a makró definíció a lefordított programnak.

Makró definíció:

MDADD2 MACRO P

IFB PADD AX,BXADC DX,CX

ELSE

ADD AX,PADC DX,P+2

ENDIF

ENDM

Makró hívás:

MDADD2 [SI]

Fordítás közben a hívás azADD AX,[SI]ADC DX,[SI]+2

utasításokra cserélődik, futás közben csak ez a két utasítás kerül végrehajtásra.

MDADD2

hatása:

ADD AX,BXADC DX,CX

Page 34: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 34

Paraméter másutt is előfordulhat a makró törzsben, nemcsak az operandus részen, pl.:

PL macro p1,P2mov ax,p1P2 p1endm

PL Adat, INChatása:

mov ax,AdatINC Adat

Page 35: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 35

A &, %, ! karakterek továbbá a <> és ;; speciális szerepet töltenek be makró kifejtéskor.

& (helyettesítés operátor): • ha a paraméter – helyettesített – értéke része egy szónak;• idézeten belüli helyettesítés:

errgen macro y, x

err&y db ’Error &y: &x’

endm

errgen 5, <Unreadable disk>

hatása:

err5 db ’Error 5: Unreadable disk’

Page 36: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 36

<> (literál szöveg operátor): Ha aktuális paraméter szóközt vagy ,-t is tartalmaz. Az előző példa eredménye <> nélkül:

errgen 5, Unreadable disk

kifejtve:err5 db ’Error 5: Unreadable’

adat macro pdb pendm

adat <’abc’,13,10,0>adat ’abc’,13,10,0

kifejtve:db ’abc’,13,10,0db ’abc’

Page 37: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 37

! (literál karakter operátor): Az utána következő karaktert makró kifejtéskor közönséges karakterként kell kezelni. Pl.: a korábbi errgen makró

errgen 103, <Expression !> 255>

hívásának hatása:

err103 db ’Error 103: Expression > 255’

de

errgen 103, <Expression > 255>

hívásának hatása:

err103 db ’Error 103: Expression ’

Page 38: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 38

% (kifejezés operátor): Az utána lévő argumentum (kifejezés is lehet) értéke – és nem a szövege – lesz az aktuális paraméter. Pl.:

sym1 equ 100sym2 equ 200txt equ ’Ez egy szöveg’

kif macro exp, valdb ”&exp = &val”endm

kif <sym1+sym2>, %(sym1+sym2)kif txt, %txt

db ”sym1+sym2 = 300”db ”txt = ’Ez egy szöveg’”

Page 39: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 39

Az alábbi példa a % használatán kívül a makró törzsön belüli makró hívást is bemutatja:

s = 0

ErrMsg MACRO text

s = s+1

Msg %s,text

ENDM

Msg MACRO sz,str

msg&sz db str

ENDM

Page 40: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 40

s = 0ErrMsg MACRO texts = s+1

Msg %s,textENDM

Msg MACRO sz,strmsg&sz db str

ENDM

ErrMsg ’syntax error’makró hívás hatására bemásolásra kerül (.LALL hatására

látszik a listán) azs = s+1

Msg %s,’syntax error’szöveg. s értéke itt 1-re változik. Újabb makró hívás (Msg). A %s paraméter az értékére (1) cserélődik, majd kifejtésre kerül ez a makró is, ebből kialakul:

msg1 db ’syntax error’

Page 41: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 41

s = 0ErrMsg MACRO texts = s+1

Msg %s,textENDM

Msg MACRO sz,strmsg&sz db str

ENDM

Egy újabb hívás és hatása: ErrMsg ’invalid operand’msg2 db ’invalid operand’

Page 42: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 42

;; (makró kommentár): A makró definíció megjegyzéseinek kezdetét jelzi. A ;; utáni megjegyzés a makró kifejtés listájában nem jelenik meg.

Page 43: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 43

LOCALc1[,c2...]c1, c2, ... minden makró híváskor más, ??xxxx alakú

szimbólumra cserélődik, ahol xxxx a makró generátor által meghatározott hexadecimális szám. A LOCAL operátort közvetlenül a makró fej utáni sorba kell írni.

KOPOGmacro nLOCAL ujramov cx,n

ujra:KOPPloop ujraendm

Ha a programban többször hívnánk a KOPOG makrót, akkor a LOCAL operátor nélkül az ujra címke többször lenne definiálva.

Page 44: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 44

Makró definíció belsejében lehet másik makró definíció is. A belső makró definíció csak a külső makró meghívása után jut érvényre, válik láthatóvá. Pl.:

shifts macro OPNAME ; makrót ; definiáló

makró

OPNAME&S MACRO OPERANDUS,N

mov cl, N

OPNAME OPERANDUS,cl

ENDM

endm

Page 45: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 45

shifts macro OPNAME ; makrót ; definiáló

makróOPNAME&S MACRO OPERANDUS,N

mov cl, NOPNAME OPERANDUS,clENDMendm

Ha ezt a makrót felhívjuk pl.:shifts ROR

akkor aRORS MACRO OPERANDUS,N

mov cl, NROR OPERANDUS,clENDM

makró definíció generálódik.

Page 46: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 46

RORS MACRO OPERANDUS,N

mov cl, N

ROR OPERANDUS,cl

ENDM

Mostantól meghívható a RORS makró is, pl.:

RORS AX, 5

aminek a hatása:

mov cl, 5

ROR AX,cl

Page 47: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 47

Makró definíció belsejében meghívható az éppen definiálás alatt lévő makró is (a makró hívás ezáltal rekurzívvá válik).

PUSHALL macro reg1,reg2,reg3,reg4,reg5IFNB <reg1> ;; ha a paraméter nem üres

push reg1 ;; az első regiszter mentésePUSHALL reg2,reg3,reg4,reg5 ;; rekurzió

ENDIFENDM

Most pl. aPUSHALL ax, bx, cx

makró hívás hatása:push axpush bxpush cx

Page 48: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 48

PUSHALL macro reg1,reg2,reg3,reg4,reg5IFNB <reg1> ;; ha a paraméter nem üres

push reg1 ;; az első regiszter mentésePUSHALL reg2,reg3,reg4,reg5 ;; rekurzió

ENDIFENDM

PUSHALL ax, bx, cxmakró hívás hatása:

push axPUSHALL bx, cx

az újabb hívás hatása:push bxPUSHALL cx

az újabb hívás hatása:push cxPUSHALL

ennek hatására nem generálódik semmi.

Page 49: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 49

FL_CALLELJ = 0CALLELJ macro ;; Eljárást beépítő és felhívó makró

LOCAL FIRST ;; nem lenne fontos IF FL_CALLELJ ;; a 2. hívástól igaz

call Elj ;; elég felhívni az eljárástEXITM ;; makró helyettesítés vége

ENDIFFL_CALLELJ = 1 ;; csak az első híváskor

JMP FIRST ;; jut érvényreElj proc ;; eljárás deklaráció

...ret

Elj endpFIRST: call Elj ;; az eljárás felhívása

endm

Page 50: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 50

Az első CALLELJ hívás hatására az

FL_CALLELJ = 1

JMP ??0000

Elj proc

...

ret

Elj endp

??0000: call Elj

utasítások generálódnak (??0000 a FIRST-ből keletkezett).

Page 51: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 51

A további CALLELJ hívások esetén csak egyetlen utasítás, a

call Elj

utasítás generálódik.

A megoldás előnye, hogy az eljárás csak akkor része a programnak, ha a program tartalmazza az eljárás felhívását is, és mégsem kell törődjünk azzal, hogy hozzá kell-e szerkesztenünk a programhoz vagy se.

Page 52: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 52

Megváltoztathatunk egy makró definíciót azáltal, hogy újra definiáljuk.

Makró definíción belül előfordulhat másik makró definíció.

E két lehetőség kombinációjából adódik, hogy a makró definíción belül megadhatunk ugyanarra a makró névre egy másik definíciót, ezáltal készíthető olyan makró, amely „átdefiniálja” önmagát.

Az önmagát átdefiniáló makrók esetében a belső és külső definíciót lezáró ENDM utasítások között egyetlen utasítás sem szerepelhet – még kommentár sem!

Page 53: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 53

Önmagát „átdefiniáló” makró (az előző feladat másik megoldása):

CALLELJ2 macro ; külső makró definíciójmp FIRST

Elj2 proc ; eljárás deklaráció...ret

Elj2 endpFIRST: call Elj2 ; eljárás hívásCALLELJ2 MACRO ; belső makró definíció

call Elj2 ; eljárás hívásENDM ; belső makró definíció végeendm ; külső makró definíció vége

Page 54: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 54

CALLELJ2 első hívásakor a kifejtés eredménye:

jmp FIRST

Elj2 proc ; eljárás deklaráció

...

ret

Elj2 endp

FIRST: call Elj2 ; eljárás hívás

CALLELJ2 MACRO ; belső makró definíció

call Elj2 ; eljárás hívás

ENDM ; belső makró definíció

vége

Page 55: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 55

A kifejtés CALLELJ2 újabb definícióját tartalmazza, ez felülírja az eredeti definíciót, és a továbbiak során ez a definíció érvényes. Ez alapján a későbbi CALLELJ2 hívások esetén

call Elj2

a kifejtés eredménye.

Megjegyezzük, hogy most is szerencsésebb lett volna a FIRST címkét lokálissá tenni. Igaz, hogy csak egyszer generálódik, de így a CALLELJ2 makró használójának tudnia kell, hogy a FIRST címke már „foglalt”!

Page 56: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 56

Ha egy M_név makró definíciójára nincs szükség a továbbiak során, akkor a

PURGE M_név

pszeudo utasítással kitörölhetjük.

Page 57: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 57

Blokk ismétlés

Nemcsak a blokk definíciójának kezdetét jelölik ki, hanem a kifejtést (hívást) is előírják. A program más részéről nem is hívhatók.

Blokk ismétlés kifejezés-szer:

REPT kifejezés

... ; ez a rész ismétlődik

ENDM

Page 58: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 58

Pl. a korábban ismertetett kopogást így is megoldhattuk volna:

REPT N

KOPP

ENDM

Ha pl. N=3, akkor ennek a hatására a

KOPP

KOPP

KOPP

makró hívások generálódnak.

Megjegyzés: Most N nem lehet változó – fordítási időben ismert kell legyen az értéke!

Page 59: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 59

Blokk ismétlés argumentum lista szerint:

IRP par, <arg1[,arg2...]>... ; ez a rész többször bemásolásra ... ; kerül úgy, hogy par rendre... ; felveszi az arg1,arg2... értéketENDM

IRP x, <1,2,3>db xENDM

db 1db 2db 3

Page 60: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 60

Blokk ismétlés string alapján:

IRPC par,string... ; ez a rész kerül többször bemásolásra

úgy, ... ; hogy par rendre felveszi ... ; a string karaktereitENDM

Ezt a string-et nem kell idézőjelek közé tenni (újabb ismétlés jelentene). Ha a string-en belül pl. szóköz vagy , is előfordul, akkor <> jelek közé kell tenni.

Az előző feladatot így is megoldhattuk volna:

IRPC x,123db xENDM

Page 61: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 61

Másik példa:

IRPC x,ABCDEFGHIJKLMNOPQRSTUVWXYZdb ’&x’ ; nagy betűkdb ’&x’+20h ; kis betűkENDM

Fontos az & jel, nélküle x nem paraméter, hanem string lenne!

Page 62: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 62

Makró definíció tartalmazhat blokk ismétlést, és blokk ismétlés is tartalmazhat makró definíciót vagy makró hívást.

Pl.: A bit léptető és forgató utasítás kiterjesztésnek egy újabb megoldása:

; makrót definiáló blokkismétlés IRP OP,<RCR,RCL,ROR,ROL,SAR,SAL>

OP&S MACRO OPERANDUS,N mov cl, N OP OPERANDUS,cl ENDM ENDM

Ennek a megoldásnak előnye, hogy nem kell külön meghívnunk a külső makrót az egyes utasításokkal, mert ezt elvégzi helyettünk az IRP blokk ismétlés.

Page 63: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 63

Feladatok

Mit nevezünk alap blokknak?Mit nevezünk emelésnek?Mit nevezünk feltételezett végrehajtásnak?Milyen mellékhatásai lehetnek a feltételezett

végrehajtásnak?Mi a SPECULATIVE_LOAD lényege?Mi a mérgezés bit?Hogy működik a halmaz kezelésű gyorsítótár?Mit jelent az írás áteresztés (write through)?Mit jelent a késleltetett írás?Mit jelent az írás allokálás?

Page 64: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 64

FeladatokMinek a rövidítése a RISC?Minek a rövidítése a CISC?Mi jellemzi a RISC gépeket?Jellemezze a Pentium II processzort!Jellemezze a Pentium II és a memória sín

kapcsolatát!Jellemezze a Pentium II mikroarchitektúráját!Mi a feladata a Betöltő/dekódoló egységnek?Mi a feladata az Elküldő/végrehajtó egységnek?Mi a feladata a Befejező egységnek?

Page 65: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 65

FeladatokJellemezze az UltraSPARC II processzort!Hogy valósul meg a memória címzés UltraSPARC II

esetén!Jellemezze az UltraSPARC II mikroarchitektúráját!Mi az UPA feladata?Mi az UDB II feladata?Milyen az UltraSPARC II elágazás jövendölése?

Mi a feladata az Előre betöltő/Elküldő egységnek?

Mi a feladata a Dekódoló egységnek?

Mi a feladata a Betöltő/Tároló egységnek?Jellemezze az UltraSPARC II csővezetékét!

Page 66: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 66

FeladatokJellemezze a PicoJava II processzort!Milyen szervezésű gyorsítótára van a PicoJava II-

nek?Jellemezze a PicoJava II mikroarchitektúráját!Mi regiszter oszlop?Jellemezze a PicoJava II csővezetékét!Hasonlítsa össze a Pentium II, az UltraSPARC II és

a PicoJava II mikroarchitektúráját!

Page 67: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 67

FeladatokMi a makro definíció?Mi a makró fej? Mi a makró törzs? Mi a makró hívás?Mi a makró kifejtés?Mi a (formális) paraméter?Mi az aktuális paraméter (argumentum)? Mely karakterek játszanak speciális szerepet makró

kifejtéskor?Melyik karakternek mi a szerepe? Adjon példát rá!Mi a szerepe a LOCAL pszeudó utasításnak?

Page 68: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 68

FeladatokAdjon példát makró hívást tartalmazó makró

definícióra!Adjon példát makró definíciót tartalmazó makró

definícióra!Mit kell tudni azokról a makró definíciókról, amelyek

egy másik makró definícióban találhatók?Adjon példát olyan makró definícióra, amely

tartalmazza saját hívását!Adjon példát olyan makró definícióra, amely

tartalmazza saját átdefiniálását!Mit kell tudni az önmaguk átdefiniálását tartalmazó

makró definíciókról?

Page 69: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás

Máté: Architektúrák 9. előadás 69

FeladatokMi a hatása a PURGE pszeudó utasításnak?Mit jelent a blokk ismétlés?Milyen blokk ismétlési lehetőségeket ismer?Mi a REPT pszeudó utasítás általános alakja?Mi az IRP pszeudó utasítás általános alakja?Mi az IRPC pszeudó utasítás általános alakja?Mondjon példát makrót definiáló blokkismétlésre!