510 likes | 611 Views
Szegmens, szegmens csoport sz_név SEGMENT aling_type combine_type ’osztály’ . . . szegmens sz_név ENDS sz_név a szegmens (szelet) neve. A fordító az azonos nevű szegmens szeleteket úgy tekinti, mintha folyamatosan, egyetlen szegmens szeletbe írtuk volna.
E N D
Szegmens, szegmens csoport sz_névSEGMENTaling_type combine_type ’osztály’ . . . szegmens sz_névENDS sz_név a szegmens (szelet) neve. A fordító az azonos nevű szegmens szeleteket úgy tekinti, mintha folyamatosan, egyetlen szegmens szeletbe írtuk volna. Az azonos nevű szegmens szeletek paraméterei egy modulon belül nem változhatnak. A szerkesztő egy memória szegmensbe szerkeszti az azonos nevű szegmenseket. A szegmens osztály legtöbbször CODE, DATA, CONSTANT, STACK, MEMORY. 10. előadás
aling_type(illesztés típusa): a szerkesztőnek szóló információ. Azt mondja meg, hogy a szegmens szelet milyen címen kezdődjön: BYTE 1-gyel, WORD 2-vel, DWORD 4-gyel, PARA 16-tal, PAGE 256-tal osztható címen. Akkor van jelentősége, ha a szegmens szelet egy másik modulban lévő ugyanilyen nevű szegmens szelet folytatása. 10. előadás
combine_type(kombinációs típus): a szerkesztőnek szóló üzenet. Lehet: PUBLIC: (alapértelmezés) az azonos nevű szegmens szeletek egymás folytatásaként szerkesztendők. COMMON: az azonos nevű szegmens szeletek azonos címre szerkesztendők. Az így keletkező terület hossza megegyezik a leghosszabb szegmens szelet hosszával. A COMMON hatása csak különböző modulokban megírt szegmens szeletekre érvényesül. MEMORY: a szerkesztő ezt a szegmenst az összes többi szegmens fölé fogja szerkeszteni, mindig a program legmagasabb címre kerülő része (a Microsoft LINK programja ezt nem támogatja). 10. előadás
STACK: a stack részeként szerkesztendő a szegmens szelet, egyebekben megegyezik a PUBLIC-kal. Amennyiben van STACK kombinációs típusú szegmens a programban, akkor SS és SP úgy inicializálódik, hogy SS az utolsó STACK kombinációs típusú szegmensre mutat, SP értéke pedig ennek a szegmensnek a hossza. AT kif: a kif sorszámú paragrafusra kerül a szegmens szelet. Alkalmas lehet pl. a port-okhoz kapcsolódó memória címek szimbolikus definiálására. 10. előadás
Az ASSUME utasítás az assembler-t informálja arról, hogy a címzésekhez a szegmens regisztereket milyen tartalommal használhatja, más szóval, hogy melyik szegmens regiszter melyik szegmensnek a szegmens címét tartalmazza (melyik szegmensre mutat): ASSUME sz_reg1:sz_név1[, sz_reg2:sz_név2 ...] 10. előadás
ASSUME sz_reg1:sz_név1[, sz_reg2:sz_név2 ...] Az ASSUME utasításban felsorolt szegmenseket „aktív”-aknak nevezzük. Az ASSUME utasítás nem gondoskodik a szegmens regiszterek megfelelő tartalommal történő feltöltéséről! Ez a programozó feladata! Az ASSUME utasítás hatása egy-egy szegmens regiszterre vonatkozóan mindaddig érvényes, amíg egy másik ASSUME utasítással mást nem mondunk az illető regiszterről. 10. előadás
A GROUP utasítással csoportosíthatjuk a szegmenseinket: G_nev GROUP S_név1[, S_név2...] Az egy csoportba sorolt szegmenseket a szerkesztő a memória egy szegmensébe helyezi. Ha ilyenkor az ASSUME utasításban a csoport nevét adjuk meg, és ennek megfelelően állítjuk be a bázis regisztert, akkor a csoport minden szegmensének minden elemére tudunk hivatkozni. Ilyenkor egy változó OFFSET-je és effektív címe (EA) nem feltétlenül egyezik meg. 10. előadás
GRP GROUP ADAT1,ADAT2 ADAT1 SEGMENT para public ’data’ A dw 1111h ... ADAT1 ENDS ADAT2 SEGMENT para public ’data’ W dw 2222h ... ADAT2 ENDS 10. előadás
code segment para public ’code’ ASSUME CS:code, DS:GRP ASSUME SS:stack, ES:nothing ... MOV SI,OFFSET W ; SI W offset-je:0 ; az ADAT2 szegmens elejétől mért távolság MOV AX,[SI] ; AX 1111h, ; de!!! LEA SI, W ; SI effektív címe: ; a GRP szegmens csoport elejétől mért távolság MOV AX,[SI]; AX 2222h. 10. előadás
Globális szimbólumok A több modulból is elérhető szimbólumok. A globális szimbólumok teszik lehetővé, hogy a programjainkat modulokra bontva készítsük el. Az egyes modulok közötti kapcsolatot a globális szimbólumok jelentik. 10. előadás
Globális szimbólumok Ha egy szimbólumot globálissá kívánunk tenni, akkor PUBLIC-ká kell nyilvánítanunk annak a modulnak az elején, amelyben a szimbólumot definiáljuk: PUBLIC sz1[, sz2...] Azokban a modulokban, amelyekben más modulban definiált szimbólumokat is használni szeretnénk, az ilyen szimbólumokat EXTRN-né kell nyilvánítanunk: EXTRN sz1:típus1[, sz2:típus2...] 10. előadás
INCLUDE utasítás INCLUDE File_Specifikáció hatására az assembler az INCLUDE utasítás helyére bemásolja az utasítás paraméterében specifikált file szövegét. Az INCLUDE-olt file-ok is tartalmazhatnak INCLUDE utasítást. 10. előadás
Ha makró definícióinkat a MyMacros.i file-ba kívánjuk összegyűjteni, akkor célszerű ezt a file-t így elkészítenünk: IFNDEF MyMacros_i MyMacros_i = 1 ... ;; makró, struktúra definíciók ... ;; EXTRN szimbólumok ENDIF Ekkor a MyMacros.i file legfeljebb egyszer kerül bemásolásra, mert az összes további esetben a feltételes fordítás feltétele már nem teljesül. A .-ot _-sal helyettesítettük! A legtöbb include file-ban ezt a konvenciót alkalmazzák. 10. előadás
Lista vezérlési utasítások TITLE cím A fordítás során keletkező lista minden oldalán megjelenik ez a cím. Egy modulon belül csak egyszer alkalmazható. SUBTITLE alcím Többször is előfordulhat egy modulon belül. A program lista minden oldalán – a cím alatt – megjelenik az utolsó SUBTITLE utasításban megadott alcím. 10. előadás
PAGE [op1][,op2] Paraméter nélkül lapdobást jelent. Ha egyetlen paramétere van és az egy + jel, akkor a fejezet sorszámát növeli eggyel, és a lapszámot 1-re állítja. Ettől eltérő esetekben op1 az egy lapra írható sorok (10op1255), op2 az egy sorba írható karakterek számát jelenti (60op2132). Ha valamelyik paramétert nem adjuk meg, akkor természetesen nem változik a korábban beállított értéke. A sorok száma kezdetben 66, a karaktereké 80. 10. előadás
A TITLE, a SUBTITLE és a PAGE egy elkészült programcsoport végső papír-dokumentációjának jól olvashatóságát segíti. A programfejlesztés során ritkán készítünk program listákat. NAME név A modul nevét definiálhatjuk vele. A szerkesztő ezt a nevet fogja használni. Ha nem szerepel NAME utasítás a modulban, akkor a TITLE utasítással megadott cím a modul neve. Ha ez sincs, akkor a file nevének első 6 karaktere lesz a modul neve. 10. előadás
COMMENT határoló_jel szöveg határoló_jel Segítségével több soros kommentárokat írhatunk. Az assembler a COMMENT utáni első látható karaktert tekinti határoló_jel-nek, és ennek a jelnek az újabb előfordulásáig minden kommentár. Nyilvánvaló, hogy a belsejében nem szerepelhet határoló_jel. %OUT szöveg Amikor ehhez az utasításhoz ér a fordítóprogram, akkor a paraméterként megadott szöveg-et kiírja a képernyőre. .RADIX számrendszer_alapja Ha programban egy szám nem tartalmaz számrendszer jelölést, akkor az illető számot ebben a számrendszerben kell érteni (alapértelmezésben decimális). 10. előadás
.LIST Engedélyezi a forrás- és tárgykódú sorok bekerülését a lista file-ba (alapértelmezés). .XLIST Tiltja a forrás- és tárgykódú sorok bekerülését a lista file-ba. Jól használható arra, hogy INCLUDE előtt tiltsuk a listázást, utána .LIST -el újra engedélyezzük, és ezzel az INCLUDE file-ok többszöri listázását elkerüljük. .LFCOND Minden feltételes blokk kerüljön listára. .SFCOND Csak a teljesülő feltételes blokkok kerüljenek listára (alapértelmezés). .TFCOND Vált a két előző listázási mód között. 10. előadás
.CREF Készüljön kereszthivatkozási (cross-reference) tábla (alapértelmezés). Ez a tábla azt a célt szolgálja, hogy könnyen megtaláljuk az egyes változókra történő hivatkozásokat a programban. .XCREF Ne készüljön kereszthivatkozási tábla. .LALL Kerüljön listára a makró hívások kifejtése. .SALL Ne kerüljön listára a makró hívások kifejtése. .XALL A makró hívások kifejtéséből csak a kódot generáló rész kerüljön listára (alapértelmezés). 10. előadás
END kifejezés A modul végét jelzi, kifejezés a program indítási címe. Ha a programunk több modulból áll, akkor természetesen csak egy modul végén adhatunk meg kezdő címet. 10. előadás
Utasítások szintje (ISA) Amit a fordító program készítőjének tudnia kell: memóriamodell, regiszterek, adattípusok, utasítások. A hardver és szoftver között helyezkedik el, 5.1 ábra. FORTRAN program C program Fordítás szoftver ISA szint hardver ISA szint végrehajtása microprogram vagy hardver által Hardver Általában a mikro architektúra nem tartozik hozzá. 10. előadás
Utasítások szintje (ISA) A jóság két kritériuma: • hatékony hardver megvalósítási lehetőség, • jó médium a fordítóknak. Továbbfejlesztéseknél ügyelni kell a kompatibilitásra! Nyilvános definíció: van: SPARC, JVM (tervezők); nincs: Pentium II (gyártók). kernelmód (user) felhasználói mód 10. előadás
Memória modellek ASCII kód 7 bit+paritás → Byte (bájt) Szó: 4 vagy 8 byte. Igazítás (alignment), 5.2. ábra: hatékonyabb, de probléma a kompatibilitás (a Pentium II-nek két ciklusra is szüksége lehet egy szó beolvasásához). Nem igazított 8 bájtos szó a 12-es címtől 8 bájtos szó 8 határra igazítva Néha külön memória az adatoknak és az utasításoknak (nem ugyanaz, mint az osztott gyorsítótár!). 10. előadás
Memória modellek Memória szemantika:STOREA -t közvetlenül követő LOAD A mit ad vissza? A memória műveletek végrehajtása: • kötött sorrendben, • definiálatlan sorrendben (ez a trend, mert hardver szinten egyszerűbb és gyorsabb). A hardver segítséget nyújthat: • SYNC utasítás: befejeztet minden megkezdett memória műveletet, • függőség esetén a hardver vár. 10. előadás
Regiszterek ISA-szintena mikroszint nem minden regisztere látszik(TOS, MAR), de van közösis (PC, SP). Speciális regiszterek:PC, SP, … Általános célú regiszterek:a gyakran használt adatok gyors elérésére. Jó, ha szimmetrikusak: fordítók, konvenciók. RISC gépen általában legalább 32 általános célú. Kernelmódban továbbiak: gyorsítótár vezérlés, memória védelem, … PSW (Program Status Word): eredmény negatív, nulla, ... mód, prioritásszint, megszakítás-állapot, ... 10. előadás
Utasításkészlet LOAD, STORE, MOVE, aritmetikai, logikai, feltétlen, feltételes elágazó utasítások, … 10. előadás
Pentium II Nagyon sok előd (kompatibilitás!), a fontosabbak: • 4004: 4 bites, • 8086, 8088: 16bites, 8 bites adat sín. • 80286: 24 bites (nem lineáris) címtartomány (16K darab 64 KB-os szegmens). • 80386:IA-32 architektúra, az Intel első 32 bites gépe, lényegében az összes későbbi is ezt használja. • Pentium II –től MMX utasítások. 10. előadás
A Pentium IIüzemmódjai real (valós): az összes 8088 utáni fejlesztést kikapcsolja (valódi 8088-ként viselkedik). Hibánál a gép egyszerűen összeomlik, lefagy. virtuális 8086: a 8088-as programok védett módban futnak (ha WINDOWS-ból indítjuk az MS-DOS-t, és abban hiba történik, akkor nem fagy le, hanem visszaadja a vezérlést a WINDOWS-nak). védett: valódi Pentium II. 4 védelmi szint (PSW): 0: kernelmód (operációs r.), 1, 2: ritkán használt, 3: felhasználói mód. 10. előadás
Memóriaszervezés: • 16Kdb szegmens lehetséges, de a WINDOWS-ok és UNIX is csak 1 szegmenst támogatnak, és ennek is egy részét az operációs rendszer foglalja el, • minden szegmensen belül a címtartomány: 0 - 232-1 • Little Endian tárolási mód: az alacsonyabb címen van az alacsonyabb helyértékű bájt. 10. előadás
32 16 AH BH CH DH CL AL BL DL 8 AX BX CX DX 8 Accumulator Base index Count Data EAX EBX ECX EDX Regiszterek (5.3. ábra): • (majdnem) általános regiszterek: Ezek 8 és 16 bites részei önálló regiszterként használhatók. 10. előadás
Regiszterek (5.3. ábra): • ESI, EDI (mutatók tárolására, szöveg kezelésre), • EBP (keretmutató, verem kezelésre), • ESP (verem mutató), • EIP (utasítás számláló), • EFLAGS (PSW), • CS, …, GS (16 bites regiszterek. A kompatibilitást biztosítják a régebbi gépekkel. Mivel a Windows, Unix csak egy címtartományt használ, ezekre csak a visszafelé kompatibilitás miatt van szükség). 10. előadás
UltraSPARC II SPARC 1987 még 32, a Version 9 már 64bitesarchitektúra, az UltraSPARC ezen alapul. Memóriaszervezés: 64 bites (lineáris) címtartomány (jelenleg maximum 44 bit használható). Big endian, de little endian is beállítható. Regiszterek: • 32 általános (5.4. ábra) 64 bites,a használatuk részben konvención, részben a hardveren alapul), • 32 lebegőpontos (32 vagy 64 bites, de lehetséges két regiszterben egy 128 bites számot tárolni). 10. előadás
Általános regiszterek • R0-R7 (G0-G7) Globális változók: minden eljárás használhatja, G0 huzalozott 0, minden tárolás eredménytelen. • R8-R15 (O0-O7,): Kimenő paraméterek,de R14 =SP: verem mutatóO7 csak ideiglenes tárolásra használható. • R16-R23 (L0-L7) Lokális regiszterek • R24-R31 (I0-I7) Bejövő paraméterek, de R30 = FP az aktuális veremkeret mutatója, R31: visszatérési cím. 10. előadás
Globális Globális CWP = 6 CWP = 7 Kimenő Kimenő Átlapolás SP R14=SP R30=FP Lokális Lokális Korábbi Bemenő Bemenő Korábbi R30=FP CWP (Current WindowPointer, 5.5. ábra) mutatjaaz aktuális regiszterablakot (több regiszter készlet létezik, de mindig csak egy látszik). Ha kifogya regiszter készlet, memóriába mentés, … 10. előadás
Load/store architektúra:csak ezek az utasítások fordulhatnak a memóriához.A többi utasítás operandusa regiszterben vagy az utasításban van. Az eredmény is regiszterbe kerül. 10. előadás
Konstansok, mutatók. Tartalma a program betöltésekor alakul ki, ISA utasítások nem írhatják felül Itt van a program. PC bájtot címez a metódus területen belül. JVM (Java Virtual Machine) Memóriamodell (4.10. ábra): konstans, lokális, operandus ésmetódus terület. Minden cím CPP,LV, SP vagy PCrelatív címzésű. 10. előadás
JVM (Java Virtual Machine) Biztonság: Nincs pointer.Az internetről letöltött bináris programok nemtudnak kárt okozni. Maximum 64KB-os ill. 16 KW-ös területek, de minden metódusnak saját 64KB-os lokális területe van. Nagyobb területek, vagy dinamikus struktúrák helyfoglalására:halom (heap), new, release. Más, mint a verem!Ha ez elfogy a kiosztható terület: szemétgyűjtő (garbage collector). Nincs általános regiszter – sok a memóriához fordulás (PicoJava II: legfeljebb 16+16 KB cache). 10. előadás
Címzési módszerek 3, 2, 1, 0 címes utasítások. Címzési módok: • közvetlen operandus, • direkt címzés, • regiszter címzés • regiszter-indirekt címzés, • indexelt címzés, • bázisindex címzés, • verem címzés. 10. előadás
Verem címzés Fordított Lengyel Jelölés (Postfix Polish Notation - Lukasiewicz) Postfix jelölés: a kifejezéseket olyan formában adjuk meg, hogy az első operandus után a másodikat, majd ezután adjuk meg a műveleti jelet: infix: x + y, postfix: xy +. Előnyei: nem kell zárójel, sem precedencia szabályok, jól alkalmazható veremcímzés esetén. 10. előadás
A * ( B + C ) Dijkstra algoritmusa Infix jelölés konvertálása postfix-re (5.20, 21. ábra): • az infix elemek egy váltóhoz (switch) érkeznek - a változók és konstansok Kaliforniába mennek (), • a többi esetben a verem tetejétől függően (5.21. ábra): váltó • a kocsi Texas felé megy (1: ), • a verem teteje Kaliforniába megy (2: ), • a kocsi eltűnik a verem tetejével együtt (3: ), • vége az algoritmusnak (4: ), • hibás az infix formula (5: ?). 10. előadás
A * ( B + C ) váltó Minden változó és konstansok menjen Kaliforniába (), a többi esetben a döntési tábla szerint járjunk el (5.21. ábra): A verem teteje A döntési tábla tartalmazza a prioritási szabályokat. 10. előadás
▼ A*(B+C) A ▼ *(B+C) A ▼ (B+C) * A ▼ B+C) ( * AB ▼ +C) ( * A verem teteje 10. előadás
AB ▼ C) + ( * ABC ▼ ) + ( * ABC+▼ ) ( * A verem teteje ABC+▼ * ABC+*▼ 10. előadás
Fordított lengyel jelölésű formulák kiértékelése Pl. (5.23. ábra): (8 + 2 * 5)/(1 + 3 * 2 – 4) // infix8 2 5 * + 1 3 2 * + 4 – / // postfix Olvassuk a formulát balról jobbra! Ha a következő jel • operandus: rakjuk a verembe, • műveleti jel: hajtsuk végre a műveletet (a verem tetején van a jobb, alatta a bal operandus!). 10. előadás
(8 + 2 * 5)/(1 + 3 * 2 – 4) // infix 10. előadás
Feladatok Mi 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! Milyen paraméterei vannak a SEGMENT utasításnak? Milyen illesztés típus (aling_type) lehetséges? Milyen kombinációs típus (combine_type) lehetséges? Mit kell tudni az ASSUME utasításról? 10. előadás
Feladatok Hogy hozhatunk létre szegmens csoportot? Mi az előnye a szegmens csoport használatának? Mutasson példát arra, hogy egy változó OFFSET-je és effektív címe (EA) nem egyezik meg! Mi a szerepe a globális szimbólumoknak? Hogy definiálhatunk globális szimbólumot? Mi a PUBLIC utasítás hatása? Milyen paraméterei vannak a PUBLIC utasításnak? Mi az EXTENT utasítás hatása? Milyen paraméterei vannak az EXTENT utasításnak? Mi az INCLUDE utasítás hatása? Hogy akadályozható meg, hogy egy file-t többször INCLUDE-oljunk egy programban? 10. előadás
Feladatok Milyen lista vezérlési utasításokat ismer? Mi a TITLE utasítás hatása? Mi a SUBTITLE utasítás hatása? Mi a PAGE utasítás hatása? Hogyan paraméterezhető a PAGE utasítás? Hogy írhatunk több soros kommentárt a programba? Mi a %OUT utasítás hatása? Mi a .RADIX utasítás hatása? Mi a .LIST utasítás hatása? Mi a .XLIST utasítás hatása? 10. előadás
Feladatok Mi a .LFCOND utasítás hatása? Mi a .SFCOND utasítás hatása? Mi a .TFCOND utasítás hatása? Mi a .CREF utasítás hatása? Mi a .XCREF utasítás hatása? Mi a .LALL utasítás hatása? Mi a .SALL utasítás hatása? Mi a .XALL utasítás hatása? Mi a END utasítás hatása? 10. előadás
Feladatok Miért kitüntetett szint a gépi utasítások szintje (ISA)? Mikor jó egy gép ISA szintje? Mi a különbség a felhasználói (user) és a kernel mód között? Mit jelent az igazítás 4 bájtos szavak tárolásánál? Mi az igazítás előnye? Mit jelent a memória szemantika? Milyen hardver megoldásokat ismer a memória műveletek végrehajtási sorrendjére vonatkozóan? Mi a SYNC utasítás hatása? 10. előadás