• Nem Talált Eredményt

Az Intel x86-os processzorok funkcionális egységei 87

In document Informatikai alapok (Pldal 98-103)

4. A számítógépek felépítése, hardvere

4.3.2. Az Intel x86-os processzorok funkcionális egységei 87

Az x86-os Intel processzorok tervezése közvetlenül visszavezethető az 1971-ben készített 4 bites Intel 4004-re. Azóta sok fejlesztés történt, például regiszterek méretének és számának növelése, belső és adatátviteli útvonalak bővítése, belső gyorsítótár beépítése, pipeline és szuperskalár (lásd 4.3.6. fejezet) utasításvégrehajtás megvalósítása.

A fejlettebb mikroprocesszor-architektúrák áttekintése előtt egy egyszerűbbel, az Intel 8088-cal foglalkozunk, amely az eredeti IBM PC processzora lett (lásd 4.13. ábra). Ezt a cég 1979.

július 1-jén mutatta be. 8 bites külső adatbusszal rendelkezik, utasításkészlete és regisztereinek hossza 16 bit. A címezhető memória 1 MB. Kezdeti változata 4,77 MHz-en működött, amelyet továbbfejlesztett verziói meghaladtak. Teljesítménye 0,33-1 MIPS (Million Instruction Per Second, millió utasítás per másodperc) az órajeltől, a memória-késleltetéstől, illetve a futtatott programtól függően.

4.13. ábra. Az Intel 8088-as processzorral működő első IBM PC-k, a processzortokban és anélkül88

87 Ezen fejezet nagy mértékben támaszkodik [3] forrásra.

88 Chip Hall of Fame: Intel 8088 Microprocessor, 2017.06.30., https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-intel-8088-microprocessor, megtekintve: 2019.05.05.

99 Az Intel 8088 processzormag (i8088) részegységeit 4.14. ábra által mutatott blokkdiagram segítségével tekintjük át. Az i8088 két fő része:

 Végrehajtó egység (Execution Unit, EU): az utasítások feldolgozása a feladata, beleértve az aritmetikai és a logikai műveleteket is.

 Síninterfész egység (Bus Interface Unit, BIU): vezérli az adattovábbítást a processzor és a processzoron kívüli eszközök (például főtár, I/O portok, tárolóeszközök) között.

Statikus regiszterek (flip-flopok csoportjai). Bináris adatok tárolásához és átadásához.

Logikai kapuáramkörök aritmetika és logikai műveletekhez.

Logikai kapuáramkörök a processzor belső vezérléséhez.

Belső adatbuszok a komponensek közötti adatátvitelhez.

4.14. ábra. Az Intel 8088-as mikroprocesszor architektúrája89 [3]

A regiszter flip-flopokból90 felépülő, nsec (10-9 sec) gyorsaságú átmeneti tároló. Az adatok (utasítások, állapotszók) feldolgozás alatti tárolása a feladata.

A regiszter a leggyorsabb tárolótípus a számítógépben. A cache csak fele olyan gyors, az operatív tár egy nagyságrenddel lassabb. Egy nsec idő alatt a fény 30 cm-t tesz meg. Ha a processzor sebességét szemléletesen szeretnénk összehasonlítani az emberével, hozhatjuk azt a példát, hogy ha a regiszter hozzáférési idejét 1 sec-nak feleltetjük meg, akkor az ember számára egy billentyű leütése a számítógép billentyűzetén kb. 30 év.

A regiszterek tárolókapacitása többnyire 16 bit, egy szó. A regiszterek hosszát a bennük tárolható bitek, bájtok vagy szavak számával mérik.

89 rcolorado.tripod.com: Arquitectura del Microprocesador 8088,

http://rcolorado.tripod.com/ccom4016/arquix86.html, megtekintve: 2019.05.05.

90 Flip-flop: bistabil multivibrátor. A digitális hálózati elemek közül azok, amelyek egyidejűleg tudják fogadni a következő bemenetet és szolgáltatni az aktuális kimenetet – ezért egyszerű memóriaelemként is használhatók.

