next up previous
Következő: Diszkek | Tartalomjegyzék | Előző: A memória

A processzor

A processzort természetesen tárgyalhatnánk, mint nagyon összetett hardware elemet, de beszélhetünk róla a software anyjaként is. Mindkét tárgyalási módot jogosnak tartjuk, azonban itt e két vonatkozást nem választjuk szét, de erősen lerövidítjük, és csak a lényegre szorítkozunk. A processzor működésének megértéséhez a rendszerórától kell elindulnunk. A rendszeróra - egy kvarckristály vezérelt oszcillátor - folyamatosan periodikus jeleket szolgáltat (lásd 8.3.1. ábra).


8.3.1. ábra

Két ilyen jel ad ki egy ún. processzorciklust. E ciklusok szabják meg, hogy a processzor hogyan lépked, erre a taktusra hajtja végre az utasításokat. Az egyszerű utasításokat kevés, a bonyolultabbakat nagyon sok ciklus alatt tudja csak végrehajtani (később adatokat találunk arra, hogy hány ciklus kell egy utasítás végrehajtásához). Két processzorciklus alkot egy buszciklust, melyek során a processzor a memóriához fordul. Ennek első fele a státusinformációt juttatja a buszra - vagyis lényegében ekkor történik a címzés, a második fele az utasítást közli - például azt, hogy a kérdéses címen írást kell végrehajtani. A processzor egy utasítás végrehajtása alatt több működési fázison megy át: -- be kell hoznia a memóriából az utasítást; -- az utasítást dekódolnia kell; -- végre kell hajtania az utasításban megszabott logikai és adatmozgatási műveleteket; -- az eredményt (esetleg) újra a memóriában kell elhelyeznie, vagyis ismételten a memóriához kell fordulnia. Fontos megértenünk, hogy a rendszeróra frekvenciájának növelésével a processzor egyre gyorsabb lesz, mivel az utasítások végrehajtásához szükséges idő csökken. Persze ehhez az kell, hogy a processzor egyre gyorsabb működésű elemekből épüljön fel. Más a helyzet a buszciklusidővel. Ennek csökkentése nem célszerű, mert a memóriaelemek csak késéssel válaszolnak, az egyéb perifériális eszközök pedig a nagyon gyors jelek fogadására nincsenek felkészülve. Mindezek együttes hatásaként most már megérthetjük, hogy a rendszeróra frekvenciájának kétszereserére növelése a processzor/gép sebességét csak kettőnél kisebb arányban növelheti. (Ezért mutatnak a különböző gépsebesség-tesztek különböző működési sebességet. Ugyanis mindegyikük egy jól-rosszul megválasztott programszakasz futási idejét méri. Nem közömbös azonban az, hogy az utasítások végrehajtása során hányszor kell a memóriához nyúlni.) Az IBM-PC processzorai (8086...80286....80486....) információs alapegységként byte-okat kezelnek. A címzési rendszer azonban szükségessé tette a "két byte = egy szó" 16 bites információmennyiség bevezetését is. Ezt fontos értenünk akkor, amikor a processzor regisztereiről beszélünk. (A regiszter szó nem jelent túlságosan sokat: arra utal, hogy bizonyos mennyiségű bit van egy "csokorban", tehát bistabil multivibrátorok együttesének lehetne gondolni őket. Ezek a regiszterek azonban rajta vannak a processzor-lapkán, ezekhez fér hozzá leggyorsabban a rendszer. A regiszterek egy csoportja alkalmas aritmetikai, logikai funkciók végrehajtására, másik csoportjuknak inkább csak a memóriahelyek megcímzésében van szerepük.) A regiszterek elnevezése és szerepe az alábbi : AX -- akkumulátor, kiemelt jelentőségű, központi szerepe van. Bizonyos utasítások csak erre vonatkoznak. BX -- bázisregiszter, egy alapcímhez képesti relatív eltérések kijelölése a fő funkciója. CX -- számlálóregiszter, elsődlegesen ismételni kívánt utasítások esetén van különleges szerepe. DX -- adatregiszter, főként adatok byte-jainak kijelölésére szolgál. Fontos szerepe van az I/O utasításokban. (E regiszterek 16 bitesek, de LO és HI byte-jaik külön is címezhetők, tehát pl. CL a számlálóregiszter alacsonyabb helyiértékű byte-jára utal.) SI -- forrás (source) indexregiszter, elsősorban adatok címzésére. Gyakran szerepel DS -sel együtt. DI -- cél (destination) regiszter, szintén adatok címzésére. Gyakran társul az ES regiszterrel BP -- bázis pointer (mutató), a bázisregiszterhez hasonló szerepkörrel. SP -- verem (stack) pointer, a verem aktuális tartalmára mutat. IP -- utasítás (instruction) pointer, a feldolgozandó utasításra mutat. F -- feltételbitek (flag), átvitel, paritás, előjel, megszakítás engedélyezése stb. Nagyon fontosak az ún. szegmens regiszterek. Ezekkel 64 kB nagságú területeket jelölhetünk ki. Négy, egymástól függetlenül megválasztható terület kijelésére van módunk a négy szegmensregiszterrel: CS -- kód szegmensregiszter, IP-vel együtt adja meg az utasítás pontos helyét. DS -- adat szegmensregiszter. SS -- stack (verem) szegmensregiszter. ES -- extra szegmensregiszter, lehetőséget teremt egy újabb adatszegmens definiálására és címzésére. A fentiekből látszik, hogy egyidejűleg négy szegmensben manipulálhatunk (CS, DS, SS, ES). Az offset - vagyis a szegmens kezdetétől mért eltolás megadására számos regiszter szolgálhat (IP, DX, BX, BP, stb). Emlékeztetnünk kell itt arra, hogy a számítógépek a memóriában elhelyezett programot dolgozzák fel, utasításonként. Az utasításoknak ún. gépi kódjuk van, amelyet a processzor felismer, és annak megfelelően cselekszik. A gépi kódok nulláknak és egyeseknek a keverékei, emberi értelmezésre, memorizálásra általában nem alkalmasak. E nehézségnek az áthidalására készítenek minden processzorhoz ún. assembly (szerelő) nyelvű fordító programot. Ennek használatakor a programozó a magasszintű programnyelvekben megszokott kényelmes lehetőségekhez jut, eredményként pedig egy direkt gépi kódú program keletkezik. Ezek a programok általában a legtömörebbek, éppen ezért a futási idejük a lehető legkisebb. Itt most bemutatunk néhány példát az assembly nyelv jelöléseire. Az utasítások általában néhány betűből állnak, amely betűk angol szavakra, szótöredékekre emlékeztetnek. Ezeket már könnyen lehet memorizálni - az ilyen szavakat hívják "mnemonics"-nak. (MOV - move, LEA - load effective address, IMUL - integer multiplication.) Az IBM-PC utasításai különböző hosszúságúak, vagyis különböző számú byte szükséges leírásukhoz. Ez attól függ, hogy az utasítás operandusait honnan kell venni, illetve az eredményt hová kell elhelyezni. E szempontból más-más szerepük van a regisztereknek, a memóriahelyeknek/portoknak, illetve az utasításhoz közvetlenül kapcsolódó adatoknak. Ezek tehát befolyásolják azt, hogy az utasítás milyen hosszú lesz. (Hosszabb utasítás valószínűleg hosszabb végrehajtási időt is fog jelenteni, mert többször kell a memóriához fordulni.) Az IBM-PC legrövidebb utasításai egyetlen byte hosszúságúak, a leghosszabb pedig hét byte-ot igényel. Az alábbiakban bemutatjuk az utasításkészlet legfontosabb csoportjait. Mindegyik csoportban számos utasítás található, ezek teljes felsőrolása helyett csak ízelítőt adunk mindegyikből. Mindenütt feltüntetjük az assembly nyelvű megnevezést, a hozzá tartozó gépi kódot (ezt természetesen hexadecimálisan adjuk meg), valamint azt, hogy hozzávetőleg hány processzor-ciklus szükséges az utasítás végrehajtásához.


