Tartalomjegyzék. Tartalomjegyzék. Tartalomjegyzék...3



Hasonló dokumentumok
Máté: Assembly programozás

A 32 bites x86-os architektúra regiszterei

Adatelérés és memóriakezelés

találhatók. A memória-szervezési modell mondja meg azt, hogy miként

Assembly. Iványi Péter

Architektúra, megszakítási rendszerek

Digitális rendszerek. Utasításarchitektúra szintje

Bevezetés a számítástechnikába

Számítógépek felépítése

Virtuális memóriakezelés Védelem. Memória védelem. Intel x68. Izsó Tamás október 18. Izsó Tamás Memória védelem/ 1

2017/12/16 21:33 1/7 Hardver alapok

2016/08/31 02:45 1/6 Hardver alapok

Aritmetikai utasítások I.

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Mikrorendszerek tervezése

Programozás alapjai. 10. előadás

Mikroprocesszor CPU. C Central Központi. P Processing Számító. U Unit Egység

Assembly. Iványi Péter

Az interrupt Benesóczky Zoltán 2004

Archi2 Gyak. (Processzorok Utasításszintű Kezelése) 2014 ősz

Az operációs rendszer szerkezete, szolgáltatásai

Virtuális memóriakezelés Védelem. Memória védelem. Intel X86. Izsó Tamás október 1. Izsó Tamás Memória védelem/ 1

Operációs rendszerek III.

SzA19. Az elágazások vizsgálata

2. Számítógépek működési elve. Bevezetés az informatikába. Vezérlés elve. Külső programvezérlés... Memória. Belső programvezérlés

Balaton Marcell Balázs. Assembly jegyzet. Az Assembly egy alacsony szintű nyelv, mely a gépi kódú programozás egyszerűsítésére született.

Processzorok Utasításszintű Kezelése tavasz

Intel x86 utasításkészlet

Assembly utasítások listája

Máté: Számítógép architektúrák

A Számítógépek felépítése, mőködési módjai

Mi az assembly? Gyakorlatias assembly bevezető. Sokféle assembly van... Mit fogunk mi használni? A NASM fordítóprogramja. Assembly programok fordítása

1. Az utasítás beolvasása a processzorba

Dr. Illés Zoltán

Számítógép felépítése

Központi vezérlőegység

Számítógépek felépítése, alapfogalmak

Assembly programozás levelező tagozat

Számítógép architektúrák

Vezérlésfolyam gráf és X86 utasításkészlet

Uniprogramozás. várakozás. várakozás. Program A. Idő. A programnak várakoznia kell az I/Outasítások végrehajtására mielőtt továbbfuthatna

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Számítógép architektúrák

Bevezetés az informatikába

1. ábra: Perifériára való írás idődiagramja

Utolsó módosítás:

Utolsó módosítás:

SZÁMÍTÓGÉPEK BELSŐ FELÉPÍTÉSE - 1

Processzor (CPU - Central Processing Unit)

Számítógép Architektúrák

Assembly Utasítások, programok. Iványi Péter

Számítógép architektúrák

Intel x86 utasításkészlet + disassembler működése

Assembly Címzési módok. Iványi Péter

Mechatronika és mikroszámítógépek. 2018/2019 I. félév. Külső megszakítások

Ismerkedjünk tovább a számítógéppel. Alaplap és a processzeor

A mikroprocesszor egy RISC felépítésű (LOAD/STORE), Neumann architektúrájú 32 bites soft processzor, amelyet FPGA val valósítunk meg.

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

A mikroprocesszor felépítése és működése

Architektúra, címzési módok

Bevezetés a számítástechnikába

Máté: Számítógép architektúrák

Járműfedélzeti rendszerek I. 3. előadás Dr. Bécsi Tamás

Fábián Zoltán Hálózatok elmélet

Paraméter átadás regisztereken keresztül

SZÁMÍTÓGÉPARCHITEKTÚRÁK

Mintavételes szabályozás mikrovezérlő segítségével

OPERÁCIÓS RENDSZEREK. Elmélet

Máté: Számítógép architektúrák

Magas szintű optimalizálás

Máté: Számítógép architektúrák

A mikroszámítógép felépítése.

Programozási segédlet DS89C450 Fejlesztőpanelhez

Operációs rendszerek. Az NT folyamatok kezelése

Operandus típusok Bevezetés: Az utasítás-feldolgozás menete

Assembly Rekurzív függvények, EXE, C programok. Iványi Péter

assume CS:Code, DS:Data, SS:Stack Start mov dl, 100 mov dh, 100 push dx Rajz

A számok kiírása is alapvetően karakterek kiírásán alapul, azonban figyelembe kell venni, hogy a számjegyeket, mint karaktereket kell kiírni.

A programozás alapjai

Hardver Ismeretek IA32 -> IA64

Számítógép Architektúrák

Processzus. Operációs rendszerek MINB240. Memória gazdálkodás. Operációs rendszer néhány célja előadás Memóriakezelés

A vezérlő alkalmas 1x16, 2x16, 2x20, 4x20 karakteres kijelzők meghajtására. Az 1. ábrán látható a modul bekötése.

DSP architektúrák dspic30f család memória kezelése

Operációs rendszerek. Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok:

Operációs rendszerek Memóriakezelés 1.1

Megszakítások és kivételek

Utasításrendszer jellemzése (utasítás részei) 1. műveleti kód 2. operandusok 3. következő utasítás címe (elmaradhat)

Mikrorendszerek tervezése

DSP architektúrák dspic30f család

8. Fejezet Processzor (CPU) és memória: tervezés, implementáció, modern megoldások

8. Fejezet Processzor (CPU) és memória: tervezés, implementáció, modern megoldások

Máté: Számítógép architektúrák

Útmutató EDC kézivezérlőhöz

Máté: Számítógép architektúrák

Gábor Dénes Főiskola Győr. Mikroszámítógépek. Előadás vázlat. 2004/2005 tanév 4. szemeszter. Készítette: Markó Imre 2006

Máté: Számítógép architektúrák

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Az MSP430 mikrovezérlők digitális I/O programozása

Átírás:

Tartalomjegyzék Tartalomjegyzék Tartalomjegyzék...3 2. fejezet: Processzor erőforrások...21 Landmark 2.00... 21 CHECKIT 3.0... 23 MIPS 1.20: (MIPS)... 26 CPUTEST 1.1 (MIPS)... 29 3. Fejezet: Általános CPU programozási információk...31 3.1. A memória felépítése... 31 3.1.1. Nemszegmentált vagy "lapos" modell... 32 3.1.2. Szegmentált modell... 33 3.2. Regiszterek... 34 3.2.1. Általános regiszterek... 34 3.2.2. Szegmensregiszterek 3

Tartalomjegyzék... 35 3.2.3. Utasításmutató... 37 3.2.4. A verem felépítése és használata... 37 3.2.5. Flagregiszter... 39 3.2.5.1. Állapotbitek 39 3.2.6 Rendszer-regiszterek... 42 3.2.6.1. Rendszer-flagek 42 3.2.6.2. Vezérlőregiszterek 45 3.2.6.3. Nyomkövető regiszterek 51 3.3. CPU üzemmódok... 53 3.3.1. Valós üzemmód ("valós mód")... 53 3.3.2. Védett üzemmód... 53 3.3.3.Rendszermenedzselő üzemmód 4

Tartalomjegyzék... 53 3.4. Inicializálás és az üzemmódok közötti átkapcsolás... 55 3.4.1. A processzor inicializálása... 55 3.4.1.1. A processzor állapota reszetelés után 56 3.4.1.2. Az első végrehajtott utasítás 60 3.4.1.3. A cache engedélyezése 61 3.4.2. Software inicializálás valós üzemmódban... 62 3.4.2.1. Rendszertáblázatok 62 3.4.2.2. Az NMI megszakítás 63 3.4.3. Software inicializálása védett üzemmódban... 63 3.4.3.1. Rendszertáblázatok 64 3.4.3.2. Megszakítások 64 3.4.3.3. Lapozás 5

Tartalomjegyzék 65 3.4.3.4. Taszkok 66 3.4.3.5. A TLB, BTB és cache tesztelése 68 3.4.4. Üzemmódváltás... 68 3.4.4.1. Átkapcsolás védett módba 68 3.4.4.2. Visszakapcsolás valós üzemmódba 70 3.4.5. Példa inicializálásra és üzemmód átkapcsolásra... 71 3.4.5.1. A példa célja 71 2.4.5.2. A memória elrendezése a reset-elést követően 72 3.4.5.3. Az algoritmus 72 3.4.5.4. Eszközök használata 75 3.4.5.5. A STARTUP.ASM listája 77 3.4.5.6. A MAIN.ASM forráskódja 6