Állapotukat a következő bemenetig vagy feszültség elvételéig megőrzik. Gyors és drága tárolók alkotóelemei.

100 A processzor regiszterei a felhasználói programok szempontjából három kategóriába sorolhatók:

 Funkcionális regiszterek: speciális célra használtak, a felhasználói programokban csak meghatározott utasításokban szerepelhetnek. Ilyen például a flagregiszter (státuszregiszter), bizonyos adatok, indexek, címek stb. tárolására szolgáló regiszterek.

 Általános célú regiszterek: a felhasználói programok utasításaiban korlátozás nélkül használhatók.

 Rendszerregiszterek: az elnevezés inkább a fejlettebb processzoroknál jelenik meg, főként a védett üzemmód mellett elérhető regiszterek esetében. A felhasználói programok számára nem „láthatók”/nem elérhetők/transzparensek.

A 16 bites Intel és azokkal kompatibilis processzorok általános regiszterei két csoportba sorolhatók:

 Adatregiszterek: többnyire a számításokhoz szükséges adatokat és azok eredményadatait tárolják. A diagramon a felső négy regiszterpár, amelyek külön-külön 8-8 bit hosszúak, együtt is kezelhetők, 16 bites regiszterekként. Ekkor megnevezésük:

o AX: Accumulator Register, akkumulátorregiszter.

o BX: Base Register, bázisregiszter.

o CX: Count Register, számlálóregiszter.

o DX: Data Register, adatregiszter.

Az AH, BH, CH, DH regiszterekkel a 16 bites adat felső 8 bitjére hivatkozunk, az AL, BL, CL, DL regiszterekkel az alsó 8 bitjére.

 Címregiszterek: azokra a memóriahelyekre mutatnak, ahonnan az adatok betöltendők vagy ahol az előállított adat tárolandó. Megnevezéseik:

o SP: Stack Pointer, veremmutató. A memóriaverem felső üres vagy a legfelső adatának rekeszére mutat.

o BP: Base Pointer, bázismutató.

o DI: Destination Index, célregiszter.

o SI: Source Index, forrásregiszter.

A címregisztereket az ún. szegmensregiszterekkel91 együtt használjuk, hogy az főtárban konkrét címekre mutassanak.

Az akkumulátor (Accumulator, AX) regiszter a számítógép megkülönböztetett számítási regisztere. A processzor az aritmetikai és a logikai műveletek (egyik) operandusát itt tárolja, a műveleteket tartalmán végzi, illetve az eredményt ebben tárolja.

A flagregiszter (FLAGS) állapotjelző/vezérlő funkciója a hétköznapi életből vett hasonlattal, a gépkocsi műszerfalán elhelyezett kijelzőkéhez hasonló. Az egyik műszerfali kijelző például az olajnyomásé, a másik a üzemanyagmérőé. A kijelzők felgyulladása azt jelzi, hogy az általában elvárttól eltér az adott jellemző. A processzor jelzői/flagjei is a deklaráltan rögzítettől eltérő állapotra utalnak. Aritmetikai műveletek esetén például hogy az eredmény negatív, vagy nem fér el a regiszterben (túlcsordul), a legfelső helyiértéken átvitel keletkezett, az eredmény nulla. Ezek egy-egy flaggel/biten ábrázolhatók. Ha a „megszokottól” eltérő az állapot, akkor 1 az értékük (például ha az elvégzett művelet eredménye negatív).

91 Memóriaszegmens: memóriakezelési módszer, amely a főtár logikailag több részre bontásával működik. A memóriacímre hivatkozás két részből áll: a szegmens kezdő címéből, amely egy meghatározott regiszterben tárolódik és eltolási (ofszet-) címből, amely a szegmensen belül határozza meg a cím elhelyezkedését.

A memóriaszegmensek általában a program természetes felépítése szerint kialakítottak, például programkódot, adatokat, programok egymás közötti adatátadásához használt adatokat tartalmaznak.

