A REGISZTEREK MŰKÖDÉSE
Mielőtt mélyebben belemennénk a regiszterek működésébe, egy kicsit a
számrendszerekről. Eddig ugye mindenki a tízes számrendszert használta. Ezt tanítják az
iskolákba, ezt használjuk minden nap. Nos, ezt a programozás során elég keveset fogjuk
használni. A kettes és tizenhatos számrendszereket azonban annál gyakrabban.
Magyarázható ez a processzor digitális működésével (igen/nem) illetve a byte-os
szervezéssel. Mivel 1 byte-ot könnyedén felírhatunk 2 hexadecimális (16-os
számrendszer) jeggyel. 00h - FFh -ig. Fontos, hogy a hexa számokat külön jelölni kell!
Valamint igen egyszerű a bináris - hexadecimális átváltás, mivel 1 hexa számjegy 4
bináris jegynek felel meg. Így négyes csoportonként lehet a számokat konvertálni.
Fontos, hogy a hexadecimális számokat mindig számjeggyel kezdjük. Ha betűvel
kezdődne, akkor 1 nullát teszünk elé.
REGISZTEREKRŐL ÁLTALÁBAN
A regiszterek között vannak általános rendeltetésűek, illetve speciálisak. Az általános
rendeltetésűek az AX, BX, CX, DX neveket viselik. Ezekbe 0-65535-ig bármilyen számot
beírhatunk. Egy ilyen regiszter tulajdonképpen nem más, mint egy 16 bites adat
tárolására alkalmas rekesz. Ezeket használhatjuk 16, illetve 2*8 bitesként, mivel egy
ilyen rekesznek van egy alsó, illetve egy felső része. Ez például az AX regiszternél AL
illetve AH. Az AL az alsó, AH a felső rész. Ezt a következő táblázatból könnyen
megérthetjük:
Mint azt láthatjuk, alapértelmezés szerint decimális számokat használunk. Ettől eltérő
esetben jelölni kell a szám típusát, továbbá ha egy hexadecimális szám betűvel kezdődik,
elé egy vezető nullát kell tenni, tehát a hexadecimális számnak mindig számjeggyel kell
kezdődnie.
Egy 16 bites számmal megcímezhető legnagyobb memória cím értéke 65535. Egy
számítógépben azonban nem csak 65535 byte memória lehet, hanem több. A
legkevesebb, ami egy XT-ben lenni szokott, az 512 Kbyte de ennél általában több (640
Kbyte, 1 Mbyte) a gép alapmemóriája. Hogy ne csak 64 Kbyte legyen elérhető egy gép
számára, ezért találták ki a szegmens- és az indexregisztereket (az indexregisztereket
esetenként offsetregiszternek nevezik). Ezek lényege az, hogy a rendelkezésre álló
memóriából kiválaszthatunk egy 64 Kbyte méretű szegmenst, amit már képes kezelni a
processzor. Ahhoz, hogy ezt megértsük, legegyszerűbb a számítógép memóriáját úgy
elképzelni, mint egy nagy könyvet, amiből olvasni, illetve amibe írni szeretnénk. Mivel az
egész könyvet egyszerre nem láthatjuk, ki kell nyitnunk azt valamelyik oldalon. Ez az
oldal jelképezi azt a szegmenst, amivel egyidőben dolgozni tudunk. A szegmensregiszter
határozza meg, hogy melyik memóriarészlettel foglalkozunk (melyik oldalon van nyitva a
könyv), az indexregiszter pedig azt mutatja, hogy a kijelölt részleten belül melyik címen
(az oldal melyik sorában) van a szükséges adat. A szegmensek egymástól 16 byte
(paragrafus) távolságra lehetnek, így egy címet összesen 20 biten ábrázolhatunk. Ez a
megoldás átfedést okoz az egyes szegmensek között. Egy cím meghatározásához
szükséges 20 bites szám, a következőképpen néz ki:
Tegyük fel, hogy az 5A09Dh címet szeretnénk elérni. Ebben az esetben a regiszterek
értékei így alakulnának:
Szegmensregiszter: 0101101000001001b(5A09h)
Indexregiszter: 0000000000001101b(000Dh)
| A cím: |
|
________________________
| |
Ugyanezt érhetjük el így is:
Szegmensregiszter: 0101011010110101b(56B5h)
Indexregiszter: 0011010101001101b(354Dh)
| A cím: |
|
________________________
| |
A megoldás hátránya, hogy a memóriában csak un. paragrafus határon kezdődhet egy
szegmens. A hiányosság oka, hogy a cím alsó 4 bitjét nem, a szegmensregiszter
határozza meg. De az így kiválasztott lapon belül már minden byte elérhető az
indexregiszter segítségével. A szegmensregiszterek szerepe egy kivételével
meghatározott, ettől eltérni nem célszerű:
CS - Code Segment - Kódszegmens
DS - Data Segment - Adatszegmens
ES - Extra Segment - Extraszegmens
SS - Stack Segment - Veremszegmens
Az indexregiszterek pedig:
SI - Source Index - Forrásindex
DI - Destination Index - Célindex
Utóbbiak szerepe szintén előre meghatározott, de ha a feladat megkívánja, nyugodtan
eltérhetünk tőle.
A processzornak van még további két 16 bites regisztere a BP BasePointer (bázismutató)
illetve a Flag regiszter. Ez utóbbinak külön szerepe van, mivel az egyes bitjeinek
jelentése meghatározott de erről később.
Egy szintet vissza, vagy
vissza a főmenübe.