Výuka assembleru

2. Šestnáctková soustava

<< Předchozí díl
Další díl >>

Šestnáctková (hexadecimální) soustava je pro programátory píšící v assembleru (ale i v C/C++) důležitá. V šestnáckové soustavě se uvádějí paměťové adresy kódy instrukcí, hodnoty pro bitové masky a často i obyčejné číselné hodnoty. Také hexa editory a disassemblery poskytují výstup v šestnáctkové soustavě.

Šestnáct číslic ?

Označení šestnáctková soustava znamená, že obsahuje šestnáct číslic. Desítková soustava, kterou běžně používáme v "neprogramátorském" životě, má číslic deset. K zápisu šestnáckové soustavy se používají arabské číslice (kterých je deset) a písmena A B C D E F (malá nebo velká). Aby bylo jasné, že číslo je zapsané v šestnáctkové soustavě, píšeme za číslicí písmeno h (v C/C++ je to prefix 0x). Pokud číslice začíná písmenem (např. F000h), je navíc nutné před písmeno dopsat nulu (0F0000h), jinak překladač assembleru považuje číslici za symbol a hlásí chybu.

Desítková soustava 0  1  2  3  4  5  6  7  8  9
Šestnáctková soustava 0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F 

Řádové přechody v desítkové soustavě jsou mocninami 10ti, v šestnáctkové soustavě jsou to mocniny 16ti:

Desítková soustava Šestnáctková soustava
1
10
100
1000
10000
100000
1000000
= 1 * 10^0 (deset na nultou)
= 1 * 10^1 (deset na prvou)
= 1 * 10^2 (deset na druhou)
= 1 * 10^3 (atd.)
= 1 * 10^4
= 1 * 10^5
= 1 * 10^6
1h
10h
100h
1000h
10000h
100000h
1000000h
= 1 * 16^0 (šestnáct na nultou)
= 1 * 16^1 (šestnáct na prvou)
= 1 * 16^2 (šestnáct na druhou)
= 1 * 16^3 (atd.)
= 1 * 16^4
= 1 * 16^5
= 1 * 16^6

Z předcházející tabulky vyplývá, že 10h = 16, 100h = 256, 1000h = 4096 atd (pokud si nepamatujete mocniny 16ti, pomůže vám vědecká kalkulačka, obsažená ve Windows). Dále to znamená, že

20h
123h
2000h
= 2*16^1 =
= 1*16^2 + 2*16^1 + 3*16^0 =
= 2*16^3 =
32
291
8192

Bity a bajty

Hodnota napsaná jednou číslicí v šestnáctkové soustavě je čtyřbitové číslo. Hodnota napsaná dvěma číslicemi v šestnáctkové soustavě je osmibitové číslo. Pokud jsou registry procesoru x86 32bitové, znamená to tedy, že hodnota v nich obsažená je popsána osmi hexadecimálními číslicemi. V assembleru i v C/C++ se velice často používá 32bitový zápis:

00000001h
00000200h
F0000000h
místo
místo
místo
1
512
4026531840

Převod mezi šestnátckovou a desítkovou soustavou

Není úplně nutné převádět mezi šestnáctkovou a desítkovou soustavou ručně. Velice dobře nám k tomu poslouží vědecká verze kalkulačky ve Windows (stejně jako i normální "kamenná" kalkulačka. Nejrychleji spustíme kalkulačku tak, že na příkazový řádek (nebo do okna, které se objeví po stisku kláves Win+R) napíšeme calc. Pro převod z desítkové soustavy do šestnáctkové přepneme do desítkového režimu (přepínač Dec), napíšeme číslo a přepneme do šestnáctkového režimu (tlačítko Hex). Obdobný postup platí i obráceně.

<< Předchozí díl
Další díl >>