101 Az Intel processzorok egyes flagjei a lefelé való kompatibilitás biztosításához a bevezetésük óta ugyanazon a bitpozíción helyezkedek el. Az i8088-as flagjeit 4.15. ábra mutatja, balra a gép működési állapotát befolyásoló vezérlőbitekkel, jobbra az előző művelet eredményének tulajdonságait jelző bitekkel.

4.15. ábra. Az i8088-as flagregiszterének bitjei [3]

Az egyes bitek jelentései az alábbiak, balról jobbra haladva:

TF = 1. Lépésenkénti programvégrehajtás engedélyezett.

DF = 1. Karakterlánc feldolgozása a legmagasabbtól a legalacsonyabb címig.

IF = 1. A maszkolható hardveres megszakítások kezeltek.

OF = 1. Túlcsordulás volt, nem fért el az eredmény a célregiszterben, például két azonos előjelű szám összeadása esetén.

SF = 1. Az eredmény negatív.

ZF = 1. Az eredmény nulla.

AF = 1. A bájt alsó tetrádjáról a felső tetrádra átvitel keletkezett.

PF = 1. A legkisebb helyiértékű bit párosságot jelez.

CF = 1. A legmagasabb helyiértéken átvitel keletkezett.

Az aritmetikai logikai egység (ALU) a számítási és logikai műveleteket végzi el, így alkalmas bináris összeadásra, Boole-algebrai (logikai) műveletek végzésére, komplemensképzésre, bitsorozatok léptetésére (bitenként jobbra, balra) – így, az ALU olyan áramkörökből áll, amelyek ezeket a műveleteket végre tudják hajtani. A többi aritmetikai és logikai művelet (például szorzás, osztás), felbontható a fenti alapműveletekre. Az ALU-k működését és

„képességeit” a műveletekben értelmezett adattípusok alapján értékelhetjük. Az adattípusok lehetnek fixpontos számok, lebegőpontos számok, binárisan kódolt decimális (Binary-Coded Decimal, BCD) számok, multimédiás (Multi-Media Extensions, MMX) adatok, karakteres mezők, bitmezők, vektoros adatok.

Az ALU a műveleteket végrehajtva beállítja a jelzőregiszter (FLAGS) bitjeit, amelyeket a felhasználói és az operációs rendszer programjai lekérdezhetnek, hogy informálódjanak a műveletek kimeneteléről. Az állapotbitek értéke általában feltételes elágaztató utasításokkal kérdezhető le, és például attól függően változtatható meg az utasítás-végrehajtás sorrendje,

102 hogy az eredmény nulla volt-e vagy sem. Így JE=Jump Equal utasítás esetén: ugorj, ha az eredmény 0 volt. Vagy JNE=Jump Not Equal utasítás esetén: ugorj, ha az eredmény nem 0 volt.

A processzorokba beépített művelet-végrehajtó egységek száma megnőtt, funkciójuk szerint specializálódtak az idők folyamán – például fixpontos, illetve lebegőpontos összeadó –.

Az utasításszámláló (Instruction Pointer, IP) regiszter a soron következő utasítás címét tárolja. A IP tartalmát a program maga is módosíthatja, például elágazási utasítások esetén. A program döntő részében az utasítások a fizikai tárolási sorrendjüknek megfelelően lesznek végrehajtva. Ez úgy valósul meg, hogy a processzor az IP által címzett főtárbeli memóriarekesz tartalmát, az ott tárolt utasítást kiolvassa és átviszi az utasítás regiszterbe, majd az IP tartalmát a kiolvasott utasítás hosszának megfelelő értékkel megnöveli, és így a memóriának most azt a rekeszét címzi, ahol a program soron következő utasítása található. Így a PC-ben mindig a soron következő, végrehajtandó utasítás címe található.

Az utasításregiszter (Instruction Register, IR) az IP által címzett memóriarekesz tartalmát, a végrehajtandó utasítást átmenetileg tároló regiszter.

A vezérlőegység (Control Unit, CU) értelmezi az utasításokat, majd azok végrehajtásához összehangoltan vezérli a számítógép egységeinek működését, hogy az események a programnak megfelelő helyes sorrendben és időben következzenek be.

