Következő: Diszkek
| Tartalomjegyzék
| Előző: A memória
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).
![](a8_3_1.gif)
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}$](img81_3.png)
![$\textstyle \parbox{4cm}{As\-sembly k\'od}$](img81_5.png)
.
![$\textstyle \parbox{3cm}{8B C3}$](img81_8.png)
![$\textstyle \parbox{2cm}{2}$](img81_9.png)
![$\textstyle \parbox{3cm}{89 87 123B}$](img81_12.png)
![$\textstyle \parbox{2cm}{10}$](img81_13.png)
![$\textstyle \parbox{3cm}{03 C3}$](img81_17.png)
![$\textstyle \parbox{2cm}{3}$](img81_18.png)
![$\textstyle \parbox{4cm}{add ax,bx}$](img81_19.png)
![$\textstyle \parbox{3cm}{F7 F9}$](img81_21.png)
![$\textstyle \parbox{2cm}{190}$](img81_22.png)
![$\textstyle \parbox{4cm}{idiv cx}$](img81_23.png)
![$\textstyle \parbox{3cm}{98}$](img81_26.png)
![$\textstyle \parbox{2cm}{2}$](img81_9.png)
![$\textstyle \parbox{4cm}{cbw}$](img81_27.png)
![$\textstyle \parbox{3cm}{23 C2}$](img81_30.png)
![$\textstyle \parbox{2cm}{3}$](img81_18.png)
![$\textstyle \parbox{4cm}{fitty:and
ax,dx}$](img81_31.png)
![$\textstyle \parbox{3cm}{F7 C1 0008}$](img81_33.png)
![$\textstyle \parbox{2cm}{4}$](img81_34.png)
![$\textstyle \parbox{4cm}{test
cx,08h}$](img81_35.png)
![$\textstyle \parbox{3cm}{D3 E0}$](img81_38.png)
![$\textstyle \parbox{2cm}{15}$](img81_39.png)
![$\textstyle \parbox{4cm}{shl ax,cl}$](img81_40.png)
![$\textstyle \parbox{3cm}{FA}$](img81_43.png)
![$\textstyle \parbox{2cm}{2}$](img81_9.png)
![$\textstyle \parbox{4cm}{cli}$](img81_44.png)
![$\textstyle \parbox{3cm}{EB 16 90}$](img81_47.png)
![$\textstyle \parbox{2cm}{30}$](img81_48.png)
![$\textstyle \parbox{4cm}{jmp {\tt
leg\-v\'e\-ge}}$](img81_49.png)
![$\textstyle \parbox{3cm}{E2 F2}$](img81_52.png)
![$\textstyle \parbox{2cm}{5--17}$](img81_53.png)
![$\textstyle \parbox{4cm}{lo\-op {\tt
ha\-h\'o}}$](img81_54.png)
![$\textstyle \parbox{3cm}{50}$](img81_57.png)
![$\textstyle \parbox{2cm}{11}$](img81_58.png)
![$\textstyle \parbox{4cm}{push ax}$](img81_59.png)
![$\textstyle \parbox{3cm}{58}$](img81_61.png)
![$\textstyle \parbox{2cm}{8}$](img81_62.png)
![$\textstyle \parbox{4cm}{pop ax}$](img81_63.png)
![$\textstyle \parbox{3cm}{E8 000D}$](img81_66.png)
![$\textstyle \parbox{2cm}{19}$](img81_67.png)
![$\textstyle \parbox{4cm}{call {\tt
girls}}$](img81_68.png)
![$\textstyle \parbox{3cm}{C3}$](img81_70.png)
![$\textstyle \parbox{2cm}{12}$](img81_71.png)
![$\textstyle \parbox{4cm}{ret}$](img81_72.png)
![$\textstyle \parbox{3cm}{CD 21}$](img81_75.png)
![$\textstyle \parbox{2cm}{51}$](img81_76.png)
![$\textstyle \parbox{4cm}{int 21h}$](img81_77.png)
![$\textstyle \parbox{3cm}{CF}$](img81_79.png)
![$\textstyle \parbox{2cm}{32}$](img81_80.png)
![$\textstyle \parbox{4cm}{iret}$](img81_81.png)
![$\textstyle \parbox{3cm}{AD}$](img81_84.png)
![$\textstyle \parbox{2cm}{12}$](img81_71.png)
![$\textstyle \parbox{4cm}{lodsw}$](img81_85.png)
![$\textstyle \parbox{3cm}{EC}$](img81_88.png)
![$\textstyle \parbox{2cm}{8}$](img81_62.png)
![$\textstyle \parbox{4cm}{in al,dx}$](img81_89.png)
![$\textstyle \parbox{3cm}{EE}$](img81_91.png)
![$\textstyle \parbox{2cm}{8}$](img81_62.png)
![$\textstyle \parbox{4cm}{out dx,al}$](img81_92.png)
![$\textstyle \parbox{3cm}{90}$](img81_95.png)
![$\textstyle \parbox{2cm}{3}$](img81_18.png)
![$\textstyle \parbox{4cm}{nop}$](img81_96.png)
.
Következő: Diszkek
| Tartalomjegyzék
| Előző: A memória
1999-09-23