történeti áttekintés kezdetben: kevés, egyszerű utasítás
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 PresentationTRANSCRIPT
![Page 1: Történeti áttekintés Kezdetben: kevés, egyszerű utasítás](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/29.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/31.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/32.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/33.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/34.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/35.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/36.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/37.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/38.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/39.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/40.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/41.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/42.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/43.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/44.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/45.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/46.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/47.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/48.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/49.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/50.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/51.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/52.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/53.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/54.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/55.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/56.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/57.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/58.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/59.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/60.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/61.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/62.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/63.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/64.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/65.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/66.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/67.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/68.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/5681439e550346895db01da8/html5/thumbnails/69.jpg)
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!