Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Struktura a architektura počítačů (BI-SAP) 5 doc. Ing. Hana Kubátová, CSc. Katedra číslicového návrhu Fakulta informačních technologii ČVUT v Praze letní semestr 2010-11
BI-SAP 5: osnova Číselné soustavy a kódy, převody, aritmetické operace Zdroje:T. Brabec, M. Skrbek Strojový kód a data 2
Poziční číselné soustavy a převody Dvojková soust., převod do desítkové Šestnáctková soust., převod do dvojkové Aritmetika (1) Sčítání Násobení Řádová mřížka Zobrazení záporných čísel Aritmetika (2) Odčítání 3
Literatura [1] Pluháček, A., Projektování logiky počítačů, skripta, Praha, ČVUT, 2000, ISBN 80-01-02145-9 4
Poziční číselné soustavy I Určeny bází (základem) z, z N a z 2 Soustava s bází z z-adická Nejčastěji používané soustavy: z = 2 z = 10 z = 16 dvojková (binární) desítková (dekadická) šestnáctková (hexadecimální) 5
Poziční číselné soustavy II Zápis čísla v z-adické soustavě: A z řádová čárka = ( an an 1... a1 a0, a 1 a 2... a m ), n, m N z celá část zlomková část základ soustavy a i z-adická cifra (číslice) na pozici i a i hodnota číslice a i, 0 a i < z i řád číslice (řádové místo, pozice), určuje její váhu v i = z i n nejvyšší řád s nenulovou číslicí -m nejnižší řád s nenulovou číslicí Hodnota čísla A z : A = n v( A z ) = a v m i i = n m a i z i 6
Dvojková soustava Základ (báze) soustavy z = 2 zápis čísla tvořen posloupností 0 a 1 v i 2 4 2 3 2 2 2 1 2 0 2-1 2-2 2-3 Př. 1 0 0 1 1, 1 0 1 2 v(a) = 2 4 +2+1+1/2+1/8 = 19,625 Toto je ekvivalentní zápis čísla A v desítkové soustavě. Určení hodnoty čísla převod do desítkové soust., tj. Dvojková Desítková 7
Desítková Dvojková (celá část) Postupným dělením celé části číslem 2 (tj. základem dvojkové soustavy) Př. Převeďte číslo 57 10 do dvojkové soustavy. 57 10 A 2 57 : 2 = 28 zbytek 1 a 0 A 2 = 111001 2 28 : 2 = 14 zbytek 0 14 : 2 = 7 zbytek 0 7 : 2 = 3 zbytek 1 3 : 2 = 1 zbytek 1 1 : 2 = 0 zbytek 1 a 5 Pozn. Zápis čísla odpovídá posloupnosti zbytků brané v opačném pořadí. 8
Desítková Dvojková (zlomková část) Postupným násobením zlomkové části číslem 2 (tj. základem dvojkové soustavy) Př. Převeďte číslo 0,65625 10 do dvojkové soustavy. 0,65625 10 A 2 0,65625 2 = 1, 3125 a -1 0,3125 2 = 0, 625 A 2 = 0,10101 2 0,625 2 = 1, 25 0,25 2 = 0, 5 0,5 2 = 1, 0 a -5 9
Příklady: 1. 11010001,11 2 209,75 10 2. 1111111 2 127 10 3. 1,011001 2 1,390625 10 4. 147,15625 10 1001 0011,0010 1 2 5. 1345,125 10 101 0100 0001,001 2 10
Důležité mocniny dvou n 2 n Dec. 0 2 0 1 1 2 1 2 2 2 2 4 3 2 3 8 4 2 4 16 5 2 5 32 6 2 6 64 7 2 7 128 n 2 n Dec. 8 2 8 256 9 2 9 512 10 2 10 1 024 11 2 11 2 048 12 2 12 4 096 13 2 13 8 192 14 2 14 16 384 15 2 15 32 768 16 2 16 65 536 n 2 n Dec. 20 2 20 1 M 30 2 30 1 G 32 2 32 4 G 40 2 40 1 T -1 2-1 0,5-2 2-2 0,25-3 2-3 0,125-4 2-4 0,0625 Toto je důležité! 11
Šestnáctková soustava Zápis čísla tvořen ciframi 0..9 a A..F Hex. Dec. Bin. 0 0 0000 1 1 0001 2 2 0010 3 3 0011 4 4 0100 5 5 0101 6 6 0110 7 7 0111 Hex. Dec. Bin. 8 8 1000 9 9 1001 A 10 1010 B 11 1011 C 12 1100 D 13 1101 E 14 1110 F 15 1111 Toto je nutné znát zpaměti! 12
Dvojková Šestnáctková Jsou to příbuzné soustavy, tj. z 16 = 16 = 2 4 = z 2 4 Jedna cifra v z 16 odpovídá čtyřem cifrám v z 2 Mezi zápisy v soustavách z 16 a z 2 je pouze formální rozdíl. Př. Převeďte čísla mezi příbuznými soustavami: a) 1001101,01011 2 b) 734,051 16 0100 1101, 0101 1000 2 4 D, 5 8 16 0111 0011 0100,0000 0101 0001 2 13
Příklady 101101011,010111 2 16B,5C 16 1. 111010111010100 2 75D4 16 2. 0,0011010111001 2 0,35C8 16 3. 12A5F,1 16 1 0010 1010 0101 1111,0001 2 4. F563D,8 16 1111 0101 0110 0011 1101,1 2 5. 0,98736 16 0,1001 1000 0111 0011 0110 2 14
Sčítání ve dvojkové soustavě Základem je součet dvou 1-ciferných čísel + 0 1 Přenos do vyššího řádu. Př. Sečtěte čísla 0101 2 a 1110 2. 0 0 1 1 1 1 0 + 0 1 0 1 1 1 1 0 Přenos zřádu i se sčítá s 1 1 0 0 ciframi v řádu (i+1). 1 0 0 1 1 Pozn. Součtem dvou N-ciferných čísel může vzniknout (N+1)-ciferné číslo. 15
Násobení ve dvojkové soustavě Základem je součin dvou 1-ciferných čísel 0 1 0 0 0 1 0 1 Více-ciferné násobení se převádí na sčítání Př. Vynásobte čísla 1110 2 a 101 2. 1 1 1 0 1 0 1 1 1 1 0 0 0 0 0 ++ 1 1 1 0 1 0 0 0 1 1 0 1 (1 1 1 0) 0 (1 1 1 0) 1 (1 1 1 0) Pozn. Součinem N- a M-ciferného čísla může vzniknout (N+M)-ciferné číslo. 16
Řádová mřížka Řádová mřížka určuje formát zobrazitelných čísel na počítači (tj. definuje nejvyšší řád n a nejnižší řád -m) Př. Základní vlastnosti: řádová čárka n = 3, -m = 0 n = 0, -m = -3 Délka ř.m. (l) počet řádů obsažených v ř.m. Jednotka ř.m. (ε) nejmenší číslo zobrazitelné v ř.m. Modul ř.m. (M) nejmenší číslo, které již v ř.m. zobrazitelné není M = 1 0000, ε = 1 M = 10,000, ε = 0,001 17
Určete vlastnosti ř.m. Určete vlastnosti následujících řádových mřížek (z = 2): a) b) c) obecně, tj. v závislosti na n a m: l = 8, M = 2 10, ε = (2-7 ) 10 l = 8, M = (2 8 ) 10, ε = 1 l = 6, M = (2 3 ) 10, ε = (2-3 ) 10 l = n + m + 1, M = z n+1, ε = z -m 18
Odečítání ve dvojkové soustavě Odčítání přičítání opačného čísla, vždy v rámci řádové mřížky, tedy modulu M. Př. Určete rozdíl čísel 10 10 6 10 (ve dvojkové soustavě). (Odečtení 6 je totéž jako přičtení 26 10 modulo 32) Všimněte si volby ř.m. Obě čísla v ní musí být správně zobrazena! 6 10 = 00110 2-6 10 = 11010 2 1 1 0 1 0 +10 10 = 01010 2 0 1 0 1 0 4 10 = 00100 2 1 0 0 1 0 0 znaménko výsledku tento přenos ignorujeme (prozatím) 19
Úloha: Odečtěte ve dvojkové soustavě. Převeďte čísla do dvojkové soustavy (je-li to nutné) a spočítejte jejich rozdíl. 1. 6 10-10 10 = 11 100 2 2. 7 10-7 10 = 0 2 3. 1001 2-0110 2 = 0 0011 2 4. F1 16-3 16 = 0 1110 1110 2 Problémy: velikost řádové mřížky, určení a zobrazení správného výsledku, jestliže používáme nezáporná čísla 20
Detekce (ne)správného výsledku Záleží na použitém kódu pro zobrazení čísel se znaménkem a velikosti řádové mřížky, tzn. modulu. Sčítání a odčítání: Příklady: M=100002 tzn.: zobrazíme 16 čísel, 0 až 15 (12+7)10..1100 + 0111 = 10011 310 nebo 1910? (12-7)10..1100-0111 = 1100 + 1000+1= 10101 510 nebo 2110? 1. přenos 21
Odčítání pro nezáporná čísla pozorování na příkladu M=1000, ε=1: B=101 B=010 B + B = 111 = 1000 1 = M 1 B = B + 1 M A B = A + B + 1 M Příklad: Abychom dostali správný výsledek musíme mít možnost odečíst modul. Musí vyjít přenos!! M=100002 (12-7)10 Hana Kubátová..1100 BI-SAP 0111 5, Aritmetika..1100 + 1000+1= 10101 510 22
Zobrazení záporných čísel (čísel se znaménkem) Standardní polyadické soustavy pouze nezáporná čísla Zobrazení záporných čísel číselné kódy popisují transformaci z omezené množiny celých čísel do omezené množiny nezáporných čísel Nejpoužívanější číselné kódy: přímý (znaménko a absolutní hodnota sign-magnitude) aditivní (s posunutou nulou biased) doplňkový (pro dvojkovou soustavu - 2 s complement) (inverzní) 23
Doplňkový kód Definice: D (X) = X, je-li X >= 0 M + X, je-li X < 0 D(X) M Příklad napsat všechna 3 bitová čísla (M = 1000, ε = 1, l = 3) ½M X D(X) 0 0 0 0 1 0 0 1 2 0 1 0 3 0 1 1-4 1 0 0-3 1 0 1-2 1 1 0-1 1 1 1 ½M ½ M X < ½ M ½M Znaménko je určeno prvním bitem zleva, ale tento bit je organickou součástí obrazu!!! 24 X
Př. Obrazy čísel +5 a 5 (z = 2, M = 10000 2, 16 10 ). D(5) = 5 10 = 101 2 +101 2 D 0 1 0 1 D(-5) = 16 10 + (- 5 10 ) = 11 10 = 1011 2 1 0 1 1 Algoritmus určení obrazu záporného čísla (ve dvojkové soustavě): 1. Zapíšeme číslo X 2 do řádové mřížky. 2. Invertujeme všechny bity. 3. Přičteme jedničku. -101 2 nejvyšší bit představuje znaménko D Lze rychleji: Zprava opisuj 0 až do první 1, tu také opiš. Další bity invertuj. Př. Obraz čísla 5 (z = 2, Z = 16). 0 1 0 1 5 10 = 101 1 0 1 0 2 + 0 0 0 1 1. zápis v ř.m. 2. inverze bitů 3. přičtení jedničky 1 0 1 1 D(-5 10 ) 25
Doplňkový kód - pokračování Obraz záporného čísla X je doplňkem jeho hodnoty do modulu M řádové mřížky Př. -25 10 D 9 9 7 5 +101 2 D 0 1 0 1 +0,05 10 D D 0 0 5 0-0,11 2 1 0 1 0 26
Sčítání a odčítání v doplňkovém kódu Příklady: M=100002 tzn. : zobrazíme 16 čísel, ale nyní -8 až 7 (7-4)10.. 0111 + 1100 = 10011 310 nebo 1910? (4 + 7)10.. 0100 + 0111 = 0100 + 0111= 1011 1110 nebo -510? A co teď s přenosem a jak poznáme, že výsledek je správně? 27
Sčítání a odčítání v doplňkovém kódu příklady tabule D(A) + D(B) D(A + B) 1 A 0 B 0 A + B A + B 2 A 0 B < 0 A < 0 B 0 A + B + M A + B A + B + M 3 A < 0 B < 0 A + B + M + M A + B + M D(A + B) = D(A) + D(B) D(A) + D(B) M Sečtou se obrazy a ignoruje se přenos!!! Příklady viz proseminář 28
Přeplnění detekce nesprávného výsledku Přeplnění (overflow) není přenos (carry)!!!!! D(A) + D(B) 3 2xM Přeplnění: + + + - - + - + 3 2 2 M 1 + M 0 M 1 A + B 29
Odčítání Příklad pro 3 bitová nezáporná čísla (opakování): V doplňkovém kódu: B=101 B=010 A B = A + (-B) D(B) + D(-B) = B + (-B) + M = M B + B = 111 = 1000 1 = M 1 B = B + 1 M A B = A + B + 1 M Správný výsledek musím mít možnost odečíst modul, Musí vyjít přenos!! D(-B) = M - D(B) D(-B) = D(B) + 1 A B = D(A) + D(B) + 1 detekce přeplnění je stejná jako u sčítání 30
Doplňkový kód pro desítkovou soustavu 10 s complement Příklad 3 místná desítková čísla M = 1000 10 znaménko je určeno první číslicí zleva: 0 4... + (kladná čísla) 5 9... (záporná čísla) X D(X) X D(X) 0 000 500 500 1 001 499 501 499 499 1 999 D(X) + D( X) = 1000 = 999 + 1 D( X) = 999 D(X) + 1 označme: a = 9 a D(X) = 499 D( X) = 499 + 1 D( X) = 500 + 1 = 501 31
Přímý kód Nejvyšší řád ř.m. představuje znaménko, zbytek ř.m. je absolutní hodnota Znaménko reprezentováno číslicí: Znázornění zobrazení: P(X) M + 0, - 1 +/- absolutní hodnota ½M X < ½M ½M 0 X ½M 32
Příklady přímý kód M = 1000... tzn. 3bitová čísla X P(X) +0 0 0 0 kladná nula +1 0 0 1 +2 0 1 0 +3 0 1 1-0 1 0 0 záporná nula -1 1 0 1-2 1 1 0-3 1 1 1-25 10 P 1 0 2 5 +101 2 P 0 1 0 1 +0,05 10 P P 0 0 5 0-0,11 2 1 1 1 0 33
Sčítání a odčítání Pracuji zvlášť se znaménkem a absolutní hodnotou Absolutní hodnota je nezáporné číslo Příklad pro 3 bitová nezáporná čísla: B=101 B=010 B + B = 111 = 1000 1 = M 1 B = B + 1 M A B = A + B + 1 M 34
Sčítání a odčítání v přímém kódu A + B, A B, výsledek ulož do A kde A ~ (za, aa), B ~ (zb, ab) z znaménko, a absolutní hodnota 35
Aditivní kód Též označovaný jako kód s posunutou nulou Formální definice: A(X) = X + K pro -K X < M - K K vhodná konstanta často se volí: K = ½ Z M K A(X) X -K 0 M-K