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.
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).
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.
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).
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
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
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
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
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.
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
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
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
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.
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ó
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
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
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.
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
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.
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
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
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
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.
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
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!
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
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.
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.
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
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.
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:
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
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
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
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’
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’
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 ’
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’”
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
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’
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’
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.
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.
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
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.
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
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
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.
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
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).
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.
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!
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
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
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”!
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.
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
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!
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
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
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!
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.
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?
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?
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!
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!
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?
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?
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!