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 počet symbolů 1 Př.: počet symbolů = 3; rozsah 0 až 999 Př.: rozklad čísla 2 745,214 10 (2 10 3 ) + (7 10 2 ) + (4 10 1 ) + (5 10 0 ) + (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 počet symbolů 1 Př.: počet symbolů = 8; rozsah 0 až 255 10 Př.: rozklad čísla 1011,101 2 (1 2 3 ) + (0 2 2 ) + (1 2 1 ) + (1 2 0 ) + (1 2-1 ) + (0 2-2 ) + (1 2-3 ) = 8 + 0 +2 +1 + 0,5 + 0 + 0,125 = 11,625 10 Značení: 1100 2, 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 počet symbolů 1 Př.: počet symbolů = 4; rozsah 0 až 65 535 10 Značení: 2BA6 16, 0xD2, $25A4 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 1111 F 16 10000 10 17 10001 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,375 10 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,011 2 8
Hexadec. <-> Dekadická soust. Hexadec. -> dekadická soustava Jednotlivé symboly lze váhovat obdobně jako u dekadické soustavy Př.: 356 16 = (3 16 2 ) + (5 16 1 ) + (6 16 0 ) = 768 + 80 + 6 = 854 10 Př.: 2AF 16 = (2 16 2 ) + (10 16 1 ) + (15 16 0 ) = 512 + 160 + 15 = 687 10 9
Hexadec. <-> Dekadická soust. Dekadická -> hexadecimální soustava Obdobný postup jako u převodu do binární soustavy Př.: 423 10 423/16 = 26 + zbytek 7 -->.. 7 26/16 = 1 + zbytek 10. A 7 1 = 0 + zbytek 1 1 A 7 16 10
Hexadec. <-> Binární soustava Hexadecimální -> binární soustava Každý symbol v hexadec. soustavě představuje čtveřici bitů Př.: 972 16 = 9 (1001) 7 (0111) 2 (0010) = 1001 0111 0010 2 Př.: 5F1,6 16 = 5 (0101) F (1111) 1 (0001), 6 (0110) = 0101 1111 0001, 0110 2 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 0110 2 = 0001 (1) 1011 (B) 1010 (A) 0110 (6) = 1BA6 16 Př.: 101 1011 1011,0111 110 2 = 0101 (5) 1011 (B) 1011 (B), 0111 (7) 1100 (C) = 5BB,7C 16 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 bez přenosu 1 + 0 = 1 bez přenosu 1 + 1 = 0 přenos 1 1 + 0 + 0 = 1 bez přenosu 1 + 0 + 1 = 0 přenos 1 1 + 1 + 1 = 1 přenos 1 1001 9 10 1011 11 10 1 1 1 1 0100 20 10 0001 0011 19 10 0000 1011 11 10 1 1 0001 1110 30 10 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 58 10 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 8E 142 10 1 C8 200 10 0011 1010 (CA) 1000 1110 (8E) 1 1 1 1 1 1100 1000 14
Aritmetické operace v číselných soustavách - rozdíl Výpočet je ve všech soustavách identický Př.: 12 6 =? -1-1 Binární soustava: 1100 12 10 0-0=0-0110 -6 10 0-1=1 a odečíst 1 od následujícího bitu 0110 6 10 1-0=1 Př.: 18 8 =? 1-1=0-1 Jiná možnost využívá definice rozdílu pomocí součtu opačného čísla (viz. Dvojkový doplněk) 0001 0010 18 10-0000 1000-8 10 0000 1010 10 10 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 ;-) 1001 9 10 Násobí se od LSB (nejméně důležitý bit) 0011 3 10 (1 1=1 1 0=0 0 1=0 0 0=0) 1001 Dílčí výsledky se binárně sečtou 1001 Výsledek násobení dvou n-bitových čísel má 2n bitů 0000 0000 0011011 27 10 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 12 10-0011 3 10 1001 1 (0001) -0011 0110 2 (0010) -0011 0011 3 (0011) -0011 0000 4 10 (0100) 17
Násobení a dělení hodnotou 2,4,8,16,... Př.: 9 4 =? Př.: 6 : 2 =? 1001 9 10 0110 6 10 0100 4 10 0000 0000 1001 0000 0100100 36 10-0010 2 10 0100 1 (0001) -0010 0010 2 (0010) -0010 0000 3 10 (0011) Násobení 2 lze realizovat binárním posunem doleva o 1 pozici 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í není využito 19
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ř.: 153 10 = 1001 1001 2 (binární soust.) <-- 8 bitů 153 10 = 0001 0101 0011 (BCD) <-- 12 bitů Př.: 94,3 10 = 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: +44 10 = 0010 1100 2-44 10 = 1010 1100 2-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 1110-2 0001 0011 3 1110 1 0001 1 10 22
Dvojkový doplněk Rychlejší postup při tvorbě dvojkového doplňku: Opisovat všechny nulové bity od LSB První jednotkový bit opsat Zbývající bity negovat Př.: 20 --> -20 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 +9 +0 0 1 0 0 +(+4) 0 1 1 0 1 +13 Součet kladného a malého záporného čísla 0 1 0 0 1 +9 +1 1 1 0 0 +(-4) 1/ 0 0 1 0 1 +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-9 +0 0 1 0 0 +(+4) 1 1 0 1 1-5 Součet dvou záporných čísel 1 0 1 1 1-9 +1 1 1 0 0 +(-4) 1/ 1 0 0 1 1-13 Součet opačných čísel 1 0 1 1 1-9 +0 1 0 0 1 +(+9) 1/ 0 0 0 0 0 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 +9 0 1 0 0 1 +9-0 0 1 0 0 -(+4) +1 1 1 0 0 +(-4) +1 1 1 0 0 +(-4) 1/ 0 0 1 0 1 +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 +9 +0 1 0 0 0 +(+8) 1 0 0 0 1-15 (!!) 26
Binární čísla Floating-point Rozsah hodnot dvojkového doplňku je omezený 8bitový systém: -128 10 až +127 10 16bitový systém: -32 768 10 až + 32 767 10 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 127 10, 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,625 10 ve tvaru s plovoucí řádovou čárkou (jednoduchá přesnost) Řešení: Přepsat dané číslo do bin. soust.: 6,625 = 110,101 2 Normovaná podoba: 110,101 = 1,10101 2 2 23bitová mantisa: 1010 1000 0000 0000 0000 000 Exponent: 2 + 127 = 129 10 = 1000 0001 2 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 SP: 0100 1111 1001 0101 0000 0010 1111 1001 Řešení: Znaménkový bit: 0 <=> kladné číslo Exponent: 1001 1111 2-127 10 = 159-127 = 32 1,0010 1010 0000 0101 1111 001. 2 32 = = 5 000 000 000 10 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