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).

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.
.


.





























































.
Következő: Diszkek
| Tartalomjegyzék
| Előző: A memória
1999-09-23