Valogatott fejezetek assembly programozasrol


3.4. A hexadecimális számrendszer

A kettes számrendszerrel a legnagyobb probléma annak bőbeszédűsége. A 20210 érték ábrázolásához nyolc bináris számjegy kell. A decimális változathoz három decimális számjegy is elég, így az sokkal tömörebben ábrázol számokat, mint a kettes számrendszer. Ezt a tényt a kettes számrendszeren alapuló számítógépeket tervező mérnökök sem tévesztették szem elől. Amikor nagy értékekkel foglalkozunk, a bináris számok gyorsan kezelhetetlenné válnak. Sajnos azonban a számítógépek binárisan gondolkodnak, így legtöbbször kényelmes a kettes számrendszert használni. Bár tudunk számokat a tízes és kettes számrendszerek között átalakítani, az azonban nem triviális feladat. A hexadecimális (16 alapú) számrendszer megoldja ezeket a problémákat. A hexadecimális számjegyek két általunk keresett tulajdonságot is kínálnak: nagyon tömörek és egyszerűen átalakíthatók kettesről tizenhatosra és vissza. Emiatt a számítógéptervező mérnökök többsége a tizenhatos számrendszert használja. Mivel a hexadecimális számrendszer alapja 16, a hexadecimális ponttól balra minden egyes hexadecimális számjegy "egy érték szorozva a 16 egy növekvő hatványával"-t jelenti. Például, az 123416 jelentése:

1 * 163   +   2 * 162   +   3 * 161   +   4 * 160

or

4096 + 512 + 48 + 4 = 466010.

Mindegyik hexadecimális számjegy egyet ábrázol a 0 és 1510 közé eső tizenhat értékből. Mivel csak tíz decimális számjegy van, hat újabb számjegyet kell kitalálnunk a 1010 és 1510 közé eső értékek jelölésére. Új szimbólumok létrehozása helyett az A..F betűket használjuk. A következő példák mind érvényes hexadecimális számok:

 123416   DEAD16   BEEF16   0AFB16   FEED16   DEAF16

Mivel gyakran kell hexadecimális számokat a számítógépbe bevinnünk, azok ábrázolására egy másik mechanizmust kell kitalálnunk, mert a legtöbb számítógépes rendszeren nem tudjuk jelölni az értékhez tartozó alapszámot. A következő konvenciót használjuk:

Példák érvények hexadecimális számokra:

 $1234  $DEAD  $BEEF  $AFB  $FEED  $DEAF

Mint láthatjuk, a hexadecimális számok tömörek és könnyen olvashatók; emellett nagyon könnyű az átalakítás hexadecimális és bináris alakok között. Tekintsük a következő táblázatot:

3.1. táblázat - Bináris/hexadecimális átalakítás

BinárisHexadecimális
%0000$0
%0001$1
%0010$2
%0011$3
%0100$4
%0101$5
%0110$6
%0111$7
%1000$8
%1001$9
%1010$A
%1010$B
%1100$C
%1101$D
%1110$E
%1111$F


Ez a táblázat mindazt azt információt tartalmazza, ami hexadecimális szám binárissá alakításához (vagy fordítva) szükséges.

Egy hexadecimális szám binárissá alakításához az egyes hexadecimális számjegyek helyére írjuk a megfelelő négy bitet. Például, hogy a $ABCD értéket binárissá alakítsuk, a fenti táblázat szerint cseréljük ki az egyes számjegyeket:

	0	A	B	C	D	Hexadecimális
	0000	1010	1011	1100	1101	Bináris

Egy bináris számot hexadecimálissá alakítani csaknem ugyanilyen könnyű. Első lépésként egészítsük ki a bináris számot nullákkal, hogy a szám hosszúsága négy bit egész számú többszöröse legyen. Például, ha a bináris szám 1011001010, első lépésként adjunk hozzá balról két nullát, hogy a szám 12 bit hosszúságú legyen. Az átalakított bináris érték 001011001010. Következő lépésként a bináris számot négybites csoportokra osztjuk, pl. 0010 1100 1010. Végül megkeressük ezeket a bináris értékeket a fenti táblázatban és a megfelelő hexadecimális számjegyekkel helyettesítjük, pl. 2CA. Hasonlítsuk össze ennek nehézségi fokát a decimálisról binárissá vagy decimálisról hexadecimálisra való alakításéval!

Mivel a hexadecimális és bináris ábrázolás közötti átalakítást nagyon gyakran fogjuk végezni, érdemes pár percet a fenti táblázat memorizálására szánnunk. Még ha van is olyan kalkulátorunk, amelyik az átalakítást elvégzi, a kézi átalakítást gyorsabbnak és kényelmesebbnek fogjuk találni bináris és hecadecimális közötti átalakítás végzésére.


Randall Hyde: Art of Assembly WEB anyagabol: http://webster.cs.ucr.edu/