Tartalomjegyzék 86 3.4.5.7. Állományok támogatása 87 3.5. A valós üzemmód felépítése, működése... 90 3.5.1. Címek lefordítása... 90 3.5.2. Regiszterek és utasítások... 91 2.5.3. Megszakítás és kivétel kiszolgálás... 92 3.5.4. Valós üzemmódú kivételek... 93 3.6. A Védett üzemmód felépítése, működése... 97 3.6.1. Memóriaszervező regiszterek.... 99 3.6.2. Rendszer utasítások... 100 3.6.3. Védett üzemmódú memóriaszervezés... 102 3.6.3.1 A szegmentálási modell kiválasztása 105 3.6.3.1.1. A sík modell 7

Tartalomjegyzék... 105 3.6.3.1.2. Védett sík modell... 107 3.6.3.1.3. Multiszegmens modell... 108 3.6.3.2. Szegmensfordítás 110 3.6.3.2.1. Szegmensregiszterek... 112 3.6.3.2.2. Szegmensszelektorok... 113 3.6.3.2.3. Szegmens deszkriptorok... 114 3.6.3.2.4. Szegmensdeszkriptor-táblázatok... 121 3.6.3.2.5. Deszkriptortáblázat bázisregiszterek... 122 3.6.3.3. Lapfordítás 123 3.6.3.3.1. Lapozási opciók... 124 3.6.3.3.2. Lineáris cím... 126 3.6.3.3.3. Laptáblázatok 8

Tartalomjegyzék... 126 3.6.3.3.4. Laptáblázat bejegyzések... 127 3.6.3.3.5. Lapkeret cím... 127 3.6.3.3.6. A Present (betöltött, jelenlevő) bit... 128 3.6.3.3.7 Hozzáfért (accessed) és "piszkos" (dirty) bitek... 129 3.6.3.3.8. Írás/olvasás illetve felhasználó/felügyelő bitek... 130 3.6.3.3.9. Lapszintű cache-vezérlő bitek... 130 3.6.3.3.10. Fordítási segédpufferek... 130 3.6.3.4. Szegmens- és lapfordítás keverése 131 3.6.3.4.1. A sík modell... 132 3.6.3.4.2 Több lapot átfogó szegmensek... 133 3.6.3.4.3. Több szegmenst átfogó lapok... 133 9

Tartalomjegyzék 10 3.6.3.4.4. Nem illeszkedő lap- és szegmenshatárok... 133 3.6.3.4.5. Illeszkedő lap- és szegmenshatárok... 133 3.6.3.4.6. Egy laptáblázat elhelyezése szegmensenként... 134 3.7. Védelemi mechanizmusok... 135 3.7.1. Szegmens szintű védelem... 135 3.7.2. A szegmens deszkriptorok és a védelem... 136 3.7.2.1. Típusellenőrzés 137 3.7.2.2. Határ (limit) ellenőrzés 140 3.7.3. Privilégium szintek... 142 3.7.4. Az adathozzáférések korlátozása... 144 3.7.4.1. Kódszegmensekbeli adatok elérése 146 3.7.5. Vezérlésátadások korlátozása... 146

Tartalomjegyzék 3.7.6. Kapudeszkriptorok... 149 3.7.6.1. Veremváltás 152 3.7.6.2. Visszatérés egy procedúrából 155 3.7.7. Az operációs rendszer számára lefoglalt utasítások... 158 3.7.7.1. Privilegizált utasítások 159 3.7.7.2. Érzékeny utasítások 160 3.7.8. Mutatók érvényességét ellenőrző utasítások... 160 3.7.8.1. Deszkriptor érvényességének ellenőrzése 164 3.7.8.2. Mutatók integritása és az RPL 166 3.7.9. Lapszinti védelem... 167 3.7.9.1. A laptáblázat bemenetek által tartalmazott védelmi paraméterek 168 3.7.9.1.1. A megcímezhető tartományt érintő megszorítások 11

Tartalomjegyzék 12... 168 3.7.9.1.2. Típusellenőrzés... 170 3.7.9.1.3. A védelem kombinálása a laptáblázatok mindkét szintjén... 171 3.7.9.1.4. A lapvédelem fölülírói... 171 3.7.9.2. Lap- és szegmensvédelem kombinálása 173 3.8. Védett üzemmódú multitaszking... 175 3.8.1. Taszk-állapot-szegmens... 176 3.8.2. A TSS deszkriptor... 178 3.8.3. Taszkregiszter... 179 3.8.4. Taszk kapudeszkriptorok... 181 3.8.5. Taszkkapcsolás... 182 3.8.6. Taszkok visszafelé kapcsolása (LINKING)... 187 3.8.6.1. A Busy (foglalt) bit megelőzi a hurkok

Tartalomjegyzék kialakulását 189 3.8.6.2. A taszk visszakapcsolások módosítása 190 3.8.7. Taszkok címtartománya... 191 3.8.7.1. Taszkok által lineárisról- fizikai címre végzett leképzés 191 3.8.7.2. A taszkok logikai címtartománya 192 3.9. Védett üzemmódú kivételek és megszakítások... 194 3.9.1. Kivétel- és megszakításvektorok... 195 3.9.2. Utasítások újraindítása... 199 3.9.3. Megszakítások engedélyezése és letiltása... 199 3.9.3.1. További NMI megszakítások maszkolása 200 3.9.3.2. INTR megszakítások maszkolása 200 3.9.3.3. Debug hibák maszkolása az RF bit segítségével 201 13

Tartalomjegyzék 3.9.3.4. Egyes kivételek és megszakítások maszkolása 202 3.9.4. Szimultán kivételek és megszakítások közötti prioritás... 203 3.9.5. A megszakításdeszkriptor-táblázat... 205 3.9.6. IDT deszkriptorok... 206 3.9.7. Megszakítás taszkok és megszakítás-kezelő procedurák... 207 3.9.7.1. Megszakítás-kezelő procedúrák 207 3.9.7.1.1. A megszakítás-kezelő eljárás verme... 208 3.9.7.1.2. Visszatérés egy megszakítás-kezelő eljárásból... 208 3.9.7.1.3. A megszakítás-kezelő eljárás flaghasználata... 209 3.9.7.1.4. Védelem a megszakítás-kezelő eljárásokban... 209 3.9.7.2. Megszakítás-kezelő taszkok 14

Tartalomjegyzék 210 3.9.8. Hibakódok... 211 3.9.9. Kivétel feltételek... 212 3.9.9.1. 0-s számú megszakítás - Osztáshiba (Divide Error) 213 3.9.9.2. 1-es számú megszakítás - Debug kivétel 213 3.9.9.3. 3-as számú megszakítás - Töréspont (Breakpoint) 214 3.9.9.4. 4-es számú megszakítás - Túlcsordulás (Overflow) 214 3.9.9.5. 5-ös számú megszakítás - Határsértés (Bounds Check) 215 3.9.9.6. 6-os számú megszakítás - Érvénytelen utasítás (Invalid Opcode) 215 3.9.9.7. 7-es számú megszakítás - nem elérhető eszköz (Device Not Available) 216 3.9.9.8. 8-as számú megszakítás - Kettős hiba, dupla hiba (Double Fault) 15

Tartalomjegyzék 216 3.9.9.9. 9-es számú megszakítás - (az Intel által fenntartott, használata nem ajánlott) 220 3.9.9.10. 10-es számú megszakítás - Érvénytelen TSS (Invalid TSS) 220 3.9.9.11. 11-es számú megszakítás - Szegmens nincs jelen, (Segment Not Present) 222 3.9.9.12. 12-es számú megszakítás - verem kivétel (Stack Exception) 224 3.9.9.13. 13-as számú megszakítás - Általános védelmi hiba (General Protection) 225 3.9.9.14. 14-es számú megszakítás - Laphiba (Page Fault) 227 3.9.9.14.1. Taszkkapcsolás alatti laphiba... 229 3.9.9.14.2. Laphiba összeférhetetlen veremmutatóval... 229 3.9.9.15. 16-os számú megszakítás - Lebegőpontos egység hiba, Floating-Point Error) 230 3.9.9.15.1. Numerikus kivételek kezelése 16

Tartalomjegyzék... 232 3.9.9.15.2. Szimultán kivételekre adott válaszok... 234 3.9.9.16. 17-es számú megszakítás - Illeszkedés ellenőrzés ellenőrzési hiba (Alignment Check) 235 3.9.9.17. 18-as számú megszakítás - Processzortípus ellenőrzés (Machine Check) 238 3.9.10. A kivételek összefoglalása... 238 3.9.11. Hibakódok összefoglalása... 240 3.10. Rendszermenedzselő üzemmód... 242 3.10.1. Az SMI megszakítás... 244 3.10.2. Az SMM kezdeti állapota... 245 3.10.2.1. Az SMM végrehajtása 246 3.10.3. Az SMRAM processzor-állapot tároló formátuma... 248 248 3.10.3.1. Az SMM revízió-azonosító (FEFCH ofszet) 17

