1 / 51

Szegmens, szegmens csoport sz_név SEGMENT aling_type combine_type ’osztály’ . . . szegmens

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.

edric
Download Presentation

Szegmens, szegmens csoport sz_név SEGMENT aling_type combine_type ’osztály’ . . . szegmens

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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 (10op1255), op2 az egy sorba írható karakterek számát jelenti (60op2132). 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

  16. 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

  17. 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

  18. .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

  19. .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

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. Utasításkészlet LOAD, STORE, MOVE, aritmetikai, logikai, feltétlen, feltételes elágazó utasítások, … 10. előadás

  27. 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

  28. 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

  29. 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

  30. 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

  31. 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

  32. 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

  33. Á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

  34. 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

  35. 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

  36. 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

  37. 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

  38. 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

  39. 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

  40. 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

  41. 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

  42. ▼ A*(B+C)  A ▼ *(B+C)  A ▼ (B+C) *  A ▼ B+C) ( *  AB ▼ +C) ( *  A verem teteje 10. előadás

  43. AB ▼ C) + ( *  ABC ▼ ) + ( *  ABC+▼ ) ( *  A verem teteje ABC+▼  *  ABC+*▼   10. előadás

  44. 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

  45. (8 + 2 * 5)/(1 + 3 * 2 – 4) // infix 10. előadás

  46. 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

  47. 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

  48. 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

  49. 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

  50. 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

More Related