2. előadás Kitlei Róbert 2008. november 28. 1 / 21
Adatmozgató irányai regiszter és memória között konstans betöltése regiszterbe vagy memóriába memóriából memóriába közvetlenül másoló utasítás nincsen a processzoron kívül található vezérlő processzorok felprogramozhatóak erre a célra a legtakarékosabb, ha a tárolt/mozgatott adat mérete megegyezik a gépi szóhosszal gépi szóhossz: a processzor által egyszerre kezelhető adatmennyiség még precízebben: több definícióra is fel lehet osztani x86-32 architektúrán 32 bit 2 / 21
Logikai regiszter vagy memória tartalmát bitvektorként fogjuk fel a vektorra elemenként hajtjuk végre a műveleteket 3 / 21
Aritmetikai alapműveletek egész számokkal kettes komplemens ábrázolás szerint egyes biteket átállítanak a jelzőbitek regiszterében történt előjeles/előjel nélküli túlcsordulás vagy alulcsordulás? előjeles-e az eredmény? nulla-e az eredmény? szorzás: a szorzat kb. kétszer akkora, mint a tényezők megoldás: két regiszterben lehet tárolni az eredményt osztásnál hasonló probléma 4 / 21
Bitmanipuláló bitléptetés kettőhatvánnyal való szorzás és osztás olcsó megvalósítása bitforgatás bit tesztelése/törlése/beállítása 5 / 21
Vezérlő összehasonlítások ugrások a jelzőbitek regiszterének bitjeit állítják feltétel nélküli: a program végrehajtása a megadott címkénél folytatódik feltételes célszerű közvetlenül összehasonlítás után használni a jelzőbitek beállított tartalma alapján eldönti, hogy teljesül-e a feltétel alprogramhívás és visszatérés a visszatérési címet vagy a futási idejű veremben (pl. x86), vagy egy kijelölt regiszterben (ált. RISC) tárolja 6 / 21
I/O (bemenet/kimenet) külön utasításokkal portokra írva és portokról olvasva történik a kommunikáció port: eszközzel való kommunikáció azonosítója más számítógépes port fogalmak is léteznek... egyszerre egy byte vagy egy gépi szó írható/olvasható időzítésre szükség lehet írások és olvasások között memory mapped I/O a memória címterületének egyes részei le vannak foglalva pl. DOS operációs rendszer alatt a szöveges képernyőterület a 0xB0000 címen kezdődik eléréséhez szükséges a (16 bites) szegmensregiszterek ismerete az újabb rendszerekben a képernyő védett erőforrás előny: komplex címzések is használhatóak 7 / 21
SIMD utasítások Single Instruction, Multiple Data ugyanannak az utasításnak a végrehajtása egyszerre több adaton x86: MMX, SSE, 3DNow! nagyobb regiszterek (64, 128 bites), részekre felosztva a részek között lehet műveleteket végezni ugyanazon regiszter részei között két regiszter megfelelő részei között nagy számításigényű feladatokhoz grafika szimuláció 8 / 21
Védett utasítások a processzoroknak általában két védelmi szintjük van: felhasználói és rendszerszint az x86 architektúra négy védelmi szinttel rendelkezik, amelyekből az operációs rendszerek általában csak kettőt használnak ki a régebbi, egyszerűbb processzorok nem rendelkeznek védelmi szintekkel a felhasználói szinten nem érhetőek el bizonyos erőforrások közvetlenül egyes memóriaterületek utasításfajták regiszterek I/O eszközök (pl. képernyő) ezeket rendszerszolgáltatásokon keresztül tudjuk elérni 9 / 21
Memóriacímzés módjai minden architektúrán elérhető címzések direkt címzés: megadott konstans címet érünk el indirekt címzés: egy regiszterben megadott címet érünk el összetettebb címzések bázis használata: ismerjük egy adatelem címét a memóriában (ez az adatelem bázisa), azon belül egy komponens relatív pozícióját index használata: az adat bájttömbbel ábrázolt, adott a keresett elem sorszáma (indexe) skálázás: a tömbösen ábrázolt adat elemei bájtnál nagyobb méretűek Példa x86-on: [ edx + esi }{{} bázis }{{} index 4 }{{} skálázás + }{{} 4 ] konstans 10 / 21
Illesztés illesztés: 2 n hosszú adatelem 2 n többszöröse címen kezdődik az utasítások, adatok hatékonyabban érhetőek el, ha illesztve vannak padding: nem kettőhatvány méretű adatszerkezeteket ki szoktak egészíteni kitöltő bájtokkal egyes architektúrák, amelyeken az utasítások gépi kódjának hossza rögzített, megkövetelik az utasítások illesztését figyelmen kívül hagyják a programszámláló (utasításmutató) alsó bitjeinek értékét 11 / 21
Regiszterek kategorizálása felhasználás szerint adatregiszterek: adatok tárolására alkalmasak, számítások végezhetőek velük akkumulátor regiszter: utasítások kötött operandusa, így az utasítás eggyel kevesebb operandusúvá válik x86-on a szorzásnál ilyen szerepet tölt be eax címző és eltolás-regiszterek (indexregiszterek): memóriacímek kiszámítására alkalmasak szegmensregiszterek: összetettebb memóriakezeléshez általános célú regiszterek adattárolásra és címzésre egyaránt alkalmasak minden címzési mód szerint alkalmazhatóak speciális célú regiszterek utasításmutató/programszámláló: eip (x86 architektúrán), pc állapotregiszterek, hibakövető regiszterek stb. 12 / 21
Regiszterek kategorizálása rajtuk végezhető műveletek szerint egész regiszterek egyéb ábrázolt tartalmak: bitvektorok, mutatók, BCD (csomagolt számjegyek) stb. lebegőpontos regiszterek általában az IEEE 754-1985 szabvány szerint ábrázoltak egész számok is ábrázolhatóak kerekítés nélkül SIMD regiszterek: részeikkel párhuzamosan végezhetőek számítások x86-on a lebegőpontos és az SIMD regiszterek fizikailag egybeesnek 13 / 21
CISC: Complex Instruction Set Computer sokfajta utasítás (több százas nagyságrend) összetett adatszerkezetek kezelése összetett memóriacímzések viszonylag kevés regiszter kézzel kényelmes rájuk assembly kódot írni a legtöbb assembly kódot fordítóprogramok készítik emiatt nehéz kihasználni a képességeiket 14 / 21
RISC: Reduced Instruction Set Computer kevés fajta, szerkezetileg egyszerű utasítás a memóriacímzés egyszerűsített, a komplex címeket több utasítással kell kiszámolni load-store architektúra: csak az adatmozgató utasítások érhetik el a memóriát sok általános célú regiszter: pl. 32 vagy 128 nem feltétlenül érhető el mindegyik egyszerre csak egy ablak látszik az ablak tud mozogni a gépi kód szintjén egységes szerkezetű utasítások egyforma hosszú minden utasítás nincsenek kivételek, minden utasítás szabályos szerkezetű 15 / 21
VLIW: Very Large Instruction Word a legtöbb assembly kódot fordítóprogramok generálják a CISC és RISC architektúrák sok komponense arra szolgál, hogy egy lineáris utasítássorozatot optimalizáljanak ötlet párhuzamosan több végrehajtó egység (4 vagy több) a fordítóprogramok előre optimalizálják a kódot az utasítások gépi kódjai sokkal hosszabbak, hiszen sok párhuzamos utasítás kódját tartalmazzák 16 / 21
A gépi kód szerkezete az utasítások gépi kódja mezőkből áll egy mező lehet csak pár bájt hosszú egy bájt tartalmazhat több mezőt a további mezők szerkezete függhet az előzőek tartalmától opkód (operációs kód, műveleti kód): a gépi utasításnak az a mezője, amely meghatározza az elvégzendő műveletet hasonló a szerepe a mnemonikhoz egy mnemonikhoz több opkód is tartozhat pl. aszerint, hogy az operandusok memóriatartalmak, regiszterek vagy konstansok-e lehet több bájt hosszú is általában a gépi kód legelején foglal helyet (pl. x86 architektúrán) előtétek előzhetik meg a RISC architektúrák mezőinek szerkezete általában egyszerű, minden utasítás gépi kódja egyforma hosszú 17 / 21
Utasítások végrehajtása legegyszerűbb: a program utasításai sorban hajtódnak végre pipeline (csővezeték) az utasításokat több, egyszerűbb fázisra bontják a következő utasítás végrehajtása elkezdődhet már akkor, amikor az előző már továbblépett egy későbbi fázisba (de még nincsen feltétlenül készen) ha az utasítások függenek egymástól, feltarthatják egymást (stalling) egyes architektúrák intelligensen átrendezik az utasításokat, hogy ezt minimalizálják elágazásnál lehet, hogy a nem futtatott ágat is elkezdi végrehajtani szuperskalár: egyszerre több utasítás dekódolása indul meg párhuzamosan 18 / 21
Kivételek és megszakítások kezelendő események kivétel: a processzor nem tudja végrehajtani az adott utasítást nullával való osztás jogosulatlan adathozzáférés (pl. tömb túlcímzése miatt) megszakítás: speciális szolgáltatás igénybevétele a processzoron kívülről jelzés érkezik (pl. új USB eszközt érzékelt a hardver) szoftveres megszakítás történik (x86: int utasítás) minden eseményhez tartozik egy sorszám, ami azonosítja az eseményt kezelő rutint a kezelő rutin végrehajtása után megszakítás után a program folytatódik kivétel után annak súlyosságától függ, folytatható-e, illetve hogyan 19 / 21
Esettanulmány: C64 processzor: MOS 6510 más gépekben: Apple II, Atari 2600, NES egy nyolcbites akkumulátor: A két nyolcbites indexregiszter: X, Y maximális megcímezhető memória: 64 kb PETSCII karakterkódolás, ami eltér több ponton az általános ASCII-től 20 / 21
Esettanulmány: 8086, DOS a már bemutatott architektúra csak a 16 bites regiszterekkel DOS és BIOS rendszerhívásokkal az erőforrások korlátozás nélkül elérhetőek 21 / 21