.

$\textstyle \parbox{3cm}{He\-xa-k\'od}$$\textstyle \parbox{2cm}{Cik\-lu\-sok sz\'a\-ma}$ $\textstyle \parbox{4cm}{As\-sembly k\'od}$$\textstyle \parbox{5 cm}{\'Er\-tel\-me\-z\'es}$

.


$\textstyle \parbox{3cm}{\underline{ADAT\-MOZ\-GA\-T\'AS}}$ $\textstyle \parbox{3cm}{8B C3}$$\textstyle \parbox{2cm}{2}$$\textstyle \parbox{4cm}{mov ax,bx}$ $\textstyle \parbox{5cm}{BX tar\-tal\-m\'at AX-be t\uml ol\-ti}$ $\textstyle \parbox{3cm}{89 87 123B}$$\textstyle \parbox{2cm}{10}$$\textstyle \parbox{4cm}{mov
[123bh+bx],ax}$ $\textstyle \parbox{5cm}{AX tar\-tal\-m\'at be\-\'{\i}r\-ja 123B \'es BX \uml ossze\-g\'e\-vel
meg\-c\'{\i}m\-zett hely\-re}$ $\textstyle \parbox{3cm}{\underline{ARIT\-ME\-TI\-KA}}$ $\textstyle \parbox{3cm}{03 C3}$$\textstyle \parbox{2cm}{3}$$\textstyle \parbox{4cm}{add ax,bx}$$\textstyle \parbox{5
cm}{AX-hez hoz\-za\-ad\-ja BX tar\-tal\-m\'at}$ $\textstyle \parbox{3cm}{F7 F9}$$\textstyle \parbox{2cm}{190}$$\textstyle \parbox{4cm}{idiv cx}$$\textstyle \parbox{5
cm}{AX tar\-tal\-m\'at eloszt\-ja CX-xel, h\'a\-nya\-dos: AX, ma\-ra\-d\'ek: DX}$ $\textstyle \parbox{3cm}{\underline{KOR\-REK\-CI\'O}}$ $\textstyle \parbox{3cm}{98}$$\textstyle \parbox{2cm}{2}$$\textstyle \parbox{4cm}{cbw}$$\textstyle \parbox{5
cm}{byte-b\'ol sz\'ot csi\-n\'al}$ $\textstyle \parbox{3cm}{\underline{LO\-GI\-KA}}$ $\textstyle \parbox{3cm}{23 C2}$$\textstyle \parbox{2cm}{3}$$\textstyle \parbox{4cm}{fitty:and
ax,dx}$$\textstyle \parbox{5 cm}{lo\-gi\-kai \'ES AX \'es DX k\uml o\-z\uml ott}$ $\textstyle \parbox{3cm}{F7 C1 0008}$$\textstyle \parbox{2cm}{4}$$\textstyle \parbox{4cm}{test
cx,08h}$$\textstyle \parbox{5 cm}{lo\-gi\-kai \'ES CX \'es 08 k\uml o\-z\uml ott, de CX tar\-tal\-ma nem
v\'al\-to\-zik}$ $\textstyle \parbox{3cm}{\underline{L\'EP\-TE\-T\'ES}}$ $\textstyle \parbox{3cm}{D3 E0}$$\textstyle \parbox{2cm}{15}$$\textstyle \parbox{4cm}{shl ax,cl}$$\textstyle \parbox{5
cm}{AX-et CL tar\-tal\-m\'a\-nak meg\-fe\-le\-l\H o\-en bal\-ra shif\-te\-li}$ $\textstyle \parbox{3cm}{\underline{FEL\-T\'E\-TEL\-BIT}}$ $\textstyle \parbox{3cm}{FA}$$\textstyle \parbox{2cm}{2}$$\textstyle \parbox{4cm}{cli}$$\textstyle \parbox{5 cm}{nem
en\-ge\-di az in\-ter\-rupt-okat}$ $\textstyle \parbox{3cm}{\underline{UG\-R\'A\-SOK}}$ $\textstyle \parbox{3cm}{EB 16 90}$$\textstyle \parbox{2cm}{30}$$\textstyle \parbox{4cm}{jmp {\tt
leg\-v\'e\-ge}}$$\textstyle \parbox{5 cm}{ a ''leg\-v\'e\-ge'' ne\-v\H u cim\-k\'e\-re ug\-rik}$ $\textstyle \parbox{3cm}{\underline{CIK\-LUS-SZER\-VE\-Z\'ES}}$ $\textstyle \parbox{3cm}{E2 F2}$$\textstyle \parbox{2cm}{5--17}$$\textstyle \parbox{4cm}{lo\-op {\tt
ha\-h\'o}}$$\textstyle \parbox{5 cm}{is\-m\'et\-l\'es a ''ha\-h\'o'' ne\-v\H u cim\-k\'e\-t\H ol}$ $\textstyle \parbox{3cm}{\underline{VE\-REM}}$ $\textstyle \parbox{3cm}{50}$$\textstyle \parbox{2cm}{11}$$\textstyle \parbox{4cm}{push ax}$$\textstyle \parbox{5
cm}{AX-et a ve\-rem\-be te\-szi}$ $\textstyle \parbox{3cm}{58}$$\textstyle \parbox{2cm}{8}$$\textstyle \parbox{4cm}{pop ax}$$\textstyle \parbox{5 cm}{a
ve\-rem ak\-tu\-\'a\-lis \'er\-t\'e\-k\'et AX-be t\uml ol\-ti}$ $\textstyle \parbox{3cm}{\underline{SZUB\-RU\-TIN}}$ $\textstyle \parbox{3cm}{E8 000D}$$\textstyle \parbox{2cm}{19}$$\textstyle \parbox{4cm}{call {\tt
girls}}$$\textstyle \parbox{5 cm}{ug\-r\'as a ''girls'' ne\-v\H u szub\-ru\-tin\-ra}$ $\textstyle \parbox{3cm}{C3}$$\textstyle \parbox{2cm}{12}$$\textstyle \parbox{4cm}{ret}$$\textstyle \parbox{5
cm}{vissza\-t\'e\-r\'es a szub\-ru\-tin\-b\'ol}$ $\textstyle \parbox{3cm}{\underline{MEG\-SZA\-K\'I\-T\'AS}}$ $\textstyle \parbox{3cm}{CD 21}$$\textstyle \parbox{2cm}{51}$$\textstyle \parbox{4cm}{int 21h}$$\textstyle \parbox{5
cm}{ug\-r\'as a 21h in\-ter\-rupt ru\-tin\-ra}$ $\textstyle \parbox{3cm}{CF}$$\textstyle \parbox{2cm}{32}$$\textstyle \parbox{4cm}{iret}$$\textstyle \parbox{5
cm}{vissza\-t\'e\-r\'es az in\-ter\-rupt ru\-tin\-b\'ol}$ $\textstyle \parbox{3cm}{\underline{STRING}}$ $\textstyle \parbox{3cm}{AD}$$\textstyle \parbox{2cm}{12}$$\textstyle \parbox{4cm}{lodsw}$$\textstyle \parbox{5
cm}{string-elem (sz\'o) moz\-ga\-t\'a\-sa}$ $\textstyle \parbox{3cm}{\underline{I/O M\H U\-VE\-LE\-TEK}}$ $\textstyle \parbox{3cm}{EC}$$\textstyle \parbox{2cm}{8}$$\textstyle \parbox{4cm}{in al,dx}$$\textstyle \parbox{5
cm}{\'{\i}r\'as port-c\'{\i}m\-re}$ $\textstyle \parbox{3cm}{EE}$$\textstyle \parbox{2cm}{8}$$\textstyle \parbox{4cm}{out dx,al}$$\textstyle \parbox{5
cm}{ol\-va\-s\'as port-c\'{\i}m\-r\H ol}$ $\textstyle \parbox{3cm}{\underline{EGY\'EB}}$ $\textstyle \parbox{3cm}{90}$$\textstyle \parbox{2cm}{3}$$\textstyle \parbox{4cm}{nop}$$\textstyle \parbox{5 cm}{\uml ures
uta\-s\'{\i}\-t\'as}$ .


next up previous
Következő: Diszkek | Tartalomjegyzék | Előző: A memória

1999-09-23