Mikroprocesorová technika (BMPT) Přednáška č. 10
Číselné soustavy v mikroprocesorové technice Ing. Tomáš Frýza, Ph.D.
Obsah přednášky ●
Číselné soustavy v mikroprocesorové technice –
●
●
Dekadická, binární, hexadecimální
Vzájemný převod mezi číselnými soustavami Aritmetické operace v jednotlivých soustavách (násobení, dělení)
●
BCD kód
●
Vyjádření záporných a desetinných čísel –
Dvojkový doplněk, floating-point
2
Dekadická číselná soustava ●
Dekadická (desítková) je nejsrozumitelnější pro člověka (10 prstů)
●
Základ soustavy: 10
●
Využívá symboly: 0,1,2,...,9
●
Kladný rozsah hodnot: 0 až 10
●
Př.: počet symbolů = 3; rozsah 0 až 999
●
Př.: rozklad čísla 2 745,21410
počet symbolů
–1
(2·103) + (7·102) + (4·101) + (5·100) + (2·10-1) + (1·10-2) + (4·10-3) 3
Binární číselná soustava ●
Binární (dvojková) soustava se používá v číslicové technice
●
Základ soustavy: 2
●
Využívá symboly: 0,1
●
Kladný rozsah hodnot: 0 až 2
●
Př.: počet symbolů = 8; rozsah 0 až 25510
●
Př.: rozklad čísla 1011,1012
počet symbolů
–1
(1·23) + (0·22) + (1·21) + (1·20) + (1·2-1) + (0·2-2) + (1·2-3) = 8 + 0 +2 +1 + 0,5 + 0 + 0,125 = 11,62510 ●
Značení: 11002, 0b1010
4
Hexadecimální číselná soustava ●
Hexadecimální, šestnáctková, „hexa“
●
Přehlednější zápis binárních čísel
●
Základ soustavy: 16
●
Využívá symboly: 0,1,2,...,9,A,B,...,F
●
Kladný rozsah hodnot: 0 až 16
●
Př.: počet symbolů = 4; rozsah 0 až 65 53510
●
Značení: 2BA616, 0xD2, $25A4
počet symbolů
–1
5
Převod mezi soustavami Dekadická Binární
Haxadecimální
0
0000
0
1
0001
1
2
0010
2
3
0011
3
4
0100
4
5
0101
5
6
0110
6
7
0111
7
8
1000
8
9
1001
9
10
1010
A
11
1011
B
12
1100
C
13
1101
D
14
1110
E
15 16 17
1111 10000 10001
F 10 11
●
●
●
Každý symbol z hexadec. soustavy lze vyjádřit právě 4 bity Osm bitů (jeden byte) = dva hexadec. symboly !
1011, 0101, 0011, 1101 11
5
3
13
6
Binární <-> Dekadická soustava ●
Binární -> dekadická soustava (viz. výše)
●
Dekadická -> binární soustava
●
●
Reálné číslo se rozdělí na celou a desetinnou část. Celá část se dělí základem soustavy (tj. 2) a zbytek udává hodnotu od binární čárky směrem k MSB. Př.: 25,37510 a) celá část 25/2 = 12 + zbytek 1 --> . . . . 1 12/2 = 6 + zbytek 0
. . . 0 1
6/2 = 3 + zbytek 0
. . 0 0 1
3/2 = 1 + zbytek 1
. 1 0 0 1
1/2 = 0 + zbytek 1
1 1 0 0 1
7
Binární <-> Dekadická soustava ●
●
Desetinná část se násobí základem soustavy a přenosové bity udávají hodnotu od binární čárky směrem k LSB. b) desetinná část 0,375·2 = 0,75 = 0,75 s přenosem 0 -->
11001,0..
0,75·2 = 1,50 = 0,50 s přenosem 1
11001,01.
0,50·2 = 1,00 = 0 s přenosem 1
11001,0112
8
Hexadec. <-> Dekadická soust. ●
●
●
Hexadec. -> dekadická soustava Jednotlivé symboly lze váhovat obdobně jako u dekadické soustavy Př.: 35616 = (3·162) + (5·161) + (6·160) = 768 + 80 + 6 = 85410
●
Př.: 2AF16 = (2·162) + (10·161) + (15·160) = 512 + 160 + 15 = 68710
9
Hexadec. <-> Dekadická soust. ●
●
●
Dekadická -> hexadecimální soustava Obdobný postup jako u převodu do binární soustavy Př.: 42310 423/16 = 26 + zbytek 7 -->
. . 7
26/16 = 1 + zbytek 10
. A 7
1 = 0 + zbytek 1
1 A 716
10
Hexadec. <-> Binární soustava ●
●
●
Hexadecimální -> binární soustava Každý symbol v hexadec. soustavě představuje čtveřici bitů Př.: 97216 = 9 (1001) 7 (0111) 2 (0010) = 1001 0111 00102
●
Př.: 5F1,616 = 5 (0101) F (1111) 1 (0001), 6 (0110) = 0101 1111 0001, 01102
11
Hexadec. <-> Binární soustava ●
●
●
Binární -> hexadecimální soustava Binární číslo se rozdělí na čtveřice bitů (nibly) a ty se převádí nezávisle na ostatních Př.: 1 1011 1010 01102 = 0001 (1) 1011 (B) 1010 (A) 0110 (6) = 1BA616
●
Př.: 101 1011 1011,0111 1102 = 0101 (5) 1011 (B) 1011 (B), 0111 (7) 1100 (C) = 5BB,7C16
●
Stačí „znát“ převodní tabulku pro 16 symbolů (0÷F) 12
Aritmetické operace v číselných soustavách - součet ●
Dekadická soustava (viz. první a druhá třída ZŠ)
●
Binární soustava – –
Sčítají se odpovídající bity od LSB Je-li výsledek součtu větší než jsme schopni v soustavě vyjádřit, dojde k přenosu do vyššího řádu (přičte se jednička) ==> potřebujeme n+1 bitů
0+0=0 1+0=1 1+1=0 1+0+0=1 1+0+1=0 1+1+1=1
bez přenosu bez přenosu přenos 1 bez přenosu přenos 1 přenos 1
1001
1
910
0001 0011
1910
1011 1110
0000 1011
1110
11
1 0100 2010
11
0001 1110
3010 13
Aritmetické operace v číselných soustavách - součet ●
●
Hexadecimální soustava Postup je identický: sčítají se odpovídající symboly od nejméně důležitých (zprava:) a používá se přenos do vyšších řádů 3A
5810
8E
14210
1
C8
20010
●
Jiná možnost: Převést hodnoty z hexadec. soustavy do binární, příp. dekadické – Provést aritm. operaci – Výsledek zpětně převést do hexadec. soustavy 0011 1010 (CA) 1000 1110 (8E) –
11111
1100 1000 14
Aritmetické operace v číselných soustavách - rozdíl ●
●
Výpočet je ve všech soustavách identický
– – –
0-0=0 0-1=1 a odečíst 1 od následujícího bitu 1-0=1 1-1=0
Jiná možnost využívá definice rozdílu pomocí součtu opačného čísla (viz. Dvojkový doplněk)
Př.: 12 – 6 = ? -1-1
1100 1210
Binární soustava: –
●
●
-0110 -610 0110 ●
610
Př.: 18 – 8 = ? -1
0001 0010 1810 -0000 1000 -810 0000 1010 1010
15
Aritmetické operace v číselných soust. – celočíselné násobení ●
●
Násobení dvou čísel se provádí ve všech soustavách stejně (viz. první a druhá třída ZŠ) V binární soustavě je to ještě jednodušší – násobíme nulou nebo jedničkou ;-)
●
Násobí se od LSB (nejméně důležitý bit)
●
(1·1=1 1·0=0 0·1=0 0·0=0)
●
Dílčí výsledky se binárně sečtou
●
Výsledek násobení dvou n-bitových čísel má 2n bitů
1001
910
0011
310
1001 1001 0000 0000 0011011 2710 16
Aritmetické operace v číselných soust. - celočíselné dělení ●
●
Postupným odečítáním dělitele od dělence zjistíme kolikrát se dělitel vejde do dělence Pozn.: Pravidla binárního odečítání – – – –
0-0=0 0-1=1 a odečíst 1 od následujícího bitu 1-0=1 1-1=0
●
Př.: 12 : 3 = ? 1100
1210
-0011
310
1001 -0011 0110 -0011 0011 -0011 0000
1 (0001) 2 (0010) 3 (0011) 410 (0100) 17
Násobení a dělení hodnotou 2,4,8,16,... ●
●
Př.: 9 · 4 = ?
●
Př.: 6 : 2 = ?
1001
910
0110
610
0100
410
-0010
210
0000 0000 1001 0000 0100100 3610
0100 -0010 0010 -0010 0000
Násobení 2 lze realizovat binárním posunem doleva o 1 pozici
●
1 (0001) 2 (0010) 310 (0011)
Dělení 2 lze realizovat binárním posunem doprava o 1 pozici
18
BCD (Binary Coded Decimal) kód ●
●
●
●
●
Všechny číslicové systémy pracují v binární soustavě, ale vstupní/výstupní data jsou požadována v dekadické soustavě (kalkulačka, voltmetr, čítač, hodiny, ...) Pro velké čísla je převod mezi binární a dekadickou soustavou příliš zdlouhavý a náročný; místo toho se používá tzv. BCD kód BCD kód popisuje každou číslici v dekadické soustavě čtveřicí bitů (tři bity jsou málo:) 0, 1, 2, ..., 9 -> 0000, 0001, 0010, ..., 1001 Zbývajících šest (1010, 1011, ..., 1111) kombinací 19 není využito
BCD (Binary Coded Decimal) kód ●
●
●
Nevyužité (nepovolené) kombinace BCD kódu bývají systémem detekovány Binární kód kóduje číslo jako celek, ale BCD kód kóduje každou číslici zvlášť ==> naprosto odlišné vyjádření téhož čísla Př.: 15310 = 1001 10012 (binární soust.) <-- 8 bitů 15310 = 0001 0101 0011 (BCD) <-- 12 bitů
●
Př.: 94,310 = 1001 0100,0011 (BCD)
20
Vyjádření záporných čísel ●
●
Hodnota binárního čísla je v mikroproc. technice vyjádřena určitým počtem bitů. Počet bitů určuje rozsah hodnot, který lze vyjádřit (8 bitů: 0 až 255) Pro potřeby vyjádření zda je hodnota kladná, nebo záporná, je přidán tzv. znaménkový bit na pozici MSB (nejvíce důležitý bit)
●
0 <=> kladná hodnota; 1 <=> záporná hodnota
●
True-Magnitude form: –
+4410 = 0010 11002
-4410 = 1010 11002
–
-2 + 3 = 1010 + 0011 = 1101 = -5 (!!) 21
Dvojkový doplněk ●
●
●
V číslicových systémech se k vyjádření záporných čísel používá tzv. dvojkový doplněk Dvojkový doplněk představuje číslo opačné k dané hodnotě Postup vytvoření dvojkového doplňku: – –
●
Negace všech bitů (tj. vytvořit jednotkový doplněk) Binárně přičíst jedničku
-2 + 3 = ? 0010 --> 1101 0001 1110
1110 0011 1 0001
-2 3 110
22
Dvojkový doplněk ●
Rychlejší postup při tvorbě dvojkového doplňku: – – –
●
Př.: 20 --> -20 – –
●
Opisovat všechny nulové bity od LSB První jednotkový bit opsat Zbývající bity negovat 0001 0100 --> 1110 1100 Kontrola: 1110 1011 0000 0001 1110 1100
Pozn.: Samé jedničky ve dvojkovém doplňku reprezentují vždy -1 23
Sčítání znaménkových čísel ●
●
Pro záporná čísla ve dvojkovém doplňku platí stejná pravidla pro aritmetické bitové operace Součet dvou kladných hodnot 0 1 0 0 1 +0 0 1 0 0 0 1 1 0 1
●
+9 +(+4) +13
Součet kladného a malého záporného čísla 0 1 0 0 1 +1 1 1 0 0 / 0 0 1 0 1 1
+9 +(-4) +5
24
Sčítání znaménkových čísel ●
Součet kladného a velkého záporného čísla 1 0 1 1 1 +0 0 1 0 0 1 1 0 1 1
●
Součet dvou záporných čísel 1 0 1 1 1 +1 1 1 0 0 / 1 0 0 1 1 1
●
-9 +(+4) -5 -9 +(-4) -13
Součet opačných čísel 1 0 1 1 1 +0 1 0 0 1 / 0 0 0 0 0 1
-9 +(+9) 0 25
Odečítání znaménkových čísel ●
●
Odečítání znaménkových čísel vyjádřených ve dvojkovém doplňku se provádí pomocí sčítání ;-) Postup: – –
K menšiteli vytvořit dvojkový doplněk Tento doplněk přičíst k menšenci 0 1 0 0 1 -0 0 1 0 0
●
+9 -(+4)
+1 1 1 0 0
+(-4)
0 1 0 0 1 +1 1 1 0 0 / 0 0 1 0 1 1
+9 +(-4) +5
Při součtu velkých čísel není zaručen dostatečný počet bitů pro výsledek -> dojde k přetečení (chybný výsl.) 0 1 0 0 1 +0 1 0 0 0 1 0 0 0 1
+9 +(+8) -15 (!!)
26
Binární čísla „Floating-point“ ●
●
●
Rozsah hodnot dvojkového doplňku je omezený –
8bitový systém: -12810 až +12710
–
16bitový systém: -32 76810 až + 32 76710
Pro reprezentaci desetinných čísel a pro zvýšení rozsahu je použita reprezentace s plovoucí řádovou čárkou (Floating-point) Tři základní formáty podle standardu ANSI/IEEE 754: – – –
Jednoduchá přesnost (Single precision – SP) – 32 bitů Dvojitá přesnost (Double precision – DP) – 64 bitů Rozšířená přesnost (Extended precision – EP) – 80 bitů 27
Single precision Floating-point ●
Formát binárního čísla se skládá ze tří částí: – – –
●
●
Znaménkový bit: S – 1 bit (31) Exponent: E – 8 bitů (30, 29, ..., 23) Mantisa: M – 23 bitů (22, 21, ..., 0)
Znaménkový bit = 1 <=> záporné číslo Záporná čísla nejsou vyjádřena ve dvojkovém doplňku; čísla opačná se proto liší pouze znaménkovým bitem 28
Single precision Floating-point ●
Mantisa: – –
– ●
Reprezentuje nejdůležitější bity kódovaného čísla Hodnota je normována => desetinná čárka je přesunuta za první nenulovou číslicí (v binární soustavě za první jedničku :) Z desetinné části se pak vybere mantisa
Exponent: – –
Může vyjádřit jak kladný, tak i záporný exponent K dané hodnotě je vždy přičtena konstanta 12710,
proto je výsledná hodnota ve formátu floating-point vždy kladná !! 29
Single precision Floating-point ●
Př.: Vyjádřete desetinné číslo +6,62510 ve tvaru s plovoucí řádovou čárkou (jednoduchá přesnost)
●
Řešení: –
Přepsat dané číslo do bin. soust.: 6,625 = 110,1012
–
Normovaná podoba: 110,101 = 1,10101 · 22 23bitová mantisa: 1010 1000 0000 0000 0000 000 Exponent: 2 + 127 = 12910 = 1000 00012
– – – –
Znaménkový bit: 0 <=> kladné číslo SP: 0100 0000 1101 0100 0000 0000 0000 0000 30
Single precision Floating-point ●
Př.: Podle standardu IEEE 754 přepište číslo z plovoucí řádové čárky do dekadické podoby –
●
Řešení: – – –
●
SP: 0100 1111 1001 0101 0000 0010 1111 1001 Znaménkový bit: 0 <=> kladné číslo Exponent: 1001 11112 - 12710 = 159 - 127 = 32 1,0010 1010 0000 0101 1111 001 . 232 = = 5 000 000 00010
Pozn.: Ve dvojkovém doplňku lze pomocí 32 bitů vyjádřit hodnoty od -2 147 483 648 do 2 147 483 647 31
Zdroje informací ●
●
●
●
●
Tocci, R,J. Microprocessors and Microcomputers. Pearson Education, New Jersey (USA), 2003, ISBN 0-13-060904-8 Morton, J. AVR, An Introductory Course. Newnes, Oxford (UK), 2002, ISBN 07-506-5635-2 Spasov, P. Microcontroller Technology. Prentice Hall, New Jersey (USA), 2004, ISBN 01-311-2984-8 Gadre, D.V. Programming and Customizing the Avr Microcontroller. McGraw-Hill, New York (USA), 2001, ISBN 0-07-134666-X Atmel. AVR Studio 4. [Online] http://www.atmel.com/ (září 2006)
32
Příklady k procvičení ●
●
●
●
●
Př. 1: Převeďte desetinné číslo 1 737,343 75 do binárního tvaru. Naznačte postup převodu. Př. 2: Převeďte desetinné číslo 5 471,593 75 do hexadecimální soustavy. Naznačte postup převodu. Př. 3: Převeďte hodnotu 23DB6,741 do binární soustavy. Př. 4: Zapište posloupnost bitů 10110111000,0110 v šestnáctkové soustavě. Př. 5: Hodnoty vyjádřené ve dvojkovém doplňku převeďte do decimální soust.: a) 10110, b) 01101, c) 11011 33