Regiszterek


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.

0000b
0h
1000b
8h
0001b
1h
1001b
9h
0010b
2h
1010b
0Ah (10)
0011b
3h
1011b
0Bh (11)
0100b
4h
1100b
0Ch (12)
0101b
5h
1101b
0Dh (13)
0110b
6h
1110b
0Eh (14)
0111b
7h
1111b
0Fh (15)


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:

Decimális
Bináris
Hexadecimális
AX
AH
AL
AH AL
46
00000000
00101110b
00 2Eh
5
00000000
00000101b
00 05h
1649
00000110
01110001b
06 71h
65536
11111111
11111111b
0FF FFh


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:
0101110000001001b
(5A09h)
+ 0000000000001101b (000Dh)
________________________
= 01011010000010011101b (5A09Dh)


Ugyanezt érhetjük el így is:

Szegmensregiszter: 0101011010110101b(56B5h)
Indexregiszter: 0011010101001101b(354Dh)

A cím:
0101011010110101b
(56B5h)
+ 0011010101001101b (354Dh)
________________________
= 01011010000010011101b (5A09Dh)


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.