Tartalomjegyzék 18 252 3.10.3.2. I/O trap-újraindítás (FF00H ofszet) 253 3.10.3.3. Felfüggesztett állapotból való automatikus újraindítás (FF02H ofszet) 254 3.10.3.4. Az állapottároló bázisa (FEF8H ofszet) 254 3.10.4. Az SMRAM relokációja... 255 3.10.5. Visszatérés az SMM-ből... 257 3.11. 8086-os virtuális üzemmód... 258 3.11.1. 8086 CPU kód végrehajtása... 259 3.11.1.1. Regiszterek és utasítások 259 3.11.2.1. Lapozás a 8086-os virtuális taszkok esetében 260 3.11.2.2. Védelem egy 8086-os virtuális taszkon belül 261 3.11.3. Belépés a 8086-os virtuális üzemmódba és az abból való kilépés... 262

Tartalomjegyzék 3.11.3.1. Taszkátkapcsolások általi tranzíciók 264 3.11.3.2. Átmenet trap- és megszakításkapukon keresztül 264 3.11.4. Érzékeny utasítások... 267 3.11.5. Virtuális megszakítások támogatása... 268 3.11.6. A 8086 operációs rendszerhívások emulációja... 268 3.11.7. Virtuális I/O... 270 3.11.7.1. I/O-ra leképezett I/O 270 3.11.7.2. Memóriába leképezett I/O 271 3.11.7.3. Különleges I/O pufferek 272 3.11.8. Különbségek a 8086 CPU-hoz képest... 272 3.11.9. Különbségek a 286 CPU-hoz képest... 277 3.11.9.1. Privilégiumszint 277 19

Tartalomjegyzék 3.11.9.2. A busz lezárása 278 3.11.10. Különbségek a 386 és 486 CPU-hoz képest... 279 Ábra- és példajegyzék...280 Előzetes a második kötet tartalmából...301 µ 1.11. ábra: Kiugrás a végrehajtási sorrendből. Az M1-es processzorban az egyik pipeline végrehajtási sorában lévő utasításnak nem kell megvárnia a másik pipeline lassúbb utasítását. Kiugorva a végrehajtási sorból, időt lehet megtakarítani a vérehajtás során, a program futásának megszakítása nélkül. 20

Landmark 2.0 2. fejezet: Processzor erőforrások céljából tektúrájú összevetettük processzorát. néhány gyártó 32, vagy 64 bites X86-os archi- ettől processzoroknál az eredmények eltérő eseteket kiértékelése különböző közöljük. lehet, során a kitérünk. különbségekre A belső cache - méret típusjelzés különböző szerint TI - valamilyen nyúzópróbái cache-sel, processzort cache-t cache-foglalattal. használtunk tartalmazott. és alaplapba tartalmazó fel. során. esetleg Az Ennek FPU Az ezektől fixen alaplap SLC2-50-es nélkül következménye, beforrasztott eltérő 64 történtek kbyte, esetekben alaplap processzor az meg hogy SLC2-66 nem 256 a mérések. különböző rendelkezett kbyte állta 12815ns-os a kbyte Az sarat méretű SLC33-as külső a cache-t tesztek külső tartalmazzák külső jelöltük egység NxVL koprocesszor koprocesszort rendszervezérlő nélkül a foglalattal. értékelendőek. lebegőpontos jelent. jelenlétét, chip-pel Ha egységet. Az az épült a Nx 486SX mérési 586-os fel, A - táblázatokban és eredmények 486SLC processzort nem rendelkezett típusoknál lebegőpontos a fogadó "+FPU" nem alaplap jelzés aktuális "követtük meghajtott Am486DX4-120 frekvenciával. típusjelzés "tuningolt" őket". valójában Ezek alatt, de fizikailag csak kifogástalanul egy a AmDX4-100, jobb az összehasonlíthatóság előírtnál működő 120MHz-es magasabb példányok, órajellel érdekében pl.: az Landmark 2.00 Processor Típus: CPU (MHz) FPU (MHz) PENTIUM 90 519,47 1743,79 PENTIUM 66 385,85 1299,15 PENTIUM 60 346,74 1169,92 NEXGEN Nx586 P90 527.15 -- Am 486DX4-120 * 401,59 1059,28 INTEL 486DX4-100 359,53 882,57 Am 486DX4-100 334,15 856,64

Processzor erőforrások Am 486DX2-100 * 334,62 882,79 INTEL 486DX2-80 * 267,70 706,05 Am 486DX2-80 267,70 704,11 Cyrix 486DX2-V80 264,45 770,57 INTEL 486DX2-66 222,96 587,49 Am 486DX2-66 222,91 588,02 Cyrix 486DX2-V66 219,94 640,87 TI 486SLC2-66+FPU 152,76 162,07 INTEL 486SX2-50 167,30 14,10 TI 486SLC2-50+FPU 115,15 116,70 Am 486DX-40 133,84 353,06 TI 486SXLC-40 129,81 10,66

Landmark 2.0 TI 486SLC-40 129,90 6,45 INTEL 486DX-33 110,37 291,15 TI 486SLC-33 107,98 7,42 INTEL 486SX-25 83,67 7,04 Am 386 DX-40 62,40 -- Am 386SX-40 52,19 -- µ µ CHECKIT 3.0 Processor Type: Dhrystones Whetstones PENTIUM 90 70577 25940900 PENTIUM 66 52749 21665700

Processzor erőforrások PENTIUM 60 47474 19360100 NEXGEN Nx586 P90 59343 1015400 Am 486DX4-120 * 55852 20808800 INTEL 486DX4-100 43158 14893800 Am 486DX4-100 39211 12872800 Am 486DX2-100 * 47474 17337700 INTEL 486DX2-80 * 39211 13109500 Am 486DX2-80 39211 13109500 Cyrix 486DX2-V80 39211 13876500 INTEL 486DX2-66 33609 11419900 Am 486DX2-66 33609 11419900 Cyrix 486DX2-V66 33609 11561800

Landmark 2.0 TI 486SLC2-66+FPU 29759 3705600 INTEL 486SX2-50 24348 461000 TI 486SLC2-50+FPU 21427 2605100 Am 486DX-40 19303 6880100 TI 486SXLC-40 16999 334800 TI 486SLC-40 9749 201600 INTEL 486DX-33 15785 5703700 TI 486SLC-33 11236 224000 INTEL 486SX-25 12054 226600 Am 386 DX-40 11631 312200 Am 386SX-40 7206 114600 µ

MIPS 1.20: (MIPS) Processzor erőforrások

Landmark 2.0 Processzor Típus: Gener al Inst. Intege r Inst. Mem. -mem. Reg. -reg. Reg. -mem. átlagos : (MIPS ) PENTIUM 90 13,34 23,48 17,19 29,59 28,21 22,36 PENTIUM 66 9,84 17,39 13,10 21,91 21,44 16,73 PENTIUM 60 8,88 15,66 11,79 19,74 19,30 15,07 NEXGEN Nx586 P90 7,73 27,54 4,44 31,52 13,86 16,94 Am 486DX4-120 * 11,96 27,99 16,05 34,24 25,55 23,16 INTEL 486DX4-100 10,04 27,17 13,36 34,40 21,27 21,25 Am 486DX4-100 9,9 23,30 13,21 28.50 21,18 19,22 Am 486DX2-100 * 10,01 23,32 13,37 28,53 21,33 19,31 INTEL 486DX2-80 * 8,05 18,66 10,70 22,82 17,06 15,46 Am 486DX2-80 7,97 18,66 10,70 22,82 17,06 15,44

Processzor erőforrások Cyrix 486DX2-V80 9,70 22,90 14,09 29,62 19,80 19,23 INTEL 486DX2-66 6,66 15,54 8,91 19,01 14,21 12,86 Am 486DX2-66 6,68 15,53 8,91 19,00 14,20 12,86 Cyrix 486DX2-V66 8,08 19,05 11,72 24,64 16,47 15,99 TI 486SLC2-66+FPU 7,29 13,59 10,73 15,31 14,81 12,34 INTEL 486SX2-50 5,00 11,66 6,68 14,26 10,68 9,66 TI 486SLC2-50+FPU 5,66 10,24 8,01 11,54 11,08 9,31 Am 486DX-40 4,03 9,32 5,35 11,41 8,55 7,73 TI 486SXLC-40 4,77 11,13 6,95 14,13 9,36 9,33 TI 486SLC-40 4,77 11,13 6,70 14,42 9,36 9,28 INTEL 486DX-33 3,31 7,69 4,41 9,41 7,05 6,37 TI 486SLC-33 3,96 9,27 5,69 12,01 7,77 7,74