Az IP tartalma alapján a vezérlőegység kiolvastatja a memóriából annak a rekesznek a tartalmát, amely a következő végrehajtandó utasítást tárolja. Majd értelmezi az utasítást: az utasítás műveleti kódrésze alapján meghatározza, hogy sorrendben milyen műveletet, milyen elemi lépésekben kell végrehajtani. Az utasítás címrésze alapján értelmezi, hogy milyen címen találhatók a műveletben résztvevő adatok. Vezérli a szükséges adatok kiolvasását és a megfelelő regiszterbe továbbításukat. Az ALU-val végrehajtatja a megfelelő műveletet, végül biztosítja az eredmény megőrzését.

A processzor buszinterfész egységéhez (Bus Interface Unit, BIU) többek között, négy szegmensregiszter tartozik:

CS: Code Segment register, kódszegmens regiszter. Programkód tárolásának szegmensére mutat.

DS: Data Segment register, adatszegmens regiszter. A program által használt adatok szegmensére mutat.

SS: Stack Segment register, veremszegmens regiszter. A program által ideiglenesen tárolt értékek szegmensére mutat.

ES: Extra Segment register, extraszegmens regiszter. Oda mutat, ahová a programozó szeretné.

A szegmensregiszterek mutató- és indexregiszterekkel együtt az adatok beolvasásához és kiírásához szükséges memória címzéséhez használhatók.

A rendszerben megcímezhető teljes, 210, azaz 1 MB-nyi memóriát úgy éri el, hogy a szegmensregiszterek értékét négy helyiértékkel eltolja (szorozza, shifteli) balra, 0-val feltöltve az üres helyeket. Ehhez az értékhez adódik hozzá a mutató-, illetve az indexregiszter értéke (Hiba! A hivatkozási forrás nem található.). A két regiszter értékének összeadása a szegmensregiszterek feletti címösszeadó egységben történik (lásd 4.14. ábra).

Az i8088 processzorban a memóriahelyek elérése három adatot igényel:

 a szegmensregiszterben található 16 bites szegmenscímet;

 a 16 bites eltolás (offset) címet, a mutató- vagy indexregiszterben;

103 majd ezek összeadásával

 a 20 bites fizikai címet, amely a címösszeadó kimenetén érhető el.

4.16. ábra. i8088-as CPU szegmenscímzésének vázlata [3]

A szegmensregiszterek használatának másik fontos oka, hogy a felhasználó számára érzékelhetően egy időben több program legyen futtatható a számítógép-rendszerben. Ehhez biztosítani kell a kód áthelyezhetőségét, vagyis hogy ne csak egy rögzített helyre legyen bemásolható a főtárba, hanem a szegmensek kezdetétől. A mutató- és az indexregisztereket a program kezeli, a program végrehajtása a 64 KB-os szegmensen belül bárhová ugorhat. Az operációs rendszer viszont ellenőrzi a szegmensregisztereket, és rákényszerítheti a programot, hogy egy bizonyos memóriarészben tartózkodjon. Ha a címzéshez használt regiszterekkel a program számára nem engedélyezett terület lett megcímezve, az az ún. „kék halált”

eredményezhette.

A szegmens- és mutató regiszterek általában meghatározott párosításban használhatók:

CS:IP Kódszegmens és utasításszámláló regiszter a következő végrehajtandó utasítás fizikai címére mutat.

SS:SP Veremszegmens és veremmutató regiszter a főtárban kialakított, egyes adatok átmeneti tárolására szolgáló veremtárra mutat.

DS:DI Adatszegmens és célindex regiszter arra a címre mutat a memóriában, ahová az adatot el kell helyezni.

DS:SI Adatszegmens és forrásindex regiszter arra a címre mutat a memóriában, ahonnan az adatot le kell tölteni.

A sínvezérlő logika az i8088 külső sínhez való kapcsolódását vezérlő kapukat tartalmazza.

Lehetővé teszi a sínen a főtár, az I/O portok, egyéb erőforrások, illetve a processzor kommunikációját.

In document Informatikai alapok (Pldal 98-103)