Balogh, Lőrentey: Architektúrák és operációs rendszerek 2005 2006. második félév Architektúrák és operációs rendszerek: Processzorok Balogh Ádám Lőrentey Károly Eötvös Loránd Tudományegyetem Informatikai Kar Algoritmusok és Alkalmazásaik Tanszék Tartalomjegyzék 1. A processzorok feladata 2. Egy processzor felépítése, részei 3. Utasításkészletek 4. Címzési módok 5. A processzor működése 6. Processzorok fajtái 7. Esettanulmány: Intel Pentium 2006. március 14 21. Processzorok 2. oldal A processzorok feladata A processzorok a számítógép aktív elemei: Számítási műveleteik segítségével adatokat változtatnak, dolgoznak fel A feldolgozás módját, menetét utasítások sorozatával adhatjuk meg, így az adatfeldolgozás ezeknek az utasításoknak a végrehajtását jelentik Vannak általános célú és speciális, célprocesszorok: Központi egység: számítógépet vezérli, fő számításokat végzi: legalább egy darab minden számítógépben van belőle (CPU) Grafikus feldolgozó egységek (GPU), hangfeldolgozó egységek (MPU), be és kivitelvezérlő egységek (IOPU) stb. 2006. március 14 21. Processzorok 3. oldal 1. oldal
A központi egység (CPU) A központi memóriában található utasítások sorozatát hajtja végre Az utasítások nagy része adatokkal végzendő műveletet ír elő: Feldolgozandó adatokat beolvassa (központi memóriából, vagy egyéb egységekről) Számítás közben részeredményeket maga is tárolhat Végeredményeket kiírja (központi memóriába vagy egyéb egységekre) Többi utasítás: az utasítások feldolgozásának menetét befolyásolja: Új utasítássorozat feldolgozását írja elő Feldolgozás egyéb paramétereit változtatja 2006. március 14 21. Processzorok 4. oldal Tartalomjegyzék 1. A processzorok feladata 2. Egy processzor felépítése, részei 3. Utasítások 4. Címzési módok 5. A processzor működése 6. Processzorok fajtái 7. Esettanulmány: Intel Pentium 2006. március 14 21. Processzorok 5. oldal Egy processzor részei Egy modern processzor egyebek mellett a következő egységeket tartalmazza: Vezérlő egység (CU) Aritmetikai és logikai műveletet végző egység (ALU) Lebegőpontos műveletet végző egység (FPU) Központi tárat kezelő egység (MMU) Regiszterek Ezen részegységek közötti sínek Ezek mindegyike logikai kapukból és tranzisztorokból áll 2006. március 14 21. Processzorok 6. oldal 2. oldal
Regiszterek (1) Három fajta lehetséges: Általános célú regiszter Általános célú regiszter speciális tulajdonsággal Célregiszter Általános célú regiszterek (GPR) Aritmetikai és logikai műveletek operandusai és eredményeit tárolják Memóriacímeket is tárolhatnak Lehetnek külön egész és lebegőpontos általános célú regiszterek 2006. március 14 21. Processzorok 7. oldal Regiszterek (2) Általános célú regiszterek speciális tulajdonsága: Bizonyos címzési módok csak bizonyos regiszterek segítségével valósíthatók meg (hatékonyan) Bizonyos utasítások csak bizonyos regiszterekkel képesek (hatékonyan) dolgozni Célregiszterek Utasításmutató (IP): következő végrehajtandó utasítást tárolja Feltételregiszter (FLAG): aritmetikai és logikai műveletek eredménye alapján változik Egyéb célregiszterek: link regiszter, vezérlőregiszterek, nyomkövető regiszterek, tesztregiszterek, virtuális memóriakezeléshez szükséges regiszterek stb. 2006. március 14 21. Processzorok 8. oldal A feltételregiszter mezői Átvitel: művelet eredménye hosszabb egy bittel, mint ami beférne Zérus: művelet eredménye nulla Negatív: művelet eredménye negatív 2006. március 14 21. Processzorok 9. oldal 3. oldal
Tartalomjegyzék 1. A processzorok feladata 2. Egy processzor felépítése, részei 3. Utasítások 4. Címzési módok 5. A processzor működése 6. Processzorok fajtái 7. Esettanulmány: Intel Pentium 2006. március 14 21. Processzorok 10. oldal Utasítások fajtái (1) Aritmetikai és logikai utasítások Egész aritmetikai műveletek Lebegőpontos aritmetikai műveletek (Bitenkénti) logikai műveletek Bittoló és forgató műveletek Összehasonlító műveletek Adatmozgató utasítások Betöltő utasítások Tároló utasítások Belső mozgató utasítások Veremműveletek Üres utasítás 2006. március 14 21. Processzorok 11. oldal Utasítások fajtái (2) Vezérlésátadó (ugró) utasítások Feltétel nélküli vezérlésátadás Feltételes vezérlésátadás (elágazás) Szubrutinhívás Processzorvezérlő utasítások Megállítás, felfüggesztés Megszakítások kiszolgálása Kölcsönös kizárás megvalósítása többprocesszoros rendszerekben Be és kiviteli utasítások Be és kiviteli eszközök és a regiszterek közötti adatmozgatás Egyéb, különleges és összetett utasítások 2006. március 14 21. Processzorok 12. oldal 4. oldal
Utasításformák (1) Három címes utasítás Formája: művelet operandus1, operandus2, eredmény Jelentése: végezd el a művelet műveletet operandus1 és operandus2 között, majd tárold az eredményt eredmény ben Példa: ADD R1, R2, R3 (add össze az R1 és az R2 regiszterek tartalmát, és tárold az eredményt az R3 regiszterben) Két címes utasítás Formája: művelet operandus1, operandus2 Jelentése: végezd el a művelet műveletet operandus1 és operandus2 között, majd tárold az eredményt operandus1 ben 2006. március 14 21. Processzorok 13. oldal Utasításformák (2) Két címes utasítás (folytatás) Példa: ADD EAX, EBX (add hozzá az EBX regiszter tartalmát az EAX regiszter tartalmához, és tárold az eredményt az EAX regiszterben) Egy címes utasítás Szükséges regiszter: akkumulátor: itt van az egyik operandus és ide kerül az eredmény is Formája: művelet operandus Jelentése: végezd el a művelet műveletet az akkumulátor és operandus között, majd tárold az eredményt az akkumulátorban Példa: ADD $C024 2006. március 14 21. Processzorok 14. oldal Utasításformák (3) Cím nélküli utasítások Az utasításnak úgynevezett implicit operandusa van, azaz az utasításban előre kódolva van a cím, amin a műveletet el kell végezni Formája: művelet Jelentése: végezd el a művelet műveletet (a műveletben meghatározott operanduson) Példa: INX (növeld meg eggyel az X indexregiszter tartalmát) 2006. március 14 21. Processzorok 15. oldal 5. oldal
Aritmetikai és logikai utasítások (1) Két alapművelet: tipikusan ADD, SUB Átviteli bittel együtt: ADC, SBC Kivonás fordítva: SUBR Biteltolások (kettő hatványával való szorzás és osztás): SHL, SHR vagy SLL, SLR, SAL, SAR Kitolt bitek az átviteli bitbe kerülnek SLL és SLR: betolt bitek 0 k (előjel nélküli vagy logikai eltolás) SAL és SAR: balról betolt bit a bal szélső bit másolata, jobbról 0 (előjeles vagy aritmetikai eltolás) 2006. március 14 21. Processzorok 16. oldal Aritmetikai és logikai utasítások (2) Bitforgatások: ROL, ROR Olyan, mint a biteltolás, de az egyik oldalt kilépő bit a másikon belép Átviteli biten keresztül: RCL, RCR Szorzás, osztás és maradékképzés (nem mindig létezik): MUL, DIV, MOD Ügyelni kell rá, hogy a szorzás eredményének hossza kétszer olyan hosszú, mint az operandusoké Szimmetria miatt az osztandó is kétszer olyan hosszú, mint az osztó Kettő hatványaival való szorzásra és osztásra a biteltolásokat célszerű használni, mert gyorsabbak 2006. március 14 21. Processzorok 17. oldal Aritmetikai és logikai utasítások (3) Logikai műveletek: NOT (negáció), AND (és), OR (megengedő vagy), XOR (kizáró vagy) Bitenként kerülnek elvégzésre Összehasonlító műveletek: CMP és TEST A CMP kivonást, a TEST logikai és műveletet végez, de nem tárolja az eredményt, csak a jelzőket állítja Eggyel való növelés és csökkentés: DEC és INC Általában gyorsabb, mint egyet hozzáadni vagy kivonni 2006. március 14 21. Processzorok 18. oldal 6. oldal
Hosszú számok kezelése Operandusok és eredmény maximális mérete rögzített Ha hosszabbra van szükség: Összeadás és kivonás Mint az írásbeli műveleteknél Legalacsonyabb helyiértékű darabokat összeadjuk, maradék az átvitelbe kerül Magasabb helyiértékeket úgy adjuk össze, hogy az átviteli bitet is hozzáadjuk Eltolások (eggyel) Belépő oldalon levő darabnál eltolás, a darabból kilépő bit az átviteli bitbe kerül Többi darabnál forgatás az átvitelen keresztül 2006. március 14 21. Processzorok 19. oldal Mi van, ha nincs szorzás? Szorzás mindig elvégezhető összeadás segítségével Biteltolásokkal gyorsítható: Felbontjuk a jobboldali tagot kettő hatványainak összegére Eltoljuk a baloldalit ezekkel a hatványokkal Összeadjuk az eltolások eredményeit 2006. március 14 21. Processzorok 20. oldal Adatmozgató utasítások Három változat: Betöltés (LD, MOV): adat másolása a központi tár egy rekeszéből egy regiszterbe, vagy a regiszter tartalmának közvetlen adattal való feltöltése Tárolás (ST, MOV): adat másolása egy regiszterből a központi tár egy rekeszébe Belső mozgatás (TR, MOV): adat másolása egy regiszterből egy másikba Általában nincs olyan utasítás, amelyik a központi tár két rekesze között másol adatot, vagy közvetlen adatot a központi tár egy rekeszébe másol 2006. március 14 21. Processzorok 21. oldal 7. oldal
Vezérlésátadások Közvetlen vezérlésátadás: JMP, BA Program végrehajtása a paraméterben megadott címtől folytatódik Feltételes vezérlésátadás: J**, B** Csak akkor ugrik ha bizonyos feltételbitek értéke megfelel, különben folytatódik a következő utasítással a végrehajtás Feltételek (példa) Z illetve NZ: zérus bit alapján S illetve NS: előjelbit alapján C illetve NC: átviteli bit alapján 2006. március 14 21. Processzorok 22. oldal Vezérlésátadások Feltételes vezérlésátadás: J**, B** (folytatás) Gyakran összehasonlító utasítás után használjuk: E illetve NE: egyenlő illetve nem egyenlő, megegyezik a Z illetve NZ feltételekkel A, AE, B, BE, NA, NAE, NB illetve NBE: nagyobb (=NS), nagyobb vagy egyenlő (NS vagy Z egyben), kisebb (S), kisebb vagy egyenlő (S vagy Z egyben), nem nagyobb (=BE), nem nagyobb vagy egyenlő (=B), nem kisebb (=AE), nem kisebb vagy egyenlő (=A) Szubrutinhívás: CALL, JSR Feltétlen vezérlésátadás, de előtte eltárolja az utasítás címét a veremben vagy a link regiszterben Párja: RET, visszatérés az eltárolt címre (szubrutinhívó utasítás után folytatódik a végrehajtás) 2006. március 14 21. Processzorok 23. oldal Be és kiviteli utasítások Gyakran nem külön utasítás, hanem az adatmozgató utasítások végzik a ki és bevitelt is Ekkor bizonyos központi tárbeli címek nem a központi tárra, hanem a megadott ki és beviteli eszközre vonatkoznak, a processzor számára azonban ez közömbös Külön betöltő és tároló utasítások be és kiviteli eszközökhöz: IN és OUT Utasítások paramétere egy speciális cím, ami hosszában is eltérhet a központi tárbeli címektől Be és kiviteli címek: portok 2006. március 14 21. Processzorok 24. oldal 8. oldal
Tartalomjegyzék 1. A processzorok feladata 2. Egy processzor felépítése, részei 3. Utasítások 4. Címzési módok 5. A processzor működése 6. Processzorok fajtái 7. Esettanulmány: Intel Pentium 2006. március 14 21. Processzorok 25. oldal Egy utasítás felépítése A 0, 1, 2 illetve 3 címes utasítások a elhelyezkedése a memóriában: műveleti kód műveleti kód 1. operandus műveleti kód 1. operandus 2. operandus műveleti kód 1. operandus 2. operandus eredmény Műveleti kód: szám, ami az utasítást azonosítja Operandusok és eredmény? Különböző megadási módjaik (címzési módok) Aktuálisan használt módot a műveleti kód jelöli 2006. március 14 21. Processzorok 26. oldal Az implicit címzés Műveleti kód meghatározza az operandusok és az eredmény helyét is 0 címes utasításoknál az egyetlen, vagy 1 címes utasításoknál a második operandus illetve az eredmény Példák MOVSB (az ESI regiszterben található memóriacím tartalmát másold át az EDI regiszterban található memóriacímre) [i386] MUL 5 (az EAX regiszter tartalmát szorozd meg 5 tel, és az eredmény magas helyiértékű bitjeit az EDX, alacsony helyiértékű bitjeit az EAX regiszterben tárolja) [i386] 2006. március 14 21. Processzorok 27. oldal 9. oldal
Közvetlen címzés Operandus maga az érték, amivel a műveletet el kell végezni Az eredmény soha nem adható meg közvetlen címzéssel, hiszen így nem memóriabeli helyet adunk meg, hanem közvetlen értéket Példák ADD 5 (növeld meg 5 tel az akkumulátor tartalmát) [M6510] ADD 5, EAX (növeld meg 5 tel az EAX regiszter tartalmát) [i386] ADD R1, 5, R7 (adj 5 öt az R1 regiszter tartalmához, és tárold az eredményt az R7 regiszterben) [PowerPC] 2006. március 14 21. Processzorok 28. oldal Regisztercímzés Operandus a megadott regiszterben van, illetve az eredményt a megadott regiszterben kell elhelyezni Példák ADD EAX, EBX (növeld meg az EAX regiszter tartalmát az EBX regiszter tartalmával) [i386] ADD R1, R7, R13 (add össze az R1 és az R7 regiszterek tartalmát, majd tárold az eredményt az R13 regiszterben) [PowerPC] 2006. március 14 21. Processzorok 29. oldal Abszolut címzés Az operandus a memóriában helyezkedik el a megadott címen Általában egyik operandus lehet csak abszolut cím, a többinek regiszternek kell lennie Példa ADD EAX, [C000] (növeld meg az EAX regiszter tartalmát a 49152. memóriacímtől kezdődően tárolt gépi szó tartalmával) [i386] JMP C000H (folytasd a végrehajtást a 49152. memóriacímtől kezdődően tárolt utasítástól kezdve) [i386] 2006. március 14 21. Processzorok 30. oldal 10. oldal
Indirekt címzés Regiszter indirekt vagy memória indirekt Operandusban megadott regiszter vagy memóriacím nem az értéket tartalmazza, hanem egy memóriacímet, ahol az érték található Példák ADD EAX, [EBX] (növeld meg az EAX regiszter tartalmát az EBX regiszterben található memóriacímtől kezdődően tárolt gépi szóval) [i386] JMP [C000] (folytasd a végrehajtást a 49152. memóriacímen található memóriacímtől kezdődően tárolt utasítástól kezdve) 2006. március 14 21. Processzorok 31. oldal Báziscímzés Abszolut címzés kiegészítése: nem abszolut címet adunk meg, hanem egy explicit vagy implicit megadott báziscímtől való távolságot Szükség van hozzá egy bázisregiszterre Rekordmezők elérésére jól használható Példa ADD EAX, [EBX+1F] (növeld meg az EAX regiszter tartalmát az EBX regiszterben található címtől 31 bájtnyira kezdődően tárolt gépi szóval) [i386] 2006. március 14 21. Processzorok 32. oldal Indexelt címzés A báziscímzéshez hasonló, de más a filozófia A cím rögzített, az indexet regiszter tartalmazza Tömbök indexeléséhez használhatjuk Néha nem bájtonként, hanem gépi szavanként lépkedhetünk Példa ADD EAX, [C000+4*ESI] (növeld meg az EAX regiszter tartalmát a C000 memóriacímtől az ESI regiszter tartalmának négyszerese darab bájtnyira kezdődően tárolt gépi szóval) [i386] 2006. március 14 21. Processzorok 33. oldal 11. oldal
Indexelt báziscímzés Rekordban található tömb indexeléséhez Példa: ADDEAX, [EBX+1F+4*ESI] (növeld meg az EAX regiszter tartalmát az EBX regiszterben található címtől 31 plusz az ESI regiszter tartalmának négyszerese darab bájtnyira kezdődően tárolt gépi szóval) [i386] A példában EBX tárolja a feldolgozás alatt álló rekord kezdőcímét, a rekordban feldolgozandó tömb a rekord kezdetétől számítva 1F címre kezdődik, és ott éppen az ESI által tartalmazott indexű elemet dolgozzuk fel, ahol az elemek mérete 4 byte 2006. március 14 21. Processzorok 34. oldal Tartalomjegyzék 1. A processzorok feladata 2. Egy processzor felépítése, részei 3. Utasítások 4. Címzési módok 5. A processzor működése 6. Processzorok fajtái 7. Esettanulmány: Intel Pentium 2006. március 14 21. Processzorok 35. oldal Az utasításciklus lépései Utasítás beolvasása a memóriából Fetch Utasítás dekódolása Operandusok beolvasása a memóriába (ha vannak) Művelet elvégzése Execute Eredmény kiírása a memóriába (ha van) Utasításmutató léptetése a következő utasításra (hacsak az utasítás nem vezérlésátadó utasítás volt) 2006. március 14 21. Processzorok 36. oldal 12. oldal
Utasítás beolvasása Be kell olvasni az utasítás műveleti kódját és az operandusok címeit Két lehetőség: Rögzített hosszú utasítások: egyetlen gépi szó beolvasása Változó hosszú utasítások: előbb meg kell határozni a műveleti kód alapján az utasítás hosszát Előbb (részlegesen) értelmezni kell a műveleti kódot A beolvasást szokták prefetch nek is hívni 2006. március 14 21. Processzorok 37. oldal Utasítás dekódolása Fel kell bontani az utasítást műveleti kódokra és operandusokra Műveleti kód alapján meg kell határozni a használt címzési módokat 2006. március 14 21. Processzorok 38. oldal Operandusok beolvasása Közvetlen címzéssel megadott utasításokat nem kell beolvasni, azok már benn vannak Regiszterben tárolt operandusokat át kell vinni az ALU ba, vagy az FPU ba az utasítástól függően Memóriában tárolt operandusokat onnan kell beolvasni Összetett címzési módok esetén ki kell számítani a címet 2006. március 14 21. Processzorok 39. oldal 13. oldal
Művelet elvégzése Aritmetikai és logikai műveleteket az ALU vagy az FPU végzi Adatmozgatásnál kimarad ez a fázis Vezérlésátadás a CU feladata: az utasításmutatót kell átírnia a megfelelő címre, ha a feltétel teljesül Processzorvezérlés szintén a CU feladata 2006. március 14 21. Processzorok 40. oldal Eredmény kiírása Operandusok beolvasásának fordítottja 2006. március 14 21. Processzorok 41. oldal Utasításmutató léptetése Utasításmutatót a következő utasítás elejére kell állítani Következő utasítás helye: Rögzített hosszú utasításoknál a következő gépi szó egy gépi szó méretével kell növelni az utasításmutatót Változó hosszú utasításoknál a prefetch fázisban kiszámított hosszal kell növelni az utasításszámlálót 2006. március 14 21. Processzorok 42. oldal 14. oldal
Huzalozott és mikroprogramozott utasítások Egy utasítás végrehajtása történhet teljesen a hardver részéről Gyorsabb végrehajtás Bonyolultabb hardver Másik módszer: mikroprogramozás Utasítás végrehajtása egy egyszerű program, úgynevezett mikroprogram végrehajtása, amely csak huzalozott utasításokból áll Lassabb Hardver egyszerűbb Általában az egyszerű utasítások huzalozottak, az összetettek mikrprogramozottak 2006. március 14 21. Processzorok 43. oldal Futószalag (pipeline) Az utasításfeldolgozás lépései a processzor különböző részeit használják Ötlet: futószalag technika amíg a processzor az egyik utasítást végrehajtja, közben a következőnek az operandusait olvashatja Összes fázis elvégezhető külön külön Utasításmutató 1 2 Eredmény 1 2 Művelet 1 2 Operandusok 1 2 Dekódolás 1 2 Beolvasás 1 2 Futószalag nélkül 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 11 1 2 3 4 5 6 7 8 9 10 11 12 Futószalaggal 2006. március 14 21. Processzorok 44. oldal A futószalag feldolgozás problémái Központi tár elérése lassabb, mint a regisztereké ilyenkor az egész futószalagnak várnia kell Lehetséges megoldás: csak az adatmozgató utasítások érjék el a központi tárat, a többi regiszterekből dolgozzon Adatmozgatásnál nincs végrehajtási fázis Ritkábban áll meg a futószalag Mikroprogramozott utasítások lassabbak Lehetséges megoldás: minden utasítás legyen huzalozott Vezérlésátadások végrehajtásakor a futószalag eleje nem a megfelelő utasításokat dolgozza fel 2006. március 14 21. Processzorok 45. oldal 15. oldal
Vezérlésátadások futószalag feldolgozása (1) Futószalag törlése Vezérlésátadó utasításnál, ha a végrehajtás új címen folytatódik, töröljük a futószalag elejéről az elkezdett, de nem megfelelő utasításokat Egyszerű, kézenfekvő megoldás Gyakori vezérlésátadásnál (például ciklus) jelentősen lassítja a működést 2006. március 14 21. Processzorok 46. oldal Vezérlésátadások futószalag feldolgozása (2) Késleltetett ugrás Vezérlésátadó utasítást követő fix darabszámú utasítás mindenképpen végrehajtásra kerül, akár új címen folytatódik a végrehajtás, akár nem Egyszerű hardver Hatékony megoldás Nehezen áttekinthető assembly kód Új architektúrán, ha hosszabb a futószalag, újra kell írni vagy fordítani a programot A vezérlésátadás feltétele nem függhet az őt követő utasításoktól 2006. március 14 21. Processzorok 47. oldal Vezérlésátadások futószalag feldolgozása (3) Elágazó futószalag Vezérlésátadó utasítás dekódolása után két ágon folytatódik a feldolgozás, amíg el nem dől, hogy megtörténik e a vezérlésátadás Hatékony megoldás Mivel több egymást követő vezérlésátadó utasítás lehet, így esetleg sokfelé kell ágazni, ami drága és bonyolult hardvert eredményezhet 2006. március 14 21. Processzorok 48. oldal 16. oldal
Vezérlésátadások futószalag feldolgozása (4) Programág előrejelzés Processzor megjósolja, hogy be fog e következni a vezérlésátadás Jóslás történhet statisztika alapján (dinamikus) műveleti kód egyik bitje alapján (statikus) Statikus módszernél különösen egyszerű hardver Dinamikus módszer is könnyebben megvalósítható, mint az elágazó futószalag Nagy valószínűséggel helyes a jóslat Előfordulnak téves jóslatok, ilyenkor ki kell üríteni a futószalag elejét, ami lassulást okoz 2006. március 14 21. Processzorok 49. oldal Párhuzamos futószalagok Prefetchrész után a futószalag több felé ágazik Több utasítás dekóder Több ALU Lebegőponto műveleteknek lehet külön futószalag, itt ALU helyett az FPU van: ekkor a prefetch nek kell eldöntenie, hogy melyik futószalagra kerüljön az utasítás Futószalagok párhuzamosan dolgozzák fel az utasításokat Néha lehetséges átjárás is a futószalagok között 2006. március 14 21. Processzorok 50. oldal A párhuzamos futószalagok problémái Nem párhuzamosíthatók olyan utasítások, amelyek közül az utóbbi bemenő paramétere az előbbi eredménye Nem, vagy nehezen párhuzamosíthatók olyan utasítások, amelyek végrehajtási ideje jelentősen eltér Prefetch nek ezeket is el kell tudnia dönteni Bonyolult processzor 2006. március 14 21. Processzorok 51. oldal 17. oldal
További gyorsítási lehetőségek Processzor tartalmazhat több regiszterkészletet is, például minden futószalagnak sajátot Át lehet nevezni regisztereket, hogy melyik legyen a valódi Fenn kell tartani a konzisztenciát Bonyolult Előfeldolgozó egység felbonthatja az utasításokat mikroutasításokra Hasonló a mikroprogramozáshoz, de itt külön egység csinálja, minden utasításra egyformán Futószalagra már csak egyszerű utasítások kerülnek 2006. március 14 21. Processzorok 52. oldal Kivételek (1) Processzor nem mindig hajthat végre bármilyen utasítást Érvénytelen utasítás Utasítás végrehajtása nem lehetséges (nem létező központi tárbeli cím, nem létező periféria stb.) Többfelhasználós gépen: utasítás végrehajtása másik felhasználó adataihoz férne hozzá utasítás végrehajtása másik felhasználó programjának működését befolyásolná utasítás végrehajtása a gép működését olyan szinten változtatná meg, hogy az a többi felhasználót is érinti Processzor belső hibája (pl. túlmelegedés) Ilyenkor úgynevezett kivétel keletkezik 2006. március 14 21. Processzorok 53. oldal Kivételek (2) Kivétel: kivételes állapot Utasítások végrehajtása felfüggesztésre kerül Utasításmutató és a fontos regiszterek elmentésre kerülnek a központi tárban Processzor egy kivétel okától függően meghatározott címen levő utasítássorozat (kivételkezelő rutin) végrehajtásába kezd Ennek az utasítássorozatnak végrehajtása után a processzor a kivétel okától (típusától) függően különbözőképpen viselkedhet Kivételkezelő rutin kezdőcíme: Táblázat tartalmazza Különböző kiváltó okokhoz különböző rutinok 2006. március 14 21. Processzorok 54. oldal 18. oldal
Kivételek (3) Három kivételtípus: Hiba (fault): elmentett regiszterek és utasításmutató visszatöltődik, és a sikertelen utasítást újra megkísérli végrehajtani a processzor Csapda (trap): elmentett regiszterek és utasításmutató visszatöltődik, de ez utóbbi tartalma növelésre kerül, hogy a következő utasításra mutasson, így a processzor kihagyja a kivételt okozó utasítást Vetélés (abort): nem kerülnek visszatöltésre az elmentett adatok, mert az eredeti utasítások végrehajtása nem folytatható, ehelyett új utasítássorozat végrehajtása kezdődik 2006. március 14 21. Processzorok 55. oldal Megszakítások (1) Processzornak van egy speciális (INTR) lába (vezeték), amire ha jel érkezik, megszakítás történik Processzor a sínről leolvas egy számot, ami a megszakítást kiváltó egységet azonosítja Utasítások végrehajtása felfüggesztésre kerül Utasításmutató és a fontos regiszterek elmentésre kerülnek a központi tárban Processzor egy megszakítás kiváltójától függően meghatározott címen levő utasítássorozat (megszakításkezelő rutin) végrehajtásába kezd Megszakítás végén az elmentett regiszterek és utasításmutató visszatöltődnek, és az utasítások végrehajtása folytatódik 2006. március 14 21. Processzorok 56. oldal Megszakítások (2) Megszakításkezelő rutin kezdőcíme Ugyanaz a táblázat tartalmazza, mint a kivételkezelőkét Különböző kiváltó egységekhez különböző rutinok Megszakítás történhet utasítás végrehajtásának közepén is A processzornak vagy be kell fejezni előbb ezt az utasítást Vagy vissza kell térnie az utasítás végrehajtása előtti állapotra Megszakítás célja Külső egység által kezdeményezett kommunikáció Processzoron kívüli hibák 2006. március 14 21. Processzorok 57. oldal 19. oldal
Megszakítások (3) Megszakítások egy része maszkolható Miután a processzor leolvasta a sínről a megszakítás számát, megvizsgálja, hogy maszkolt e Ha a megszakítás maszkolt, figyelmen kívül hagyja Nem minden megszakítás maszkolható: NMI, nem maszkolható megszakítás Elvileg csak nagyon fontos események jelzését szolgálja (pl. ég a gép) Gyakorlatban néha egyszerűbb dolgokhoz is felhasználják 2006. március 14 21. Processzorok 58. oldal Kivételek és megszakítások (1) Gyakran keverik őket! Megszakítás kívülről jön, kivétel a processzorban keletkezik Megszakítás aszinkron (utasítás végrehajtása közben is bármikor felléphet), kivétel szinkron (utasítás végrehajtásának meghatározott fázisában keletkezik) Megszakítás után a program mindig folytatható 2006. március 14 21. Processzorok 59. oldal Megszakítások és kivételek (2) Megszakítás vagy kivétel kezelőrutinjában is történhet kivétel, illetve jöhet közben megszakítás is Kezelőrutin elején a megszakításokat gyakran maszkolják Ha nem maszkolt megszakítás vagy kivétel történik, a kezelőrutin is megszakad, majd folytatódik, ha folytatható Probléma: ha egy kivétel kezelőrutinjának egy utasítása ugyanazt a kivételt okozza Végtelen ciklus Kivétel szintek: másik táblázatban keresi a kezelőrutint, ezért másik rutin kezeli az újabb kivételt 2006. március 14 21. Processzorok 60. oldal 20. oldal
Megszakítások és kivételek (3) Másik probléma: táblázatban érvénytelen cím szerepel megszakítás vagy kivétel kezelőrutinjához Kettős hiba: speciális kivételkezelő rutin indul el Kivétel szintek (ld. előbb): magasabb szintű táblázatbeli kezelőrutin indul el Processzor leállása (shutdown) 2006. március 14 21. Processzorok 61. oldal Védelmi szintek (1) Ha egy gépen több felhasználó dolgozik, akkor meg kell védeni a programjaikat, hogy hozzáférhessenek másik felhasználók adataihoz, esetleg a gép működését veszélyeztessék Operációs rendszernek viszont mindenhez hozzá kell férnie (már csak azért is, hogy meghatározza, melyik más program mihez férhet hozzá) Operációs rendszer és a felhasználói programok két különböző módban, úgynevezett védelmi szinten működnek (rendszer és felhasználói) 2006. március 14 21. Processzorok 62. oldal Védelmi szintek (2) Rendszer (kernel) szint Minden (szabályos) utasítás végrehajtható Minden regiszter elérhető Központi tár minden területéhez hozzá lehet férni Minden be és kiviteli egységhez hozzá lehet férni Felhasználói (user) szint Processzorvezérlő utasítások egy része nem hajtható végre (pl. megszakítások maszkolása) Csak a felhasználói regiszterek érhetők el Központi tárnak csak meghatározott része hozzáférhető Csak meghatározott be és kiviteli egységek hozzáférhetők 2006. március 14 21. Processzorok 63. oldal 21. oldal
Védelmi szintek (3) Megszakítások és kivételek kezelő rutinjai mindig rendszer védelmi szinten kerülnek végrehajtásra Szintek közötti váltás Felhasználói rendszer: megszakítás, kivétel történik, vagy felhasználói program szubrutint hív az operációs rendszer területéről (rendszerhívás) Rendszer felhasználói: visszatérés megszakítás vagy kivétel kezelőjéből vagy rendszerhívásból Veszély: mi van, ha a felhasználói program az operációs rendszer szubrutinjának nem az elejét hívja meg (pl. valamilyen ellenőrzés átugrása) 2006. március 14 21. Processzorok 64. oldal Védelmi szintek (4) Megoldás: kapuk alkalmazása Táblázatban vannak felsorolva Táblázat elemei az operációs rendszer szubrutinjainak kezdőcímei Felhasználói program csak kaput hívhat, így nem ugorhat a szubrutin közepébe Rendszer védelmi szintről nem hívható felhasználói szintű szubrutin, mert az veszélyes lenne Illeszkedő szintű szubrutinok: olyan szinten kerülnek végrehajtásra, amilyenről hívták őket 2006. március 14 21. Processzorok 65. oldal Tartalomjegyzék 1. A processzorok feladata 2. Egy processzor felépítése, részei 3. Utasítások 4. Címzési módok 5. A processzor működése 6. Processzorok fajtái 7. Esettanulmány: Intel Pentium 2006. március 14 21. Processzorok 66. oldal 22. oldal
CISC processzorok Complex Instruction Set, azaz összetett utasításkészlet Ezek a hagyományos processzorok Sok, gyakran összetett utasítások Sokféle változatos címzési mód Utasítások egy része mikroprogramozott Változó utasításhossz Utasítások nagy része elérheti a központi tárat is Programozása assembly nyelven hatékony Problémák: Nehezen gyorsítható Assemblyben programozni nehéz 2006. március 14 21. Processzorok 67. oldal RISC processzorok (1) Átgondolt tervezés: Milyen kódot képes generálni egy magasszintű nyelv fordítóprogramja? Csak egyszerű utasításokat használ összetettebb műveleteket a magasszintű nyelven is algoritmusok valósítják meg, ezt a fordító nem képes felismerni, és egyetlen összetett utasítással helyettesíteni Egyszerű címzési módokat alkalmaz szokásos műveletek: egyszerű változók, mutató műveletek, valamint tömbök elemeinek, rekordok mezőinek elérése nehéz felismerni olyan összetett dolgokat, mint például egy rekord tömb mezője egyik elemének elérése Milyen utasításokat, címzési módokat lehet hatékonyan megvalósítani? Lásd: eddig 2006. március 14 21. Processzorok 68. oldal RISC processzorok (2) Reduced Instruction Set, azaz egyszerű utasításkészlet Egyszerű utasítások Eleinte kevés utasítás, ma már több, de továbbra is egyszerűek Kevés, egyszerű címzési mód Minden utasítás huzalozott Csak adatmozgató utasítások érhetik el a memóriát: load and store modell Rögzített utasításhossz Minden utasítás egy órajel, kivéve a load and store műveletek 2006. március 14 21. Processzorok 69. oldal 23. oldal
VLIW processzorok A RISC sem elég egyszerű: utasítások párhuzamosítása bonyolult hardvert eredményez Ötlet: Very Long Instruction Word, azaz nagyon hosszú utasításszó Nem egy, hanem annyi utasítás kerül egyszerre beolvasásra, ahány futószalag van Minden futószalag ennek a hosszú utasításszónak egy rögzített darabját hajtja végre Párhuzamosítás problémáival így nem a processzor, hanem a fordítóprogram törődik 2006. március 14 21. Processzorok 70. oldal CISC RISC VLIW problémák Probléma: CISC processzort a kompatibilitását megőrizve kell gyorsítani Előfeldolgozó egység, ami mikroutasításokra bontja RISC processzor, ami a mikroutasításokat dolgozza fel, melyek már RISC utasításkészletet alkotnak A kettő természetesen fizikailag egybe van integrálva Probléma: VLIW processzor új típusában több futószalag lehet, mint az előzőben Magas szintű nyelv fordítóprogramja ne gépi kódra, hanem köztes bájtkódra fordítson Processzorhoz mellékelt szoftver végezze el a tényleges fordítást futtatás előtt közvetlenül Így egy CISC kel való kompatibilitás is megőrizhető 2006. március 14 21. Processzorok 71. oldal Ismert processzorcsaládok (1) IBM 360/370 sorozat és utódainak processzora 32 bites nagyon CISC Régen vízhűtéses a nagy teljesítmény miatt DEC VAX 32 bites, még az előzőnél is CISC ebb MOS6510 (Commodore 64) 8 bites Legfeljebb 1 címes utasítások Motorola 68000 32 bites CISC 2006. március 14 21. Processzorok 72. oldal 24. oldal
Ismert processzorcsaládok (2) Motorola/IBM PowerPC 32 vagy 64 bites RISC SunSPARC (eredetileg: RISC I illetve RISC II) 32 vagy 64 bites RISC MIPS 32 vagy 64 bites nagyon RISC Intel Pentium és elődei/utódai Következő témakörünk 2006. március 14 21. Processzorok 73. oldal Tartalomjegyzék 1. A processzorok feladata 2. Egy processzor felépítése, részei 3. Utasítások 4. Címzési módok 5. A processzor működése 6. Processzorok fajtái 7. Esettanulmány: Intel Pentium 2006. március 14 21. Processzorok 74. oldal Az Intel Pentium története (1) Család első processzora: 4004 (számológépekbe) 12 bites címsín (4 kb címezhető terület) 8 bites utasítások 4 bites adatok (külön memóriában!) 46 utasítás, 41 db 8 bit és 5 db 16 bit hosszú 16 db 4 bites regiszter 3 szintes belső szubrutin verem 470 khz órajel Utódja: 4040 60 utasítás 24 regiszter 7 szintes belső szubrutin verem 13 bites címsín az utasításmemóriához 2006. március 14 21. Processzorok 75. oldal 25. oldal
Az Intel Pentium története (2) Első 8 bites processzor: 8008 Eredetileg terminálba tervezték Egyetlen 8 bites sín 8 bemeneti és 24 kimeneti port Utódja: 8080 16 bites cím és 8 bites adatbusz 7 db 8 bites regiszter (ebből 6 párosítva, 3 db 16 bitesként is használható) 16 bites utasítás és 16 bites veremmutató 256 be és kiviteli port (tetszőleges irányban) Még újabb: 8085 Jelzőbit regiszter Megszakítások 2006. március 14 21. Processzorok 76. oldal Az Intel Pentium története (3) Első 16 bites processzor: 8086 16 bites cím és adatsín 6 B prefetch sor (kezdetleges futószalag technika) 4 db 16 bites általános célú regiszter (használható 8 db 8 bitesként is) 4 db mutatóregiszter (köztük a veremmutató) 65536 db 8 bites be és kiviteli port (használható párosával 16 bitesként) 1 GB címtér ún. szegmensregiszterek segítségével IBM PC processzora: 8088 Csak 8 bites külső adatsín (olcsóbb alaplap) 4 B prefetch sor 2006. március 14 21. Processzorok 77. oldal Az Intel Pentium története (4) A 8086 és a 8088 utódai: 80186 és 80188 Új utasítások, gyorsabb feldolgozás Később: 80286 és 80288 Ezek közül a 80286 a sikeres Védett mód: védelmi szintek és 16 MB címzés Legnagyobb újítás: 80386 (i386) 32 bites sín (80386SX esetén csak belül, 80386DX esetén kívül is) Fejlett memóriakezelési módszerek Futószalag feldolgozás Órajel: 25 40 Mhz Mobil gépekbe: 80386SL Konkurrencia: Am386 (kompatibilis) 2006. március 14 21. Processzorok 78. oldal 26. oldal
Az Intel Pentium története (5) Matematikai koprocesszorok Lebegőpontos számításokhoz Minden processzornak megfelelő koprocesszor: 8086/8088 8087 80286 80287 80386 80387 Processzor és koprocesszor egybeépítve: 80486 Nem működő koprocesszor kikapcsolva: 80486SX, a teljes modell a 80486DX 80486SX hez 80487 koprocesszor Belső gyorsítótár, fejlettebb sínkezelés Belső órajel nagyobb, mint a külső: SX2 és DX2 (kétszeres), később DX4 (háromszoros) 2006. március 14 21. Processzorok 79. oldal Az Intel Pentium története (6) A 80486 konkurrens gyártói: AMD, Cyrix, IBM, Texas Instruments, Chips and Technologies Szuperskalár processzor: Pentium Két futószalag: U (minden utasításra) és V (egyszerűbb utasításokra) Lebegőpontos futószalag 64 bites adatsín (gyorsabb memóriahozzáférés) Külső órajel: 60 vagy 66 MHz (később akár 75 83 is) Belső órajel: 60 233 MHz Multimédia utasítások: Pentium MMX Egy utasítás egyszerre több adaton (SIMD) 2006. március 14 21. Processzorok 80. oldal Az Intel Pentium története (7) A hatodik generáció: Pentium Pro Mikroutasításokra bontó előfeldolgozó egység Utasítások átrendezése Spekulatív végrehajtás: elágazás két ágát párhuzamosan Több futószalag Többprocesszoros működés (maximum 4) Másodszintű gyorsítótár a lapkán Pentium MMX + (Pentium Pro ε) = Pentium II Hasonlít a Pentium Pro hoz, de legfeljebb 2 processzor tehető egy gépbe Másodszintű gyorsítótár a processzorkártyán 2006. március 14 21. Processzorok 81. oldal 27. oldal
Az Intel Pentium története (8) Multimédiás utasításkészlet háromdimenziós számításokhoz: Pentium III Többi fejlesztés csak a teljesítményt érinti Nagyon magas órajel: Pentium 4 Egy utasítás több órajelet vehet igénybe, mint Pentium III nál Összességében mégis gyorsabb Újabb modellek: két processzor szimulálása (hyperthreading) Mobil gépek Pentiuma: Pentium M Kétmagos Pentium 4: Pentium D Két mag és azokon belül is két processzor szimulálása: Pentium Extreme Edition 2006. március 14 21. Processzorok 82. oldal Az Intel Pentium története (9) Olcsó processzorok: Celeron Pentium II, Pentium III, Pentium 4 és Pentium M processzorok olcsó megfelelője Nincs vagy csak kevesebb másodszintű gyorsítótár Csak egyprocesszoros működésre alkalmas Szerverek processzorai: Xeon Pentium II, Pentium III, Pentium 4 és Pentium M processzorok megfelelője szerver gépekbe Többprocesszoros működés (4 8 processzor) Több gyorsítótár 2006. március 14 21. Processzorok 83. oldal Az Intel Pentium története (10) Konkurrens kompatibilis processzorok: AMD: K5, K6, K6 2, K6 III, Athlon, olcsó változatok: Duron és Sempron NexGen: 5x86 Cyrix: 6x86, 6x86MX 64 bites processzorok: Intel: Itanium, Itanium 2 32 bites módban lassú, 64 bites módja teljesen más Nem túl sikeres AMD: Athlon 64, Athlon 64 X2 (kétmagos), Turion 64 (mobil rendszerekbe), Opteron (szerverekbe) 64 bites mód a 32 bites mód kiterjesztése 2006. március 14 21. Processzorok 84. oldal 28. oldal
A Pentium blokkvázlata 64 bites sín csatoló 64 bit Adatgyorsítótár 256 bit Prefetch Buffer ek 256 bit 64 bit ALU Kódgyorsítótár 256 bit 32 bit 32 bit Regiszter készlet 32 bit 32 bit 32 bit Utasításágelőrejelzés 32 bit ALU 64 bit 64 bit FPU 2006. március 14 21. Processzorok 85. oldal A Pentium futószalagjai Lebegőpontos PREFETCH PREFETCH Utasítás dekódolás Cím generálás Kiírás Utasítás dekódolás Cím generálás Végrehajtás Végrehajtás Kiírás Egész Utasítás dekódolás Cím generálás Konverzió 80 bitre Végrehajtás 1 Végrehajtás 2 Kerekítés, regiszterbe írás Hibadetektálás 2006. március 14 21. Processzorok 86. oldal APentium legfontosabb regiszterei EAXAH AX AL CS Felhasználói szint EBXBH BX BL SS ECXCH CX CL DS EDXDH DX DL ES ESI SI FS EDI DI GS EBP BP Szegmensregiszterek Rendszer szint ESP SP GDTR Általános célú regiszterek IDTR EIP IP LDTR Utasításmutató LDTR EFLAG FLAG Leírótábla regiszterek Állapotregiszter 2006. március 14 21. Processzorok 87. oldal 29. oldal
Az EFLAG regiszter (1) 0 0 0 0 0 0 0 0 0 0 I V V A V R I I D C F 0 N M T P F Rendszer szintű vezérlő kapcsolók IOPL: Be és kiviteli műveletek védelmi szintje IF: Megszakítások engedélyezve TF: Töréspont minden utasítás után Felhasználói szintű vezérlő kapcsolók DF: füzérutasítások (speciális ciklus) iránya Felhasználói szintű jelzők OF: túlcsordulás (előjeles műveletek eredményénél) SF: előjel (eredmény negatív) ZF: zéró (eredmény nulla) 2006. március 14 21. Processzorok 88. oldal I O PL O F D F I T S Z F F F F 0 A F 0 P F 1 C F Az EFLAG regiszter (2) 0 0 0 0 0 0 0 0 0 0 I V V A V R I I D C F 0 N M T P F Felhasználói szintű jelzők (folytatás) AF: félátvitel (átvitel az alsó félbájt utolsó bitjéről) BCD aritmetikánál használatos PF: paritás (az eredmény alsó bájtjában páros számú 1 bit van) CF: átvitel (a legfelső bitről átvitel) 2006. március 14 21. Processzorok 89. oldal I O PL O F D F I T S Z F F F F 0 A F 0 P F 1 C F APentium rendszerregiszterei CR0 CR2 CR3 CR4 PSW Vezérlő regiszterek MSR0 MSR1... Modell specifikus regiszterek DR0 DR1 DR2 DR3 DR6 DR7 Nyomkövető regiszterek 2006. március 14 21. Processzorok 90. oldal 30. oldal
A Pentium lebegőpontos regiszterei ST(0) ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7) Numerikus regiszterek (verem struktúrában címzendők) SW Állapotszó regiszter TW Toldalékszó regiszter CW Vezérlőszó regiszter EP FOO FIP FOP 2006. március 14 21. Processzorok 91. oldal 0 FCS 0 FOS Hibára mutató regiszterek FIP EIP másolata FCS CS másolata FOP műveleti kód FOS operandus szegmenscíme FOO operandus ofszet címe A Pentium címzési módjai (1) Közvetlen címzés Regisztercímzés Abszolút címzés Báziscímzés Indexelt címzés E fenti három tetszőleges kombinációja Nem használható bármely regiszter bázisregiszterként illetve indexregiszterként Veremcímzések: ESP regiszter értéke csökken verembe írás előtt vagy veremből olvasás után (lefelé bővülő verem!) 2006. március 14 21. Processzorok 92. oldal A Pentium címzési módjai (2) Regiszterek elérése: Processzor 32 vagy 16 bites módban van Módnak nem megfelelő regiszter elérése: méret prefix (plusz egy bájt és plusz egy órajel!) 8 bites regiszter elérése: utasítások utolsó bitje 0 Memória elérése: Cím és operandus mérete is a processzor módjának felel meg Felülbírálhatóegy egy prefix szel (plusz egy egy bájt és plusz egy egy órajel) 2006. március 14 21. Processzorok 93. oldal 31. oldal
A Pentium utasításformátuma műv. kód 1 műv. kód 2 mod r/m s i b cím vagy adat Minden utasítás része a fenti formának Egyszerű utasításoknál csak egy bájt a műv. kód Összetett utasításoknál (pl. újabb utasítások, lebegőpontos utasítások) két bájt műv. kód van A mod r/m a címzési módot határozza meg, és regisztercímzéseknél a regisztert Az s i bbájt bázis és indexelt címeknél használatos A cím vagy adat mérete 8, 16 vagy 32 bit lehet 2006. március 14 21. Processzorok 94. oldal A Pentium utasításkészlete (1) Egész aritmetikai utasítások: ADD, ADC, SUB, SBB, MUL, IMUL, DIV, IDIV, INC, DEC, NEG Logikai utasítások: AND, OR, XOR, NOT Bittoló és forgató utasítások: SHL, SHLD, SHR, SHRD, SAL, SAR, RCL, RCR Bitműveletek: BSF, BSR, BT, BTC, BTR, BTS Összehasonlítások: CMP, TEST BCD kezelő utasítások: AAA, AAD, AAM, AAS, DAA, DAS Különböző méretű adatok konverziója: CWD, CDQ, CBW, CWDE 2006. március 14 21. Processzorok 95. oldal A Pentium utasításkészlete (2) Adatmozgató utasítások: MOV, MOVSX, MOVZX, XCHG, LEA, LAHF, SAHF, IN, OUT Verem utasítások: PUSH, POP, PUSHA, PUSHAD, PUSHF, PUSHFD, POPA, POPAD, POPF, POPFD Vezérlésátadások: JMP, JCXZ, JECXZ, JA, JAE, JB, JBE, JC, JE, JG, JGE, JL, JLE, JNA, JNAE, JNB, JNBE, JNC, JNE, JNG, JNGE, JNL, JNLE, JNO, JNP, JNS, JNZ, JO, JP, JPE, JPO, JS, JZ, CALL, RET, INT, IRET Üres utasítás: NOP 2006. március 14 21. Processzorok 96. oldal 32. oldal
A Pentium utasításkészlete (3) Ciklus utasítások: LOOP, LOOPZ, LOOPE, LOOPNZ, LOOPNE Sztring utasítások: Prefix: REP, REPE, REPZ, REPNE, REPNZ Utasítás: MOVS, MOVSB, MOVSW, MOVSD, LODS, LODSB, LODSW, LODSD, STOS, STOSB, STOSW, STOSD, CMPS, CMPSB, CMPSW, CMPSD, SCAS, SCASB, SCASW, SCASD, INS, INSB, INSW, INSD, OUTS, OUTSB, OUTSW, OUTSD Irány megadása: STD, CLD Összetett utasítások: BSWAP, XADD, CMPXCHG, CMPXCHG8B, XLAT, XLATB, ENTER, LEAVE 2006. március 14 21. Processzorok 97. oldal A Pentium utasításkészlete (4) Összetett utasítások: BSWAP, XADD, CMPXCHG, CMPXCHG8B, XLAT, XLATB, ENTER, LEAVE Jelzők beállítása: STC, CLC, CMC, SETA, SETAE, SETB, SETBE, SETC, SETE, SETG, SETGE, SETL, SETLE, SETNA, SETNAE, SETNB, SETNBE, SETNC, SETNE, SETNG, SETNGE, SETNL, SETNLE, SETNO, SETNP, SETNS, SETNZ, SETO, SETP, SETPE, SETPO, SETS, SETZ Ellenőrzés: BOUND, INTO 2006. március 14 21. Processzorok 98. oldal A Pentium utasításkészlete (5) Szegmenstöltés: LDS, LES, LFS, LGS, LSS, LSL Rendszervezérlő utasítások: LGDT, LIDT, LLDT, LTR, LMSW, SGDT, SIDT, SLDT, STR, SMSW, RDMSR, WRMSR, CLI, STI, CLI, WAIT, HLT, ARPL, VERR, VERW, INVD, INVLPG, WBINVD, LOCK, RSM 2006. március 14 21. Processzorok 99. oldal 33. oldal
Megszakítások apentiumon Processzor INTR lábára jel érkezik, a buszról leolvasható egy szám, az ún. megszakításvektor Kezelőrutinok címét az IDT tartalmazza Az IDT 256 kapuból áll, minden vektor egy egy kaput azonosít Az IDT elejére az IDTR rendszerregiszter mutat Ezek a megszakítások maszkolhatók Processzornak van NMI lába is, ez a megszakítás nem maszkolható NMI esetén a buszon nincs megszakításvektor, az NMI vektora rögzített (02H) 2006. március 14 21. Processzorok 100. oldal Kivételek a Pentiumon (1) Kivételek kapui is az IDT ben vannak: 0 31 kapuk fenntartottak erre a célra (kivéve a 2) Három fajta kivétel: hiba, csapda, vetélés Bizonyos kivételeknél hibakód kerül a verembe Kivételek: 00H Osztáshiba (hiba) 01H Töréspont (TF vagy DR) (csapda vagy hiba) 03H Töréspont CCH műveleti kóddal (csapda) 04H INTO utasítás túlcsorduláskor (csapda) 05H BOUND utasítás határsértés (csapda) 06H Érvénytelen műveleti kód (hiba) 2006. március 14 21. Processzorok 101. oldal Kivételek a Pentiumon (2) Kivételek: 07H Matematikai koprocesszor nincs jelen (hiba) 08H Kettős hiba (hiba) 09H Koprocesszoroperandus határsértés (hiba) 10H Érvénytelen feladatleíró (hiba vagy csapda) 11H Nem jelenlevő szegmens (hiba) 12H Veremhiba (hiba) 13H Általános védelmi hiba (hiba) 14H Laphiba (hiba) 16H Numerikus hiba (hiba) 17H Illeszkedési hiba (hiba) 2006. március 14 21. Processzorok 102. oldal 34. oldal
A Pentium védelmi szintjei (privilégiumszintek) Négy szint 0 3: 0 a rendszer, 3 a felhasználói Rendszervezérlő utasítások csak a 0. szinten Memóriaterületek védelmi szintje is különbözhet (ld. később) Minden szinten külön verem Rendszerhívás (alacsonyabb szintű rutin hívása magasabb szintről) GDT ben kapuk, ezeket lehet CALL utasítással hívni Kapuban adott számú paraméter másolása az alacsonyabb szintű verembe IDT ben kapuk, ezeket megszakítás szimulálásával (INT utasítás) lehet meghívni Itt nem történik paramétermásolás 2006. március 14 21. Processzorok 103. oldal Példakódok (1) Regiszter nullázása: XOR EAX, EAX Két szám összeadása: MOV EAX, EGYIK ADD EAX, MASIK MOV EREDMENY, EAX 32 karakter hosszú láncok másolása: LEA ESI, EGYIK LES EDI, MASIK MOV ECX, 31 CLD REP MOVSB 2006. március 14 21. Processzorok 104. oldal Példakódok (2) Összegzés: XOR EDX, EDX MOV ECX, HOSSZ LEA ESI, VEKTOR CLD C1: LODSD ADD EDX, EAX LOOP C1 MOV OSSZEG, EDX 2006. március 14 21. Processzorok 105. oldal 35. oldal
Példakódok (3) Megszámlálás: XOR EDX, EDX MOV ECX, HOSSZ LEA ESI, VEKTOR CLD C1: LODSD TEST EAX, FFFFFFFFH JZ C2 INC EDX C2: LOOP C1 MOV OSSZEG, EDX 2006. március 14 21. Processzorok 106. oldal Példakódok (4) Lineáris keresés: MOV EAX, KERESENDO MOV ECX, HOSSZ LES EDI, VEKTOR CLD REPNE SCASD SUB EDI, VEKTOR MOV EREDMENY, EDI 2006. március 14 21. Processzorok 107. oldal Példakódok (5) Maximumkeresés: MOV EDX, -80000000H MOV ECX, HOSSZ LEA ESI, VEKTOR CLD C1: LODSD CMP EAX, EDX JLE C2 MOV EDI, ESI MOV EDX, EAX C2: LOOP C1 MOV HELY, EDI MOV ERTEK, EDX 2006. március 14 21. Processzorok 108. oldal 36. oldal