az isa szint tervezési szempontjai hosszú távú : később is jó legyen az architektúra,
DESCRIPTION
Az ISA szint tervezési szempontjai Hosszú távú : később is jó legyen az architektúra, Rövid távú : addig is piacon kell maradni. Rövidebb utasítások : kevesebb helyet foglalnak el, gyorsabban betölt hetők. Hosszabb utasítások : több lehetséges műveleti kód, nagyobb memória címezhető. - PowerPoint PPT PresentationTRANSCRIPT
Máté: Architektúrák 11. előadás 1
Az ISA szint tervezési szempontjai
• Hosszú távú: később is jó legyen az architektúra,Rövid távú: addig is piacon kell maradni.
• Rövidebb utasítások: kevesebb helyet foglalnak el, gyorsabban betölthetők.Hosszabb utasítások: több lehetséges műveleti kód, nagyobb memória címezhető.
• Bájt címzés: hatékonyabb szöveg feldolgozásnál,Szó címzés: nagyobb memória címezhető.
• …
Máté: Architektúrák 11. előadás 2
Utasításformák, utasításhossz (5.9-10. ábra).
Műveleti kód
Műveleti kód cím
Műv. kód cím1 cím2
M.k. cím1 cím2 cím3
1 szó
utasítás
utasítás
utasítás
utasítás
1 szó
utasítás utasítás
utasítás utasítás
utasítás utasítás
utasítás utasítás
1 szó
utasítás
utasítás ut. ut.
utasítás
Máté: Architektúrák 11. előadás 3
A műveleti kód kiterjesztése
k bites műveleti kód esetén 2k különböző utasítás lehet, n bites címrésznél 2n memória címezhető, és egyik csak a másik rovására növelhető (5.11. ábra).
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
műv. kód 1. cím 2. cím 3. cím
Lehetőségek:• fix utasításhossz: rövidebb kód mellett hosszabb operandus
rész,• minimális átlagos utasításhossz: a gyakori kódok rövidek, a
ritkán használtak hosszabbak.
Máté: Architektúrák 11. előadás 4
A műveleti kód kiterjesztése (5.12. ábra)
16 bit
4 bites műveleti
kód
0000 xxxx yyyy zzzz
15 db 3 címes utasítás
0001 xxxx yyyy zzzz0010 xxxx yyyy zzzz
.
.
.1100 xxxx yyyy zzzz1101 xxxx yyyy zzzz1110 xxxx yyyy zzzz
16 bit
8 bites műveleti
kód
1111 0000 yyyy zzzz
14 db 2 címes utasítás
1111 0001 yyyy zzzz1111 0010 yyyy zzzz
.
.
.1111 1011 yyyy zzzz1111 1100 yyyy zzzz1111 1101 yyyy zzzz
Az 1111 kódot nem használtuk ki 3 címes utasításnak (menekülő kód), és ez lehetővé teszi, hogy további – igaz, nem 3 címes – utasításokat adjunk meg.1111 1110 és 1111 1111 is menekülő kód.
Máté: Architektúrák 11. előadás 5
A műveleti kód kiterjesztése16 bit
12 bites műveleti
kód
1111 1110 0000 zzzz
31 db 1 címes utasítás
1111 1110 0001 zzzz1111 1110 0010 zzzz
.
.
.1111 1110 1110 zzzz1111 1110 1111 zzzz1111 1111 0000 zzzz1111 1111 0001 zzzz
.
.
.1111 1111 1101 zzzz1111 1111 1110 zzzz
16 bit
16 bites műveleti
kód
1111 1111 1111 0000
16 db 0 címes utasítás
1111 1111 1111 00011111 1111 1111 0010
.
.
.1111 1111 1111 11011111 1111 1111 11101111 1111 1111 1111
1111 1111 1111 is menekülő kód.
Máté: Architektúrák 11. előadás 6
Orthogonalitási elv: Jó architektúrában a műveleti kódok és a címzési módszerek (majdnem) szabadon párosíthatók.
Három címes elképzelés (5.24. ábra):
8 1 5 5 5 8
1 Műv.kód 0 cél forrás1 forrás2 Műv.kód
2 Műv.kód 1 cél forrás1 eltolás
3 Műv.kód eltolás
1. típus: aritmetikai utasítások. 2. típus: közvetlen adat megadás,
index módú LOAD és STORE utasítás.3. típus: elágazó, eljárás hívó utasítások,
LOAD és STORE, ezek R0-t használnák.
Máté: Architektúrák 11. előadás 7
Két címes elképzelés (5.25. ábra).
8 3 5 4 3 5 4
Műv.kód mód reg eltolás mód reg eltolás
Feltételes 32 bites direkt operandus vagy eltolás
Feltételes 32 bites direkt operandus vagy eltolás
A mód 3 bitje lehetővé teszi a közvetlen operandus, direkt, regiszter, regiszter indirekt, index és verem címzési módokat
Két további mód bevezetésére is lehetőség van.
Máté: Architektúrák 11. előadás 8
Pentium II utasításformái (5.13. ábra)
Több generáción keresztül kialakult architektúra.
Csak egy operandus lehet memória cím.
Prefix, escape (bővítésre), MOD, SIB (Scale Index Base)
0-5 1-2 0-1 0-1 0-4 0-4
prefix műv.kód mód SIB eltolás közvetlen
2 3 3
mód REC R/M
2 3 3
skála index bázis6 1 1
utasítás
Melyik operandus a forrás? bájt/szó
bit
bit
bit
bájt
Máté: Architektúrák 11. előadás 9
Címzési módok (5.26. ábra): nagyon szabálytalan. Baj: nem minden utasításban használható minden mód, nem minden regiszter használható minden módban (nincs EBP indirekt, ESP relatív címzés). 32 bites címzési módok:
MÓD
R/M 00 01 10 11
000 M[EAX] M[EAX+offset8] M[EAX+offset32] EAX v. AL
001 M[ECX] M[ECX+offset8] M[ECX+offset32] ECX v. CL
010 M[EDX] M[EDX+offset8] M[EDX+offset32] EDX v. DL
011 M[EBX] M[EBX+offset8] M[EBX+offset32] EBX v. BL
100 SIB SIB offset8-cal SIB offset32-vel ESP v. AH
101 direkt M[EBP+offset8] M[EBP+offset32] EBP v. CH
110 M[ESI] M[ESI+offset8] M[ESI+offset32] ESI v. DH
111 M[EDI] M[EDI+offset8] M[EDI+offset32] EDI v. BH
Máté: Architektúrák 11. előadás 10
SIB (5.27. ábra): jó, de megéri?
← EBP
Egyéb lokális
változók
a[0] ← EBP+8
a[1] ← EBP+12
a[2] ← EBP+16
Ver
em k
eret
Legyen i az EAX regiszterben
SIB módú hivatkozás:M[4*EAX+EBP+8]
2 3 3
skála index bázis
bit
Máté: Architektúrák 11. előadás 11
UltraSPARC (5.14. ábra)
32 bites egyszerű utasítások.
Form. 2 5 6 5 1 8 5
1a m.k. cél m.k. forrás1 0 FP-OP forrás2 3 címes
1b m.k. cél m.k. forrás1 1 közvetlen konst. 2 címes
Aritmetikai utasítások: 1 cél és 2 forrás regiszter vagy 1 cél, 1 forrás regiszter és 1 közvetlen konstans.
LOAD, STORE (csak ezek használják a memóriát): a cím két regiszter összege vagy egy regiszter + 13 bites eltolás.
Processzorokat szinkronizáló utasítás.
Máté: Architektúrák 11. előadás 12
32 bites közvetlen adat megadása: SETHI – megad 22 bitet, a következő utasítás a maradék 10 bitet.
Form. 2 5 3 22
2 m.k. cél m.k. közvetlen konstans SETHI
Form. 2 1 4 3 22 (19)
3 m.k. A felt m.k. PC relatív cím UGRÁS
Az ugrások PC-relatívok, szót (4-gyel osztható bájt címet) címeznek. Jósláshoz 3 bitet elcsíptek. Az A bit az eltolás rést akadályozza meg bizonyos feltételek esetén.
3
Form. 2 30
4 m.k. PC relatív cím CALL
Eljárás hívás: 30 bites PC-relatív (szó) cím
Máté: Architektúrák 11. előadás 13
JVM (5.15. ábra)Változó hosszúságú egyszerű utasítások, 8 kivételével mind 1,
2 vagy 3 típusú, a legtöbb 1 bájtos. Külön utasítások a kis indexű lokális változók betöltésére, kis konstansok verembe töltésére:ILOAD_1 ~ ILOAD 1 ~ WIDE ILOAD 1
Címzési módok: közvetlen és index címzési mód
8 8 8 8 8
1 Műv.kód
2 Műv.kód bájt index, konstans vagy típus
3 Műv.kód short index, konstans, eltolás
Máté: Architektúrák 11. előadás 14
A további 8 utasítás szinte mind külön csoportot alkot. Ezekkel nem foglalkozunk részletesen.
8 8 8 8 8
4 Műv.kód index konstans
5 Műv.kód index dimenzió
6 Műv.kód index #param. 0
7 Műv.kód index konstans
8 Műv.kód 32 bites ugrási eltolás
9 Műv.kód változó hosszúságú
Máté: Architektúrák 11. előadás 15
Összefoglaló: 5.28. ábra.
Címzési mód Pentium II UltraSPARC II JVMKözvetlen X X XDirekt XRegiszter X XRegiszter indirekt XIndex X X XBázis-index X XVerem X
A bonyolult címzési módok tömörebb programokat tesznek lehetővé, de nehezítik a párhuzamosítást. Ha a párosítás nem történhet szabadon, akkor jobb, ha csak egy választási lehetőség van (egyszerűbb hatékony fordítóprogramot írni).
Máté: Architektúrák 11. előadás 16
Utasítástípusok • Adatmozgató (másoló) utasítások.• Diadikus: +, -, *, /, AND, OR, NOT, XOR, … • Monadikus: léptetés, forgatás, CLR, INC, NEG, …• Összehasonlítás, feltételes elágazás: Z, O, C, …• Eljáráshívás. Visszatérési cím:
rögzített helyre (rossz) - az eljárás első szavába (jobb) - verembe (rekurzív eljárásokhoz is jó).
• Ciklusszervezés (5.29. ábra): számláló • Input/output (5.30-32. ábra):
- programozott I/O: tevékeny várakozás, 5.31. ábra- megszakítás vezérelt I/O- DMA I/O (5.32. ábra): cikluslopás
Máté: Architektúrák 11. előadás 17
Ciklusszervezés (5.29. ábra)
i=1;L1: első utasítás
.
.
.utolsó utasítási = i + 1;if(i ≤ n) goto L1;
Végfeltételes ismétlés
i=1;L1: if(i > n) goto L2; első utasítás
.
.
.utolsó utasítási = i + 1;goto L1;
L2: …
Kezdő feltételes ismétlés
Máté: Architektúrák 11. előadás 18
Feltételes végrehajtás (5.49-50. ábra):
CMOVZ R2, R3, R1 csak akkor hajtja végre R2 = R3 -t , ha R1= 0.
if(R1 == 0) R2 = R3;
CMP R1, 0 BNE L1 MOV R2, R3L1: …
CMOVZ R2, R3, R1
if(R1 == 0) { R2 = R3; R4 = R5;} else { R6 = R7; R8 = R9;}
CMP R1, 0 BNE L1 MOV R2, R3 MOV R4, R5 BR L2L1: MOV R6, R7 MOV R8, R9L2: …
CMOVZ R2, R3, R1 CMOVZ R4, R5, R1 CMOVN R6, R7, R1 CMOVN R8, R9, R1
Máté: Architektúrák 11. előadás 19
Predikáció, IA – 64 (5. 51. ábra)64 predikátum regiszter: 1 bites regiszterek, többnyire
párban. CMPEQ R2, R3, P4 beállítja P4-et és törli P5-öt, ha R2 = R3, különben P5-öt állítja be és P4-et törli.
if(R1 == R2) R3 = R4 + R5;else R6 = R4 – R5;
CMP R1, R2 BNE L1 MOV R3, R4 ADD R3, R5 BR L2L1: MOV R6, R4 SUB R6, R5L2: …
CMPEQ R1, R2, P4 <P4>ADD R3, R4, R5 <P5>SUB R6, R4, R5
Máté: Architektúrák 11. előadás 20
A Pentium II utasításai• Egész utasítások legnagyobb része: 5.33. ábra.• Egyéb utasítások (pl. lebegőpontosak).
Az UltraSPARC utasításaiÖsszes egész utasítás: 5.34. ábra. A utasításnévben CC: beállítja a feltételkódot. Szimulált utasítások (5.35. ábra), pl.: MOV SRC,DST ≡ OR SRC,G0,DST
A picoJava II utasításai (5.36. ábra)Típusoltság biztonsági okokból. I (int: 32), L (long: 64) F (float: 32) D (double: 64 bit)
Máté: Architektúrák 11. előadás 21
Vezérlési folyamat
Szekvenciális vezérlés: Az utasítások abban a sorrendben kerülnek végrehajtásra, ahogy a memóriában elhelyezkednek.
Elágazás: 5.37. ábra.
idő
szekvenciális vezérlés
elágazás
prog
ram
szá
mlá
ló
Máté: Architektúrák 11. előadás 22
Eljárás (5.42. ábra): Az eljáráshívás úgy tekinthető, mint egy magasabb szinten definiált utasítás végrehajtása: elég, ha azt tudjuk, mit csinál az eljárás, nem lényeges, hogy hogyan.
Rekurzív eljárás: önmagát közvetlenül vagy közvetve hívó eljárás.
hívó eljárás hívott
eljárásfőprogram
… …
Máté: Architektúrák 11. előadás 23
Hanoi tornyai (5.38-40. ábra) Rekurzív eljárás, amely n korongot mozgat i-ről j-re:
public void towers (int n, int i, int j) { int k;
if(n==1) // System.out.println(”korong: ”+i+”->”+j”re”); System.out.println(”korong: ”+i+”->”+j);
else { k=6-i-j; towers(n-1, i, k); towers(1, i, j); towers(n-1, k, j); }}
Máté: Architektúrák 11. előadás 24
5.39-40. ábra 5.41. ábra
Hívások: A verem tartalma az eljárásban:towers(3,1,3) 3, 1, 3, V, F, k
towers(2,1,2) 3, 1, 3, V, F, 2, 2, 1, 2, V, F, k towers(1,1,3) 1 -> 3 3, 1, 3, V, F, 2, 2, 1, 2, V, F, 3, 1, 1, 3, V, F, k
visszatérés után 3, 1, 3, V, F, 2, 2, 1, 2, V, F, 3
towers(1,1,2) 1 -> 2 3, 1, 3, V, F, 2, 2, 1, 2, V, F, 3, 1, 1, 2, V, F, k
towers(1,3,2) 3 -> 2
towers(1,1,3)1 -> 3 V: visszatérési cím
towers(2,2,3) F: régi FP
towers(1,2,1) 2 -> 1
towers(1,2,3) 2 -> 3
towers(1,1,3) 1 -> 3
Máté: Architektúrák 11. előadás 25
Rekurzív eljárások megvalósításához veremre van szükség. Minden hívás esetén az eljárás paramétereit a verembe kell tenni, és ott kell elhelyezni a lokális változókat is!
Eljárás prológus: a régi verem keret mutató (FP) elmentése, új verem keret mutató megadása és a verem mutató (SP) növelése, hogy legyen hely a veremben a lokális változók számára.
Eljárás epilógus: visszatéréskor a verem kitakarítása.
Máté: Architektúrák 11. előadás 26
5.45. ábra: Pentium II program (~5.45. ábra).
5.46. ábra: UltraSPARC II program, eltolás rés!
5.47. ábra: JVM program, kb. jó, csak az angolról fordítás miatt az elejét módosítani kellett volna:
”Move disk from” i ”to” j
”Korong mozgatása” i ”-ről” j ”-re””Korong mozgatása” i ”->” j
Máté: Architektúrák 11. előadás 27
Vezérlési folyamat• Szekvenciális vezérlés
(5.37. ábra)• Elágazás. • Eljárás: 5.42. ábra. • Megszakítások. • Csapdák.• Korutinok: 5.43. ábra.
Párhuzamos feldolgozás szimulálására alkalmas egy CPU-s gépen.
A B
főprogram
… …
goto helyett jobb a ciklus vagy az eljárás alkalmazása!
korutinok
Máté: Architektúrák 11. előadás 28
Assembler
egy sor olvasása
a beolvasott sor fordítása
a lefordított utasítás az object file-ba
a sor és a lefordított utasítás a lista file-ba
előre hivatkozási probléma
Máté: Architektúrák 11. előadás 29
Megoldási lehetőség:
Az assembler kétszer olvassa a program szövegét (két menet). Az első menet célja összegyűjteni, táblázatba foglalni a szimbólum definíciókat, így a második menet idején már minden (a programban definiált) szimbólum ismert, tehát a második menetben már nem jelentkezik az előre hivatkozási probléma.
Valahogy megpróbálni a fordítást egy menetben. Késleltetni a fordítást ott, ahol előre hivatkozás van, pl. táblázatba tenni a még le nem fordított részeket. A menet végén már minden szimbólum ismert, ekkor feldolgozni a táblázatot. Esetleg minden szimbólum definíciót követően azonnal feldolgozni a szimbólumra vonatkozó korábbi hivatkozásokat.
Máté: Architektúrák 11. előadás 30
Mindkét esetben szükség van szimbólum tábla készítésére, de az utóbbi megoldásban a még le nem fordított utasítások miatt is szükség van táblázatra. További nehézséget jelent, hogy nem sorban készülnek el a tárgy kód (object code) utasításai, ezért ezeket pl. listába kell helyezni, majd rendezni a listát, és csak ezután történhet meg az object és a lista file elkészítése.
Manapság a legtöbb assembler két menetben működik.
Máté: Architektúrák 11. előadás 31
Két menetes assembler, első menet
Legfontosabb feladata a szimbólum tábla felépítése.
A szimbólum tábla:
A szimbólum neve
értéke egyéb információk
. . . . . . . . .
érték: – címke címe, – változó címe, – szimbolikus konstans értéke.
Máté: Architektúrák 11. előadás 32
egyéb információk:– típus,– méret,– szegmens neve, amelyben a szimbólum
definiálva van,– relokációs flag,– . . .
A szimbólum neve
értéke egyéb információk
. . . . . . . . .
Máté: Architektúrák 11. előadás 33
Literál:
pl. az IBM 370-es gépcsaládon:
L 14,=F’5’ ; Load register 14 az 5-ös
; Full Word konstanssal
Többek között a literálok gyakori használata vezetett a közvetlen operandus megadás kialakulásához és elterjedéséhez.
Máté: Architektúrák 11. előadás 34
Egy lehetséges operációs kód tábla részlete:
mnemonic op1 op2 kód hossz osztály
AAA - - 37 1 6
ADD reg8 reg8 02 2 10
ADD reg16 reg16 03 2 11
... ... ... ... ... ...
AND reg8 reg8 22 2 10
AND reg16 reg16 23 2 11
... ... ... ... ... ...
Máté: Architektúrák 11. előadás 35
procedure ElsőMenet; 1. menet, vázlatconst méret = 8; EndUtasítás = 99;var HelySzámláló, osztály, hossz, kód:
integer; VanInput: boolean; szimbólum, literál, mnemo:
array[1..méret] of char; sor: array[1..80] of char;begin Előkészítés; TáblákIinicializálása; HelySzámláló := 0; VanInput = true;
Máté: Architektúrák 11. előadás 36
while VanInput do begin sorok feldolgozása SorOlvasás(sor); Megőrzés(sor); if NemKomment(sor) then begin nem kommentár
SzimbólumDef(sor, szimbólum); if szimbólum[1] ’ ’ then
szimbólum definíció
ÚjSzimbólum(sor,szimbólum, HelySzámláló); LiterálKeresés(sor, literál); if literál[1] ’ ’ then ÚjLiterál(literál); hossz := 0; OpKódKeresés(sor, mnemo); OpKódTáblában(sor, mnemo, osztály, kód);
Máté: Architektúrák 11. előadás 37
if osztály 0 then nem létező utasítás PszeudoTáblában(sor,mnemo, osztály, kód);
if osztály 0 then HibásOpKód; hossz := típus(osztály); utasítás hossza HelySzámláló := HelySzámláló + hossz; if osztály = EndUtasítás then begin VanInput := false; LiterálTáblaRendezés; DuplikátumokKiszűrése; Lezárások; end;{if osztály = } end; nem kommentár end; while VanInput end; 1. menet
Máté: Architektúrák 11. előadás 38
OpKódKeresés eljárás triviális, mindössze az a feladata, hogy a sor-ban az első szóköz után a látható karaktereket a következő szóközig terjedően mnemo-ba másolja.
OpKódTáblában eljárás meglehetősen bonyolult, az operandusok elemzésével kell megállapítania, hogy az utasítás melyik osztály-ba tartozik. Látszólag feleslegesen határozza meg a kód-ot, de a többi feladata mellett ez már nagyon egyszerű, és így ez a függvény a második menetben változtatás nélkül alkalmazható.
Az OpKódTáblában eljárás nem alkalmas pl. az ORG pszeudo utasítás feldolgozására! Nem ismeri a HelySzámláló-t.
A SorOlvasás(sor); Megőrzés(sor); arra utal, hogy a második menetben olvashatjuk az első menet eredményét. Pl. az első menet folyamán szokás elvégezni az INCLUDE utasításokhoz, a makró definíciókhoz és makró hívásokhoz tartozó feladatokat.
Máté: Architektúrák 11. előadás 39
Az Előkészítés valami ilyesmi lehet: Push(NIL); sehova mutató pointer a verembe InputFileNyitás; p = ProgramSzövegKezdete;...
A továbbiak során p mutatja a következő feldolgozandó karaktert.
A SorOlvasás eljárás:begin while p = EOF do begin Pop(p); if p = NIL then ENDHiba; nincs END utasítás end; EgySorOlvasás(sor);end;
Máté: Architektúrák 11. előadás 40
Ha sor történetesen INCLUDE utasítás, akkor az EgySorOlvasás eljárás ezt a következőképpen dolgozhatja fel:
Push(p);
IncludeFileNyitás;
p = IncludeSzövegKezdete;
Máté: Architektúrák 11. előadás 41
procedure MásodikMenet; 2. menet, vázlatconst méret = 8; EndUtasítás = 99;var HelySzámláló, osztály, hossz, kód: integer; VanInput: boolean; szimbólum, mnemo: array[1..méret] of char; sor: array[1..80] of char; operandusok[1..3] of integer; op1, op2, címzési mód byte
object: [1..10] of byte;begin Előkészítés2; {nincs TáblákIinicializálása;} HelySzámláló := 0; VanInput = true;
Máté: Architektúrák 11. előadás 42
while VanInput do begin sorok feldolgozása SorOlvasás2(sor); {nincs Megőrzés(sor);} if NemKomment(sor) then begin nem kommentár
SzimbólumDef(sor, szimbólum); if szimbólum[1] ’ ’ then
szimbólum definíció
SzimbólumEllenőrzés (sor, szimbólum, HelySzámláló); {nincs LiterálKeresés(sor, literál);
hossz := 0; OpKódKeresés(sor, mnemo); OpKódTáblában(sor, mnemo, osztály, kód);
Máté: Architektúrák 11. előadás 43
if osztály 0 then nem létező utasítás PszeudoTáblában(sor,mnemo, osztály, kód);
if osztály 0 then HibásOpKód2; Most készül a lista!
case osztály of
0: hossz := fordít0(sor, operandusok);
1: hossz := fordít1(sor, operandusok);
...
end;
Összeállítás (kód, osztály, operandusok, object);
ObjectKiírás(object);
Listázás(HelySzámláló, object, sor);
HelySzámláló := HelySzámláló + hossz;
Máté: Architektúrák 11. előadás 44
if osztály = EndUtasítás then begin
VanInput := false;
{nincs LiterálTáblaRendezés;
DuplikátumokKiszűrése;}
Lezárások2;
end;{if osztály = }
end; nem kommentár end; while VanInput end; 2. menet
Máté: Architektúrák 11. előadás 45
Összeállítás = assemble
Az assembler számos hibát ismerhet fel:• használt szimbólum nincs definiálva,• egy szimbólum többször van definiálva,• nem létező operációs kód,• nincs elegendő operandus,• túl sok operandus van,• hibás kifejezés (pl. 9 egy oktális számban),• illegális regiszter használat,• típus hiba,• nincs END utasítás,• . . .
Máté: Architektúrák 11. előadás 46
Számos olyan hibát azonban, melyet a magasabb szintű
nyelvek fordítói könnyen felismernek – vagy egyáltalán elő se
fordulhatnak – az assembler nem tud felderíteni:• az eljárás hívás paramétereinek típusa nem megfelelő,• a regiszter mentések és helyreállítások nem állnak
„párban”,• hibás vagy hiányzik a paraméter vagy a lokális változó
terület ürítése a veremből,• a hívás és a hívott eljárás helyén érvényes ASSUME-ok
ellentmondásosak (nem feltétlenül hiba, de az lehet),• . . .
Máté: Architektúrák 11. előadás 47
Az object file nemcsak a lefordított utasításokat tartalmazza, hanem további – a szerkesztőnek szóló – információt is.
Máté: Architektúrák 11. előadás 48
Makró generátorFeladata a makró definíciók megjegyzése (pl. makró
táblába helyezése) és a makró hívások kifejtése. Általában az assembler első menetében működik.
Makró definíciók felismeréseAmennyiben az assembler a forrás szöveg olvasása
közben makró definíciót talál (ezt könnyű felismerni a műveleti kód részen lévő MACRO szó alapján), akkor a makró definíció teljes szövegét – az ENDM műveleti kódot tartalmazó sor végéig – elhelyezi a makró táblában. A felismerést és a tárolást a SorOlvasás vagy a PszeudoTáblában eljárás végezheti.
Máté: Architektúrák 11. előadás 49
Makró hívások kifejtése
Az
OpKódTáblában(sor,mnemo, osztály, kód); if osztály 0 then nem létező utasítás
PszeudoTáblában(sor, mnemo, osztály, kód);
programrész után be kell szúrni az
if osztály 0 then
MakróTáblában(sor, mnemo, osztály, kód);
sorokat. A eljárás feladata a makró hívás felismerése és a makró helyettesítés is. A kifejtett makró egy pufferbe kerül, a puffer tartalma az INCLUDE utasításnál látottakhoz hasonlóan illeszthető a program szövegébe.
Máté: Architektúrák 11. előadás 50
A makró kifejtés egy ciklikusban:
EgySzóOlvasásaAMakróTörzsből;
if FormálisParaméter then
AMegfelelőAktuálisParaméterÁtmásolása;
else
ASzóÁtmásolása;
ElválasztójelFeldolgozása;
Az ElválasztójelFeldolgozása legtöbbször az elválasztójel másolását jelenti, de a makró definícióban különleges szerepet játszó karakterek esetén ettől eltérő – magától értetődő – speciális feladatot kell végrehajtani.
Máté: Architektúrák 11. előadás 51
A LOCAL utasítás feldolgozásához a makró generátor egy 0 kezdeti értékű változót használ. Makró híváskor a LOCAL utasításban szereplő szimbólumot, és az összes előfordulását a makró törzsben ??xxxx alakú azonosítóval helyettesíti, ahol xxxx a változó aktuális értéke hexadecimális számrendszerben. A változó értékét minden a LOCAL utasításban szereplő szimbólum feldolgozása után 1–gyel növeli.
Legegyszerűbb, ha a lokális szimbólumot formális paraméternek tekinti, és a generált ??xxxx alakú azonosítót a megfelelő argumentumnak.
Máté: Architektúrák 11. előadás 52
FeladatokAz ISA szint tervezési szempontjai.Milyen utasítás formákat ismer?Hogy viszonyulhat az utasítás hossza a szóhosszhoz?Mit jelent a műveleti kód kiterjesztése?Milyen címzési módszereket ismer?Mit jelent a postfix címzés?Hogy alakítható át egy infix formula postfix-é?Hogy értékelhető ki egy postfix formula?Milyen utasítás formái vannak a Pentium II-nek?Mi a SIB szerepe?Milyen utasítás formái voltak a SPARC gépnek?Milyen utasítás formái vannak a JVM-nek?
Máté: Architektúrák 11. előadás 53
FeladatokMi az orthogonalitási elv?Milyen utasítás formái lehetnek egy 3 címes gépnek?Milyen utasítás formái lehetnek egy 2 címes gépnek?Milyen utasítástípusokat ismer?Mi a különbség az UltraSPARC II ADD, ADDC,
ADDCC és ADDCCC utasításai között?Mi a szekvenciális vezérlés?Mi az eljárás?Mi a rekurzív eljárás?Mi az eljárás prológus?Mi az eljárás epilógus?Mi az eltolási rés?Mit nevezünk korutinnak (coroutine)?
Máté: Architektúrák 11. előadás 54
FeladatokMi az előre hivatkozási probléma?Milyen megoldásokat ismer az előre hivatkozási
problémára?Mi a szimbólum tábla?Mi a literál?Mi az OpKódKeresés feladata?Mi az OpKódTáblában feladata?Hogy nézhet ki az Előkészítés eljárás?Hogy nézhet ki az SorOlvasás eljárás?Hogy dolgozható fel az INCLUDE utasítás?Milyen hibákat ismerhet föl az assembler?Milyen hibákat nem képes fölismerni az assembler?
Máté: Architektúrák 11. előadás 55
FeladatokMi a makró generátor feladata?Hogy ismerhetők föl a makró definíciók?Mi a makró generátor feladata makró definíció esetén?Hogy ismerhetők föl a makró hívások?Hogy illeszthető a program szövegéhez a makró
kifejtés eredménye?Hogy működhet a makró kifejtés?Hogy történhet a LOCAL utasítás feldolgozása?