Landmark 2.0 INTEL 486SX-25 2,51 5,83 3,34 7,13 5,33 4,83 Am 386 DX-40 3,14 6,08 4,00 8,86 5,65 5,71 Am 386SX-40 2,60 5,82 3,61 8,42 4,76 5,04 µ CPUTEST 1.1 (MIPS) µ 486-os elég matematikai különbségéből különbözik gyorsabb CPU-t esetében processzor teljesen ez tesztprogramok áruló között SXLC40-ben sebesség belsőcache esetén. szeretnénk!) nagymértékben azonban a helyzet. a a mérési csak takar architektúrák Texas (Sokszor azonos mérése koprocesszort, helyzet belülről mérettől, a is A Ebben műveletek belső-cache 8 adatok SCL40 tokozás. kitűnik, INTEL Dhrystone-ok kbyte. eredményeket függ mérő-algoritmus sajnos nem, sokkal teljesen a a között mennyiben egyébként - kategóriában és FPU hogy cache SXLC40 Az A nem -koprocesszorral és az jobb. mért méretében INTEL kicsivel mérése AMD megegyezik! vizsgálódnunk. az csak a méretétől. Whetstone-ok mutatott. Cyrix adatokból INTEL azonos párosa, hasonlítanak, hosszait azt által és a pedig gyorsabb, processzorok Cyrix van. a nem paramétert használt teljesítményű AMD A ugyanis és Mindegyik kiderült, nagymértékben Az MIPS DX2-80 viszi alaptalanul Az anélkül esetében érdemes SLC40-ben az DX2-66 vagy ugrások struktúráktól. a és INTEL-től különbség pálmát. mérjük Landmark felépítése -asok a - térnek tesztprogram CPUTEST megfigyelni. az sebességi processzorok -os perlekedett: (JMP/CALL), eredmény esetében 1 függ amelyiket A processzora kbyte a különböző lényegesen CPU egymástól, két Egy a esetében típus (!), a Az szintén a az két Pentiumok, mérünk. belsőcache-ek magukat, ismertetett utasítás JMP-CALL utasítás eredményeként Csodák pipeline-ok procedúrák és utasítások az feltöltésével, esetében ebben Nx586 pedig vérehajtásáról kétszer - a esetében műfajban hajtódnak helyzet az és - ugrás az egyszer még utasítás is nincsenek. végre.) meglehetősen után készült rosszabb: a nem előrejelzéssel CALL, /lásd: táblázat/ A lehetnek az processzorok CPUTEST alacsony előbbiekben egyszer tele foglalják utasítással. értékeket a 1.1 RET a külső, el és (A műveleteinek Pentiuméval: mindig fejezetben technológia. szerepelt -oknak rendszervezérlő processzorral (90MHz-nél processzorához.) tulajdonítjuk. az túl Nx586 már fényesen, kb.: Sajnos a egy sebességét tárgyalt kizárólag chippel 2,5-3%) vezetett. nyúlfarknyival A az (A másik ezt Nx586 -(pl.: Nexgen 32 vetjük regiszterek az Ennek regiszter, NxPCI összetevő, alaplapra a memória 10ns-os nagyobb magyarázata rendszer között és az integrált hogy a azonos cache-ram műveletek sebesség regiszter végrehajtott PCI-buszra vezérlő) - 12ns-os súlycsoportba az Nx586-ról átnevezési érhető méréseinél -okat ugyanazon CACHE-RAM műveletekben épülő el. ír elő szóló tartozó nem a P90- processzorok INTEGER az generációs teljesség végrehajtáshoz matematikai pontosságú utasítások igénye műveleti processzorban. alakok processzorra végrehajtásának a Pentiumokhoz szükséges nélkül. használatát sebessége. A órajel vonatkozó táblázat Kiemeltünk ütemezésében viszonyított feltételezik. Most ciklusok az utasítások nézzük néhány számával meglehetősen néhány milyen végrehajtásának matematikai (FP) adja különbségek konkurens a kétszeres meg. magas utasítást A idejét ötödik vannak a FP ADD UTASÍTÁS késés: NEXGEN Nx586 2 Pentium 3 IBM 601 4 eredmény: 2 1 1 FP MUL késés: 2 3 4 eredmény: 2 2 2 FP DIV késés: 40 39 31 eredmény: 40 39 29 MUL (integer) késés: 8 10 9 DIV (integer) késés: 39 41 36 UNIX teljesítményeit. mások meg az operációs (pl.: x86-os PowerPC, architektúrát. Egyesek rendszer R4400, RISC alatt Alpha) mért processzorként INTEGER, software-ből hardware-sen és Floating emulálva Point (pl.: valósítják Nx586),

UNIX SPECint SPECfp tesztek Pentium típus 60 frekvencia 60MHz SPECint92 58.3 SPECfp92 52.2 Belső-cache 16 méret kbyte Pentium 66 66MHz 64.5 56.9 16 kbyte Pentium 75 75MHz 83.8 60.8 16 kbyte Pentium 90 90MHz 100.9 73.5 16 kbyte Pentium 100 100MHz 112.7 81.8 16 kbyte SPARC+ 50MHz 65.2 83 36 kbyte PowerPC601 66MHz 75 91 32 kbyte PowerPC603 66MHz 55 65 16 kbyte PowerPC604 100MHz 140 145 32 kbyte HP7100 99MHz 80 150 -- Alpha21064 150MHz 84.4 127.7 16 kbyte MIPS R4400SC 150MHz 61.7 63.4 16 kbyte Cyrix M1 100MHz 130 nincs adat 16 kbyte Gyártók: µ Pentium PowerPC K5 M1 HP7100 R4400 Alpha21064 Nx586 -INTEL -IBM -AMD -CYRIX -HEWLET-PACKARD -MIPS -DEC -NEXGEN µ

A memória felépítése 3. Fejezet: Általános CPU programozási információk 3.1. A memória felépítése A Pentium processzor buszára kapcsolt memória neve fizikai memória, mely 8 bites Byte-okból álló sorozatnak tekinthető. Minden Byte-nak megfelel egy és csakis egy, fizikai címnek nevezett cím, amelynek érteke 0-tól maximum 2 32-1-ig (4 GByte) terjedhet. A memória kezelését a megbízható és hatékony működés érdekében a hardware végzi. A memóriakezelés használata esetében a programok nem érik el közvetlenül a fizikai memóriát, hanem egy memóriamodellt címeznek, melynek virtuális memória a neve. A memória kezelése szegmentálásból és lapozásból áll. A szegmentálás egy olyan mechanizmus, mely több, független címtartományt biztosít. A lapozás mechanizmusa kevesebb RAM-ot és egy bizonyos mennyiségű lemeztároló kapacitást igénylő nagy címtartományú modelljét támogatja. Használható mindkét vagy csak az egyik módszer a kettő közül. Egy program által használt címek logikai címek. A szegmentálást végző hardware a logikai címet a nemszegmentált címtartomány címzéséhez szükséges lineáris címmé, a lapozást végző hardware pedíg a lineáris címeket fizikai címekké alakítja át. A memória tekinthető egyetlen "lapos" címtartományként is, mint amilyen a fizikai memória; tekinthető azonban egy vagy több, egymástól független memóriarésznek is, melyek neve szegmens. Egy program legtöbb 16383 különböző fajta és méretű szegmenst használhat. A

Általános CPU programozási információk szegmensek felhasználhatók a programok és rendszerek megbízhatóságának növelése érdekében. Például megelőzhető az, hogy egy program verme, túllépve a neki szánt területet, felülírja a program kódját képező utasításokat; ez a kód és a verem két külön szegmensbe való helyezésével érhető el. Így mindegyik szegmens meghatároz egy modult. Mindkét, a lapos és a szegmentált modell is biztosítja a memória védelmét. E két modell közt elhelyezkedő modellek szintén kiválaszthatók. Egy memóriamodell kiválasztásának szempontjait és azt, ahogyan a rendszerprogramozók egy modellt megvalósítanak, az alkalmazási terület határozza meg. Függetlenül attól, hogy több szegmens van használatban vagy sem, a logikai címek lineáris címekké való átalakítása a címeket egy szegmensen belüli ofszetnek értelmezve történik. Minden szegmensnek van egy szegmensdeszkriptora, mely tartalmazza a szegmens báziscímét és mérethatárát. Ha az ofszet nem haladja meg ezt a határt, és nincs más feltétel, mely megakadályozná a szegmenshez való hozzáférést, az ofszet és a báziscím összeadódik és a lineáris címet képez. Ha a CR0 regiszter 31. bitje törölve van (a CR0 regisztert lásd később), a szegmentálásból adódó lineáris cím fizikai címként lesz felhasználva. Ez a regiszterbit határozza meg hogy használatban van-e lapozás vagy sem. Ha a bit 1-re van állítva, a lineáris cím fizikai címmé való átalakítását a lapozó hardware végzi. Ha több szegmens van használatban, ezek részei az alkalmazásfejlesztő által használt programozási környezetnek. Az alkalmazásfejlesztők számára a lapozás nem érzékelhető, részletek ezzel kapcsolatban később. 3.1.1. Nemszegmentált vagy "lapos" modell A legegyszerűbb memóriamodell a lapos modell. Bár nincs olyan üzemmódbit vagy vezérlőregiszter amelyik a szegmentáló mechanizmust

A memória felépítése kikapcsolná, ugyanez a hatás érhető el minden szegmensnek ugyanarra a lineáris címre való leképezésével. Ennek következtében minden memóriaművelet ugyanarra a memóriatartományra fog vonatkozni. A lapos modellben a szegmensek lefedhetik a fizikai címek egész skáláját vagy csupán azokat a részeket, melyek a fizikai memóriába vannak leképezve. A kisebb címtartomány előnye, hogy egy minimális hardware védelmet nyújt a software hibák ellen. Ha egy logikai cím egy nemlétező címet (melyhez nem tartozik memória) jelöl, akkor egy kivétel keletkezik (kivételeket lásd később). 3.1.2. Szegmentált modell A memória felépítésének szegmentált modellje a logikai címek tartományát 16383, egyenként maximum 4 GByte méretű szegmensre osztja, melyek nagysága összesen 2 46 Byte (64 TByte). Ezt a 64 TByte logikai címtartományt a fizikai címtartományra a processzor a későbbiekben bemutatásra kerülő címátalakító mechanizmus segítségével képezi le. A programozóknak ezt a leképezést nem kell figyelembe venniük. A szegmentált modell előnye az, hogy a címtartományokon belüli ofszetek és minden egyes szegmenshez való hozzáférés külön ellenőrizhető. Egy, a szegmentált címtartományt címző pointer két részből áll (lásd a 3.1 ábrát). 1. Szegmensszelektor - a szegmenst azonosító 16 bites mező. 2. Ofszet - a szegmensen belüli 32 bites cím. µ 3.1. ábra: Szegmentált címzés

3.2. Regiszterek Általános CPU programozási információk A processzornak tizenhat, a programozók által használható regisztere van. Amint azt a 3.2. ábra is mutatja. Ezek a következőképpen csoportosíthatók: 1. Általános regiszterek. Ezt a nyolc darab 32 bites regisztert a programozó szabadon használhatja. 2. Szegmensregiszterek. Ezek a regiszterek a különböző memóriahozzáférési módokhoz hozzárendelt szegmensszelektorokat tartalmazzák. A kód- és veremterülethez való hozzáférés például külön szegmensregiszterek segítségével történik. Ez a hat regiszter a pillanatnyilag hozzáférhető memóriaszegmenseket határozza meg. 3. Állapot- és vezérlőregiszterek. Ezek a regiszterek a processzor állapotáról adnak tájékoztatást és lehetővé teszik annak megváltoztatását. 3.2.1. Általános regiszterek Az általános regiszterek az EAX, EBX, ECX, EDX, EBP, ESP, ESI, EDI 32 bites regiszterek. Ezek a regiszterek a programozó által szabadon választott értékeket tartalmazhatnak (logikai, aritmetikai műveletek operandusait, eredményét stb). Ezenkívül tartalmazhatják még a címszámításokhoz szükséges operandusokat is (kivéve az ESP regisztert, mely nem használható indexoperandusként). A felsorolt regiszterek nevei a 8086 processzor AX, BX, CX, DX, BP, SP, SI, DI általános regisztereinek neveiből származnak. Ahogy a 3.2. ábra is mutatja, ezekkel a nevekkel lehet hivatkozni a 32 bites regiszterek alsó 16 bitjére. Az AX, BX, CX és DX 16 bites regiszterek mindkét Byte-jának saját neve is van. A Byte-regiszterek elnevezése a következő: AH, BH,

A memória felépítése CH és DH (felső Byte-ok) illetve AL, BL, CL és DL (alsó Byte-ok). µ 3.2. ábra: Alkalmazások számára elérhető regiszterkészlet A címszámítások és legtöbb aritmetikai illetve logikai művelet eredményei számára minden általános célú regiszter rendelkezésre áll, egyes utasítások azonban operandusaik tárolására csak bizonyos regisztereket használnak fel. Például a füzérutasítások operandusként az ECX (ciklusszámláló), ESI (forrásindex) és EDI (célindex) regisztereket használják. Ezen műveletekhez specifikus regisztereket hozzárendelve az utasításkészlet tömörebben kódolható. A specifikus regisztereket használó utasítások a következők: duplapontosságú szorzás és osztás-, I/O-, füzér-, transzlatáló, ciklus-, különböző eltoló- és forgató-, valamint veremműveletek. 3.2.2. Szegmensregiszterek A szegmentáció a rendszertervezők számára rugalmasságot nyújt a különböző memóriafelépítési modellek közti választásban. A szegmensregiszterek a 16 bites szegmensszelektorokat tartalmazzák, melyek egy, a memóriában elhelyezkedő táblázatot indexelnek. Ez a táblázat tartalmazza a szegmensek báziscímét, valamint a memóriahozzáférést illető információkat. Nem szegmentált modell minden egyes szegmens ugyanarra a fizikai memóriatartományra való leképezésével valósítható meg. A memóriában egy adott pillanatban hat szegmens áll rendelkezésre, ezeknek szelektorait a CS, DS, SS, ES, FS és GS szegmensregiszterek tartalmazzák. Minden regiszterhez egy külön

Általános CPU programozási információk memóriaelérési mód tartozik (kód, adat, vagy verem); mindegyik regiszter egy szegmenst jelöl, a program által használtak közül (lásd a 3.3 ábrát). Más szegmensek is használhatók, ezek szegmensszelektorát be kell tölteni a megfelelő szegmensregiszterbe. Kódszegmens a neve annak a szegmensnek, mely a végrehajtandó utasításokat tartalmazza. Ennek szegmensszelektorát a CS regiszter tartalmazza. A processzor a kódszegmensben levő utasításokat olvassa be, a szegmensen belüli ofszetként az EIP regiszter tartalmát felhasználva. A CS regiszter feltöltése a megszakítások, kivételek és a vezérlést szegmensek közt átadó utasítások (például CALL, RET vagy JMP) végrehajtása eredményeképpen történik (a számítógép autómatikusan végzi). Egy eljárás meghívása előtt szükséges egy memóriarész kijelölése a verem számára. A verem tartalmazza a visszatérési címet, a hívórutin által átadott paramétereket, valamint az eljárás által igényelt ideiglenes változókat. A veremszegmens azonosítására minden veremművelet az SS regisztert használja, mely a CS regiszterrel ellentétben külső módon feltölthető; így az alkalmazás saját maga építhet fel vermeket. A DS, ES, FS és GS regiszterek lehetővé teszik, hogy egyszerre négy adatszegmens álljon rendelkezésre. A négy adatszegmens biztosítja a különböző típusú adatstruktúrákhoz való hatékony és biztonságos hozzáférést. Például külön-külön adatszegmens hozható létre az aktuális modul adatstruktúrái, a magasabb szintű modulból exportált adatok, egy dinamikusan létrehozott adatstruktúra és a más programokkal megosztott adatok számára. Ha egy programhiba következtében a program futása összezavarodik, a szegmentáló mechanizmus a hiba által okozott kárt a program által foglalt szegmensekre korlátozza. µ 3.3. ábra: Szegmentált memória Az adatok szerkezetétől függően (vagyis hogyan vannak az adatok szegmensekre osztva) a program több szegmenshez is igényelhet hozzáférést. A további szegmensek elérése érdekében a DS, ES, FS és GS regiszterek az alkalmazói program futása

A memória felépítése közben is feltölthetők. Az egyetlen teendő a megfelelő szegmensregiszter feltöltése, még mielőtt az illető szegmens adataihoz való hozzáférés megtörténne. Minden egyes szegmens báziscíme tárolva van. Egy szegmensen belüli adat megcímzéséhez a 32 bites ofszetet hozzá kell adni a szegmens báziscíméhez. A szegmens kiválasztása (a szegmensszelektornak a szegmensregiszterbe való betöltése által) után az utasításnak csak az ofszetet kell megadnia. Az adatszegmensen belüli operandus címzése egy regiszterben vagy maga az utasítás testében megadott ofszet segítségével történik. Azt, hogy melyik szegmensregiszter használandó akkor, amikor csak egy ofszet van megadva, egyszerű szabályok határozzák meg. 3.2.3. Utasításmutató Az utasításmutató (EIP) regiszter az aktuális kódszegmensben levő következő végrehajtandó utasítás ofszetjét tartalmazza. Az utasításmutató nem áll közvetlenül a programozó rendelkezésére, kezelését a vezérlésátadó utasítások (ugrások, hívások, stb.), megszakítások és kivételek végzik. Az EIP regiszter egyik utasítás kezdőcíméről a következőére ugrik. Az utasítások előbetöltése miatt az EIP az utasításokat a processzorba betöltő busz aktivitásáról csak egy hozzávetőleges tájékoztatást ad. Az utasítások előbetöltésének részletes leírása egy későbbi fejezetben található. 3.2.4. A verem felépítése és használata A veremműveleteket három regiszter támogatja: 1. Veremszegmens (SS) regiszter. A verem a memóriában helyezkedik el. Egy rendszerben a vermek számát a használható szegmensek

Általános CPU programozási információk maximális száma korlátozza. A verem nagysága maximálisan 4 GByte lehet, vagyis egyenlő egy szegmens maximális méretével. Egyszerre csak egy verem állhat rendelkezésre. Az, amelynek szelektorát az SS regiszter tartalmazza. Ez az aktuális verem. A processzor minden veremművelethez automatikusan az SS regisztert használja. 2. Veremmutató (ESP) regiszter. Az ESP regiszter a verem tetejét (TOS - Top-Of-Stack) az aktuális veremszegmensen belüli aktuális ofszetet tartalmazza. A veremmutatót a PUSH és POP utasítások, szubrutinhívások és visszatérések, kivételek, valamint megszakítások használják. Egy adat veremre való ráhelyezésekor (3.4. ábra) a processzor csökkenti az ESP regisztert, majd beírja az adatot az új TOS-ba. Amikor egy adatot kivesz a veremből, a processzor kimásolja azt a TOS-ból, majd növeli az ESP regisztert. Másképpen fogalmazva a memóriában a verem lefele nő, a kisebb címek irányába. 3. Veremkeret-bázismutató (EBP) regiszter. Az EBP regiszter jellemző felhasználási módja a vermen keresztül átadott paraméterekhez való hozzáférés. Amikor a vezérlés átadódik egy szubrutinra, a verem a visszatérési címet és az illető szubrutinnak átadott adatstruktúrákat tartalmazza. A szubrutin megnöveli a vermet, amennyiben ideiglenes lokális változói számára helyre van szüksége. Ennek eredményeképpen az ideiglenes változók veremből való ki- és behelyezése által a veremmutató nő illetve csökken. Ha a veremmutató értéke azelőtt volt a bázismutatóba másolva, mielőtt valami is a verembe került volna, akkor a bázismutató felhasználható a rögzített ofszetű adatstruktúrák elérésére. Ha ez nem így történt, akkor egy adatstruktúrát azonosító ofszet az időszakos változók által elfoglalt hely függvényében változni fog. Az EBP regiszter által történő memóriacímzés az aktuális veremszegmenst (SS regiszter) használja. Mivel a veremszegmenst nem kell külön megadni, az utasításkód tömörebb. Az EBP regiszter más szegmensek címzésére is használható, de ekkor a szegmenst külön meg kell adni (MOV AX,GS:[EBP]). Az olyan utasítások, mint az ENTER és

A memória felépítése LEAVE, a változókhoz való könnyebb hozzáférés érdekében az EBP regisztert automatikusan beállítják. 3.2.5. Flagregiszter Az feltételkódokat (azaz átvitel, előjel, túlcsordulás) és állapotbiteket, (gyüjtőnevükön: flageket), az EFLAGS nevű 32 bites regiszter tartalmazza. A flagek elrendezését a regiszteren belül a 3.5. ábra mutatja be. Az flagek a Pentium processzor állapotáról adnak tájékoztatást, ezenkívül egyes műveletek végrehajtását irányítják. Az állapot- és vezérlő flagbiteken kívül a flagregiszter még rendszerflageket is tartalmaz. µ 3.4. ábra: A verem működése 3.2.5.1. Állapotbitek Az EFLAGS regiszter állapotbitjei az olyan aritmetikai utasítások eredményének jellegéről adnak számot, mint az ADD, SUB, MUL vagy DIV. A MOV utasítás nincs hatással ezekre az állapotbitekre. A feltételes ugrások és szubrutinhívások lehetővé teszik, hogy a program érzékelni tudja az flagek állapotát és ezektől függően cselekedjen. Amikor egy ciklusszámláló értéke a csökkentések során elérte a nullát, a ZF bit állapota 1 lesz, e változás miatt a ciklus elejére való ugrást megvalósító feltételes ugróutasítás nem hajtódik végre, és a ciklus megszakad. Az állapotbiteket a 3.6. ábra mutatja be külön. µ

Általános CPU programozási információk 3.5. ábra: Az EFLAGS regiszter

Regiszterek Név Szándék Kialakulási feltétel OF Túlcsordulás Az eredmény meghaladta a pozitív vagy negatív határt SF Előjel Az eredmény negatív ZF Zero Az eredmény nulla AF Félátvitel Átvitel történt a 3. biten (BCD-nél használatos) PF Paritás Az eredmény alsó Byte-jában páros számú 1 bitek vannak CF Átvitel A legfelső bitről átvitel történt 3.6. ábra: Állapotbitek Az EFLAGS regiszter DF vezérlőbitje a füzérutasítások irányát vezérli. (10. bit) A DF bit beállítása a füzérutasítások csökkenő memóriatartomány felé történő végrehajtását eredményezi, vagyis a füzérek feldolgozása a magasabb címek felől az alacsonyabb címek irányába tart. A DF bit törlése fordított irányú feldolgozást eredményez.

3.2.6 Rendszer-regiszterek Regiszterek A rendszerprogramozóknak szánt regisztereket a következő kategóriákba sorolhatjuk: - EFLAGS regiszter - memóriaszervező regiszterek (memory management ) - vezérlő regiszterek (control) - nyomkövető regiszterek (debug) A rendszer-regiszterek vezérlik a felhasználói programok végrehajtó környezetét. Az operációs rendszerek többsége a felhasználói programok számára korlátozza ezen lehetőségeket. (Mindamellett szerkeszthetünk olyan operációs rendszereket is, amelyekben minden program a legprivilegizáltabb szinten fut, ez esetben a felhasználói programoknak megengedett e lehetőségekbe való beavatkozás.) 3.2.6.1. Rendszer-flagek Az EFLAGS regiszter rendszer-flagjei vezérlik az I/O műveleteket, a maszkolható megszakításokat, a nyomkövetést, a taszkcserét, illetve a virtuális 8086-os üzemmódot. Egy felhasználói programnak ezeket a flageket nem kell figyelembe vennie, és tilos számára az állapotuk megváltoztatását megkísérelni. Egyes operációs rendszerekben egy rendszerflag állapotának megváltoztatását célzó kísérlet kivételt idéz elő. A fent említett flageket a 3.5. ábra szemlélteti. A 0-val illetve 1-el jelölt bitpozíciók az Intel által fenntartottak. Használatuk nem ajánlott. Mindíg a megelőző kiolvasáskor kapott értékekre állítandók. ID - (Identification Flag) azonosító flag, (21. bit) Ha egy program képes arra, hogy az ID flaget magasra, illetve

Regiszterek alacsonyra állítsa, azt jelenti, hogy a processzor támogatja a CPUID utasítást. Lásd cpu azonosítása. VIP - (Virtual Interrupt Pending Flag) virtuális megszakításfelfüggesztés bit (20. bit) Ez a flag a VIF flaggel együtt lehetővé teszi minden egyes, multitaszkos környezetben futó felhasználói program számára, hogy a rendszer IF flagjének egy virtuális verzióját használhassa. Részletes útmutató ezen flagek virtuális 8086-os, illetve védett üzemmódú használatáról a függelékben található. VIF - (Virtual Interrupt Flag) virtuális megszakítás bit (19. bit) A VIF flag egy virtuális képe az IF (Interrupt Flag) megszakítás flagnek, a VIP-el együtt használatos. AC - (Alignment Check Mode) illeszkedés-ellenőrzés (18. bit) Az AC flag és a CR0 regiszterbeli AM bit magasra állításával (SET) lehetővé válik a memóriahivatkozások illeszkedésének ellenőrzése. Valahányszor egy illeszkedési hibás operandusra kerül hivatkozás, mint például egy páratlan címen elhelyezkedő 16 bites szóra, vagy egy néggyel nem osztható címen levő doublewordra, egy illeszkedési kivétel jelentkezik. Az illeszkedési kivételek csak felhasználói módban (usermode) (3. privilégium szinten) generálódnak. Azok a memóriahivatkozások, amelyek alapértelmezése a 0. privilégium szint, mint például a szegmensdeszkriptorok betöltése, nem okozzák a fenntemlített kivételt még abban az esetben sem, ha ezt egy felhasználói módbeli memóriahivatkozás okozná. Az illeszkedési kivételt fel lehet használni az adatok illeszkedésének ellenőrzésére. Ez akkor lehet hasznos, ha egy olyan processzorral cserélünk adatokat, amely megköveteli minden adat helyes illeszkedését, mint például az i860-as. Az illeszkedési kivételt az értelmezőprogramok (interpreters) arra is felhasználhatják, hogy bizonyos mutatókat (pointereket) speciálisan megjelöljenek hibás illesztéssel.

Regiszterek Ezáltal elkerülhetők a mutatók egyenkénti ellenőrzésének költségei, és így az alkalmazás pillanatában csak a speciális mutatókat kezelik. VM - (Virtual-8086 Mode) virtuális 8086-os üzemmódjelző bit (17. bit) Magasra állítva a VM flaget a processzort virtuális 8086-os üzemmódba hozzuk, amely nem más, mint a 8086-os processzor programozási környezetének emulálása. RF - (Resume Flag) folytatás jelző bit (16. bit) Az RF bit ideiglenesen letiltja a nyomkövetési hibákat (debug faults), annak érdekében, hogy egy debug fault után újra folytatni lehessen egy utasítást, anélkül, hogy közvetlenül egy újabb nyomkövetési hibát okozna. A hibakereső (debugger) az IRETD utasítással állítja magasra ezt a bitet, a megszakított programba való visszatérés pillanatában. A POPF, POPFD, vagy IRET utasítások nem befolyásolják az RF flaget. NT - (Nested Task) egymásba ágyazott taszkokat jelző bit (14. bit) A processzor beállítja, illetve teszteli az NT flaget, hogy vezérelje a megszakított és meghívott taszkok egymásba láncolását. Az NT flag befolyásolja az IRET utasítás végrehajtását, ugyanakkor a POPF, POPFD, és IRET utasítások befolyásolják az NT flaget. Ezen flag értékének helytelen megváltoztatása váratlan kivételeket generálhat a felhasználói programokban. IOPL - (I/O Privilege Level) I/O privilegizált szintet jelző bitek (12. és 13. bit) Az I/O privilegizálási szintet a védelmi mechanizmus az I/O címtartományhoz való hozzáférés ellenőrzésére használja. Az aktuálisan végrehajtás alatt álló szegmens privilégiumszintje (CPL) és az IOPL értéke határozzák meg azt, hogy a POPF, POPFD, és IRET utasítások módosíthatják-e ezen mező értékét. További információk a második kötetben.

Regiszterek IF - (Interrupt-Enable Flag) megszakítás-engedélyezést jelző bit (9. bit) Ha IF magas logikai szintre van állítva, a processzor válaszol a maszkolható megszakítás kérésekre (INTR megszakítások). Alacsonyra állítva ezt a bitet letiltjuk ezeket a megszakításokat. Az IF flag nincs hatással sem a kivételekre, sem a nemmaszkolható megszakításokra (NMI megszakítások). A CPL illetve IOPL határozzák meg, hogy a CLI, STI, POPF, és IRET utasítások változtathatnak-e ezen a biten. TF - (Trap Flag) csapda bit (8. bit) A TF flag magasra állítása a processzort - a hibakeresés érdekében - lépésenkénti végrehajtás üzemmódba helyezi. Ebben az üzemmódban a processzor minden egyes utasítást követően egy hibakereső kivételt (debug excepcion) generál, ezáltal lehetővé téve egy program ellenőrzését, miközben az egyenként hajtja végre az utasításokat. A lépésenkénti végrehajtás csak egy a processzor által kínált számos hibakereső lehetőség közül. Ha egy felhasználói program a POPF, POPFD, vagy IRET utasítások egyikével magasra állítja a TF flaget, egy hibakereső kivétel (debug exception) generálódik. 3.2.6.2. Vezérlőregiszterek A 3.7. ábra a CR0, CR1, CR2, CR3 ÉS CR4 vezérlőregiszterek formátumát mutatja be. Az operációs rendszerek túlnyomó része meggátolja a felhasználói programokat abban, hogy a vezérlőregisztereket feltölthessék (habár ez egy védelem nélküli rendszerben megengedett). A felhasználói programok olvashatják ezeket a regisztereket, példának kedvéért a CR0-t olvasva meghatározhatják, hogy a numerikus koprocesszor jelen van-e. A MOV utasítás különböző formái lehetővé teszik, hogy ezeket a regisztereket feltölthessük vagy elmenthessük az általános regiszterekből, illetve regiszterekbe. Például: MOV EAX, CR0

Regiszterek MOV CR3, EBX A CR0 regiszter rendszervezérlő biteket tartalmaz, amelyek üzemmódokat vezérelnek, vagy olyan állapotokat jeleznek, amelyek inkább általánosan a processzorra vonatkoznak, mintsem egyedi taszkok végrehajtására. Egy programnak tilos a rezervált bitek valamelyikének megváltoztatását megkísérelni. A rezervált biteket mindig az előző kiolvasásukkor kapott értékekre tanácsos állítani. PG - (Paging) lapozás bit ( CR0 31. bitje) tiltott. Ha ez a bit magas, a lapozás megengedett, ha alacsony, a lapozás Ha a lapozás alatt kivétel generálódik, a CR2-es regiszterbe kerül az a 32 bites lineáris cím, amely a kivételt előidézte. A lapozás alatt létrejött kivételek (page faults) kezelését lásd később.

Regiszterek µ 3.7. ábra: A vezérlő regiszterek felépítése Ha lapozást használunk, a CR3-as regiszter tartalmazza a lapcímtár (a felső szintű laptáblázat) címének 20 legjelentékenyebb bitjét. A CR3-as regiszter a lapcímtár báziscím-regisztere (PDBR Page Directory Base Register) néven is ismert. Megjegyzendő, hogy a lapcímtárnak is lapkeret illeszkedésűnek kell lennie, ezért a regiszter alsó 12-bitje nem használható címbitként. Az 386-os processzorral ellentétben, a 486-os illetve a Pentium processzorok ezek közül két bitnek jelentőséget tulajdonítanak. Ezek: PCD - (Page-Level Cache Disable) lapszinti cache-letiltás bit (CR3 4. bitje) Ha a lapozás megengedett, a lapozást nem használó buszciklusok mint például a megszakítás elismerő ciklusok idején ennek a bitnek az állapota megjelenik a processzor PCD vonalán. Ha a lapozás nem engedélyezett, ez az információ minden egyes buszciklus idején megjelenik. A PCD vonalat (pin-t) egy külső cache-be történő pufferelés (caching) ciklusonkénti vezérlésére használják. PWT - (Page-Level Writes Transparent) lapszinti átlátszó átírás bit (CR3 3. bitje) Ha a lapozás megengedett, a lapozást nem használó buszciklusok mint például a megszakítás elismerő ciklusok idején ennek a bitnek az állapota megjelenik a processzor PWT vonalán. Ha a lapozás nem engedélyezett, ez az információ minden egyes buszciklus idején megjelenik. A PWT vonalat (pin-t) egy külső cachen történő átírás (writethrough) ciklusonkénti vezérlésére használják. CD - (Cache Disable) cache-letiltás bit (CR0 30. bitje)

Regiszterek Ha ez a bit 0-ra van állítva, engedélyezi a cache feltöltő mechanizmust, ha 1-re, letiltja azt. Ha ez a bit 1-es, a cache-vesztések (cache misses) nem okoznak cache feltöltést. Megjegyzendő, hogy a cache-találatok nincsenek letiltva; ahhoz, hogy teljesen kiiktassuk a cache-t, először invalidálni kell. A cache-elésre vonatkozó információkat lásd később. NW - (Not Write-through) átírástiltás bit (CR0 29. bitje) Ha ez a bit 0-ra van állítva, engedélyezi a cache átírást (writethrough) és a cache-invalidáló ciklusokat, ha 1-re van állítva, letiltja a cache-invalidáló ciklusokat és azokat az átírásokat, amelyek cachetalálatosak. A cache-használatra vonatkozó információkért lásd később. AM - (Alignment Mask) illeszkedési maszk (CR0 18. bitje) Ha ez a bit 1-es, az illeszkedés ellenőrzés engedélyezett, ha 0, letiltott. Az illeszkedés ellenőrzésre csak abban az esetben kerül sor, ha az AM bit és az AC flag is 1-es, és a CPL értéke 3 (felhasználói mód). WP - (Write Protect) írásvédelem bit (CR0 16. bitje) Ha 1-re van állítva, ez a bit levédi a felhasználói- szintű lapokat a felügyelőprogram-szinti írás ellen. Ha ez a bit értéke 0, a csak olvasható, felhasználói-szintű lapokra a felügyelőprogram írhat is. Ez a lehetőség hasznosnak bizonyul, ha az ún. "írás közbeni másolás" megoldást (copy-on-write) akarjuk megvalósítani új, származtatott taszkok (processes) létrehozására (forking), amely egyes operációs rendszerekben (például az UNIXban) használatos. NE - (Numeric Error) numerikus hiba bit (CR0 5. bitje) Ha ez a bit magasra van állítva, a lebegőpontos numerikus hibák jelentésének standard mechanizmusa engedélyezett. Ha NE=0 és az IGNE# bemenet aktív, a numerikus hibákat a processzor nem veszi

Regiszterek figyelembe. Abban az esetben, ha NE=0 és az IGNE# bemenet inaktív, a numerikus hibák arra késztetik a processzort, hogy megálljon, és egy megszakításra várjon. A megszakítás a FERR# vonal segítségével generálódik, amely a megszakítás kontroller egyik bemenetét hajtja meg (a FERR# vonal emulálja az 287-es és 387-es matematikai koprocesszorok ERROR# vonalát). Az NE bitet, az IGNE# és a FERR# vonalakat külső logikával PC-típusú hibajelentések létrehozására használják. ET - (Extension Type) koprocesszorral bővítés bit (CR0 4. bitje) Ez a bit azt mutatja, hogy a processzor támogatja az 387 DX matematikai koprocesszor utasításkészletét (Pentium processzoroknál ez a bit fenntartott). TS - (Task Switched) taszkkapcsolás bit (CR0 3. bitje) A processzor minden egyes taszkkapsolás alkalmával beállítja a TS bitet, illetve teszteli azt, amikor a lebegőpontos numerikus utasításokat értelmezi. Ezzel a bittel lehetővé válik a numerikus kontextus mentésének illetve helyreállításának késleltetése mindaddig, amíg a numerikus adat ténylegesen felhasználásra nem kerül. A CLTS utasítás 0- ra állítja (RESET) ezt a bitet. EM - (Emulation) numerikus koprocesszor emulálása (CR0 2. bitje) Mikor az EM bit magas logikai szintre van állítva (EM=1), egy numerikus utasítás végrehajtása "nem létező koprocesszor" kivételt generál. Ha a processzornak nincs lebegőpontos egysége, az EM bitet 1-re kell állítani. MP - (Monitor coprocessor) koprocesszor monitorozó bit. Az 286-os és 386 DX processzorokban az MP bit a WAIT - koprocesszorral való szinkronizálásra használatos- utasítás működését vezérli. Abban az esetben, ha 286-os vagy 386 DX processzorok programjait futtatjuk 486-os vagy Pentium processzorok FPU-ján, ez a bit

Regiszterek kötelezően 1-re állítandó. Az MP bitet resetelni kell a 486 SX processzor estében. PE - (Protection Enable) védett üzemmód engedélyező bit (CR0 0. bitje) A PE bit magas állapota engedélyezi a szegmens-szintű védelmet. A védelemről további információk a védett üzemmódnál A CR4-es regiszterben bizonyos architektúrális kiterjesztéseket engedélyező bitek találhatók. Ez a regiszter a Pentium proceszszorban jelenik meg először VME - (Virtual-8086 Mode Extensions) virtuális 8086-os üzemmód kiterjesztések bit (CR4 0. bitje) Ez a bit magasra állítva támogatja egy virtuális megszakítás engedélyezést jelző flag virtuális 8086-os üzemmódbeli alkalmazását. Ezen "adottság" javítani képes a virtuális 8086-os üzemmódban futó alkalmazások teljesítményén, mégpedig úgy, hogy megszünteti a költségeit egy virtuális 8086-os monitorba való fault kivétellel történő- "kiugratásnak", bizonyos utasítások emulálásakor. Lásd a függelékben. PVI - (Protected-Mode Virtual Interrupts) védett üzemmódú virtuális megszakítások (CR4 1. bitje) Ez a bit magasra állítva támogatja egy virtuális megszakítás engedélyezést jelző flag védett üzemmódbeli alkalmazását. Ezen tulajdonság lehetővé teszi a 0. privilegizálási szintre tervezett programok számára, hogy a 3-as privilégiumszinten fussanak. További információk a függelékben. TSD - (Time Stamp Disable) time stamp-számláló olvasás tiltása (CR4 2. bitje) Ezt a bitet 1-re állítva az RDTSC utasítás (Read from Time Stamp

Regiszterek Counter) privilegizált utasítássá válik. Részletek az RDTSC utasításról a 2. kötetben. DE - (Debugging Extensions) hibakeresés kiterjesztések bitje (CR4 3. bitje) Ennek a bitnek a magasra állítása engedélyezi az I/O töréspontokat. Lásd később. PSE - (Page Size Extensions) lapméret kiterjesztések bitje (CR4 4. bitje) Ennek a bitnek a magasra állítása engedélyezi a 4 MByte-os lapméretet. További információk erről a lehetőségről a függelékben találhatók. MCE - (Machine Check Enable) géptípus ellenőrzés engedélyezését jelző bit (CR4 6. bitje) Magasra állítva ezt a bitet, engedélyezzük a géptípus ellenőrző kivételt. 3.2.6.3. Nyomkövető regiszterek A nyomkövető regiszterek fejlett hibakereső képességgel látják el a processzort, beleértve az adat töréspontokat és annak lehetőségét, hogy a kódszegmens módosítása nélkül az utasítások közé töréspontokat (breakpoints) szúrhassunk (hasznos lehet a ROM-ra alapozott software-ek nyomkövetése esetén). Csak a legmagasabb privilégiumszinten futó programok képesek ezekhez a regiszterekhez hozzáférni. A későbbiekben egy teljeskörű leírást kaphatunk ezen regiszterek felépítéséről és használatáról. A nyomkövető regisztereket a 3.8. ábra illusztrálja. µ

Regiszterek 3.8. ábra: Nyomkövető regiszterek

CPU üzemmódok 3.3. CPU üzemmódok 3.3.1. Valós üzemmód ("valós mód") Ez az üzemmód az Intel 8086 processzor programozási környezetét valósítja meg, biztosítva egy pár kiterjesztést (ilyen például az ebből a módból való kilépés lehetősége). A reszet általi inicializálás a processzort a valós üzemmódba állítja, melyből egyetlen utasítás segítségével átkapcsolható a védett módba. 3.3.2. Védett üzemmód Ez a processzor natív állapota. Ebben az üzemmódban az összes utasítás és architekturális jellemző elérhető, biztosítva a legnagyobb teljesítményt és képességeket. Minden új alkalmazás és operációs rendszer számára ez az ajánlott üzemmód. A védett mód által nyújtott lehetőségek közé tartozik 8086-ra írt "valós módú" software multitaszking, védett módú környezetben történő közvetlen végrehajtása. Ennek a lehetőségnek a neve 8086-os virtuális mód (vagy "V86 mód"). A 8086-os virtuális mód valójában nem a processzornak egy üzemmódja, hanem egy attribútum, amelyet védett módban, megfelelő software segítségével, bármely taszk számára beállítható. 3.3.3.Rendszermenedzselő üzemmód A Pentium mikroprocesszor a rendszermenedzselő üzemmmódot (SMM - System Management Mode) is támogatja. Minden új

CPU üzemmódok mikroprocesszorra (kezdve az 386 SL-től) jellemző az SMM, mely egy operációs rendszer- és alkalmazásfüggetlen, ezek számára transzparens mechanizmus. Ezen mechanizmus segítségével implementálhatók a rendszerteljesítményt menedzselő és OEM megkülönböztető funkciók. Az SMM-be való belépés egy külső megszakításvonal (az SMI#) aktiválásával történik, mely a CPU-t egy különálló címtartományra kapcsolja át, lementve a CPU teljes állapotát. Ennek következtében az SMM-specifikus kód végrehajtása transzparens. Az SMM-ból való visszatéréskor az előző műveletek fordítottja hajtódik végre.