POT
Práce s čísly
Práce s čísly v aritmetické jednotce počítače (Opakování)
1
K.D. - přednášky POT
POT
Práce s čísly
Dvojková, osmičková a šestnáctková soustava (1) • Osmičková nebo šestnáctková soustava se používá ke snadnému zápisu binárních čísel.
10 101000111 011
Číslo ve dvojkové soustavě
0 01 0 1 0 1 0 0 0 1 1 1 0 1 1
2
A
3
B
Doplněné nuly
K.D. - přednášky POT
Zápis pomocí šestnáctkové soustavy
0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
2
POT
Práce s čísly
Dvojková, osmičková a šestnáctková soustava (2) • Osmičková nebo šestnáctková soustava se používá ke snadnému zápisu binárních čísel. 101010 00111011
Číslo ve dvojkové soustavě
01 0 1 0 1 0 0 0 1 1 1 0 1 1
2
5
0
7
3
0 1 2 3 4 5 6 7
000 001 010 011 100 101 110 111
Zápis pomocí osmičkové soustavy
Doplněná nula
3
K.D. - přednášky POT
POT
Práce s čísly
Způsoby zobrazení čísel • Podle rozsahu a způsobu použití mohou být čísla uložena v některém z následujících formátů: – – – –
Celá čísla bez znaménka (unsigned integer). Celá čísla se znaménkem (signed integer). Celá čísla v BCD kódu. Čísla v pohyblivé řádové čárce (float).
• Každý formát má při provádění aritmetických operací různá omezení, která musí programátor respektovat.
K.D. - přednášky POT
4
POT
Práce s čísly
Čísla „unsigned integer“ • Na n bitech lze zobrazit číslo v rozsahu 0 ... 2n-1.
8bitové slovo unsigned
...
LSB
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
2 1 0
Rozsah zobrazení
7 6 5 4 3 2 1 0
255 254
...
MSB
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
7 6 5 4 3 2 1 0 Číslování bit ů 5
K.D. - přednášky POT
POT
Práce s čísly
Čísla „signed integer“ • Pro záporná čísla se používá doplňkový kód. • Na n bitech lze zobrazit číslo v rozsahu -2n-1 ... 2n-1-1.
S 6 5 4 3 2 1 0
...
8bitové slovo signed
Rozsah zobrazení
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
+1 0 -1
...
LSB
...
MSB
...
0 1 1 1 1 1 1 1 +127
1 0 0 0 0 0 0 0 -128
S6 5 4 3 2 1 0 Číslování bitů K.D. - přednášky POT
6
POT
Práce s čísly
Odvození čísla „signed integer“ • Pro zobrazení na n bitech: Kladné číslo se odečte od čísla 2n (tj. 1 v řádu, který je mimo rozsah zobrazení). Příklad: číslo -52: 1 v n-tém řádu Délka slova n bitů 1
-
256 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 - (+ 52) - 52 1 1 0 0 1 1 0 0 S 6 5 4 3 2 1 0 7
K.D. - přednášky POT
POT
Práce s čísly
Jednoduchá sčítačka • Sčítačka (a odčítačka) pro 8bitová čísla integer. • Kromě 8bitového výsledku generuje dva příznakové bity: – Carry bit – přenos do vyššího řádu. – Overflow – příznak přetečení čísel signed integer. Operand A 7 6 5 4 3 2 1 0
Operand B 7 6 5 4 3 2 1 0
A+ B
OV CY Overflow Carry bit
7 6 5 4 3 2 1 0 Součet A + B
Sčítačka pracuje stejně s čísly unsigned integer i signed integer (!). K.D. - přednášky POT
8
POT
Práce s čísly
Sečítání čísel „unsigned integer“ • Délka slova operandů i výsledku je omezena na 8 bitů
1 0 1 0 0 1 1 0 + 0 0 1 1 0 1 0 0 1 1 0 1 1 0 1 0
166 + 52 218
218
1 1 1 1 1 1 1 1 255 1 1 0 1 1 0 1 0
166
1 0 1 0 0 1 1 0
+52
0 0 0 0 0 0 0 0 0
9
K.D. - přednášky POT
POT
Práce s čísly
Sečítání čísel „unsigned integer“ • Při překročení rozsahu zobrazení dojde k přetečení ⇒ dostaneme nesprávný výsledek. • Přetečení je indikováno příznakovým bitem CY. 1 1 1 1 1 1 1 1
1 1 1 0 0 0 0 1
255
225
+ 0 0 1 1 0 1 0 0 + 52 1 0 0 0 1 0 1 0 1
Nevejde se do 8bitového zobrazení CY (Carry bit)
21
21 +52
225
0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
Hranice přetečení
1 1 1 0 0 0 0 1
0 0 0 0 0 0 0 0 K.D. - přednášky POT
0 255
0 10
POT
Práce s čísly
Odečítání čísel „unsigned integer“ • Při překročení rozsahu zobrazení dojde k přetečení ⇒ dostaneme nesprávný výsledek. 1 1 1 1 1 1 1 1
0 0 1 1 0 1 0 0 - 1 1 1 0 0 0 0 1 1 0 1 0 1 0 0 1 1
52 - 225 83
52
Nevejde se do 8bitového zobrazení
- 225
255
0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0 255
Hranice přeteč ení
CY (Carry bit) 83
0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0
0 11
K.D. - přednášky POT
POT
Práce s čísly
Rozsah zobrazení pro „unsigned integer“ • Hranice přetečení (pro 8bitové zobrazení) je mezi čísly 0 a 255. 000 0001 0 2 0 0 0 0 0 0 0 1
Přetečení
1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 255 1 1 1 1 1 1 1 0 254
1 1 1 1 1 1 0 1 253
K.D. - přednášky POT
12
POT
Práce s čísly
Sečítání čísel „signed integer“ • Přetečení je indikováno příznakovým bitem Overflow (OV). 0 1 1 1 1 1 1 1 +127
0 0 0 0 0 0 0 0
0 1 1 0 1 0 0 1 + 0 0 1 0 0 1 0 1 01 0 0 0 1 1 1 0
1
105 + 37 - 114
S=1 CY = 0 OV (Overflow) = 1
- 114
0
1 0 0 0 1 1 1 0
1 0 0 0 0 0 0 0 -128 0 1 1 1 1 1 1 1 +127
+ 37 105
Hranice přetečení
0 1 1 0 1 0 0 1 0 0 0 0 0 0 0 0
0
1 0 0 0 0 0 0 0 -128 13
K.D. - přednášky POT
POT
Práce s čísly
Odečítání čísel „signed integer“ • Přetečení je indikováno příznakovým bitem Overflow (OV). 0 1 1 1 1 1 1 1 +127
0 0 0 0 0 0 0 0
1 0 0 0 1 1 1 0 0 0 1 0 0 1 0 1 00 1 1 0 1 0 0 1
-
1
(- 114 ) - (+ 37 ) 105
S=1 CY = 0 OV (Overflow) = 1
- 114 - 37 105
0
1 0 0 0 1 1 1 0
1 0 0 0 0 0 0 0 -128 0 1 1 1 1 1 1 1 +127
Hranice přetečení
0 1 1 0 1 0 0 1 0 0 0 0 0 0 0 0
0
1 0 0 0 0 0 0 0 -128
K.D. - přednášky POT
14
POT
Práce s čísly
Rozsah zobrazení pro „signed integer“ • Hranice přetečení (pro 8bitové zobrazení) je mezi čísly +127 a -128. 1 0 0 0 0 0 1 0 -126
1 0 0 0 0 0 0 1 -127
1 0 0 0 0 0 0 0 -128 0 1 1 1 1 1 1 1 +127 0 1 1 1 1 1 1 0 +126
Přetečení
0 1 1 1 1 1 0 1 +125
15
K.D. - přednášky POT
POT
Práce s čísly
Podmínky pro nastavení bitu OV Příznakový bit OV se nastavuje podle typu operace a znamének operandů a výsledku. Znaménko 1. operandu
Znaménko 2. operandu
Znaménko výsledku
Operace
OV
+ + + + + +
+ + + + +
+ + + + × × ×
ADD
0
ADD
1
ADD
0
ADD
1
SUB
0
SUB
1
SUB
0
SUB
1
ADD
0
SUB
0
SUB
0
K.D. - přednášky POT
16
POT
Práce s čísly
Shrnutí (1) • Sčítačka pracuje stejně s čísly signed i unsigned. • Výsledek a význam bitů CY a OV se liší podle toho, jsou-li operandy interpretovány jako číslo signed nebo unsigned.
1 1 1 0 0 0 0 1
+ 0 0 1 1 0 1 0 0 1 0 0 0 1 0 1 0 1 CY = 1 OV = 0
225 + 52 21
- 31 + 52 21
Unsigned
Signed
17
K.D. - přednášky POT
POT
Práce s čísly
Shrnutí (2) • Sčítačka pracuje stejně s čísly signed i unsigned. • Výsledek a význam bitů CY a OV se liší podle toho, jsou-li operandy interpretovány jako číslo signed nebo unsigned.
0 1 1 0 1 0 0 1 + 0 0 1 0 0 1 0 1 01 0 0 0 1 1 1 0 CY = 0 OV = 1
K.D. - přednášky POT
105 + 37 142
105 + 37 - 114
Unsigned
Signed
18
POT
Práce s čísly
Porovnávání čísel integer • Při porovnávání se musí rozlišovat mezi čísly unsigned a signed. 1 1 1 0 0 0 0 1 A = 225
1 1 1 0 0 0 0 1 A = -31
0 0 1 1 0 1 0 0 B = 52
0 0 1 1 0 1 0 0 B = 52
Unsigned: A > B
Signed: A < B
Pro unsigned se používají operace „nad“ a „pod“ (above / below).
Pro signed se používají operace „větší“ a „menší“ (greater / less).
19
K.D. - přednášky POT
POT
Práce s čísly
BCD kód • Jednotlivé dekadické číslice se ukládají v binárním tvaru. 2759
0 0 0 0 0 0 1 0
0 0 0 0 0 1 1 1
2
7
0 0 0 0 0 1 0 1
5 Rozvinutý tvar BCD
0 0 0 0 1 0 0 1 9
2759
0 0 1 0 0 1 1 1 2
K.D. - přednášky POT
0 1 0 1 1 0 0 1
7 5 Zabalený tvar BCD
9 20
POT
Práce s čísly
Sečítání BCD čísel (1) • Musí se provádět dekadická korekce: Příklad: 3 + 5 = 8 Sečtení (ADD)
0 0 0 0 0 0 1 1 3 0 0 0 0 0 1 0 1 +5 0 0 0 0 1 0 0 0 8 H
Dekadická korekce (DAA)
0 0 0 0 1 0 0 0 8 0 0 0 0 0 0 0 0 +0 0 0 0 0 1 0 0 0 8
<9
H=0
H
H=0
H = 0, 8 < 9 ⇒ DAA neprovede úpravu výsledku
H = Half Carry
21
K.D. - přednášky POT
POT
Práce s čísly
Sečítání BCD čísel (2) • Musí se provádět dekadická korekce: Příklad: 7 + 5 Dekadická korekce (DAA)
Sečtení (ADD) 0 0 0 0 0 1 1 1 7 0 0 0 0 0 1 0 1 +5 0 0 0 0 1 1 0 0 C H
H=0
H = Half Carry K.D. - přednášky POT
>9
0 0 0 0 1 1 0 0 C 0 0 0 0 0 1 1 0 +6 0 0 0 1 0 0 1 0 12 H
H=1
H = 0, C > 9 ⇒ DAA upraví výsledek 22
POT
Práce s čísly
Sečítání BCD čísel (3) • Musí se provádět dekadická korekce: Příklad: 9 + 8 Sečtení (ADD) 0 0 0 0 1 0 0 1 9 0 0 0 0 1 0 0 0 +8 0 0 0 1 0 0 0 1 11 H
Dekadická korekce (DAA)
H=1
0 0 0 1 0 0 0 1 11 0 0 0 0 0 1 1 0 +6 0 0 0 1 0 1 1 1 17 H
H=1
H = 1, 1 < 9 ⇒ DAA upraví výsledek 23
K.D. - přednášky POT
POT
Práce s čísly
Čísla v pohyblivé řádové čárce • Před uložením jsou převedena do normalizovaného tvaru:
1.ddddd...d × 2exp • Formát uloženého čísla (podle IEEE 854): – Podle přesnosti je číslo uloženo na 32 nebo 64 bitech.
Znaménko mantisy
Posunutý exponent
1 bit
8 bitů (11 bitů)
K.D. - přednášky POT
Mantisa
23 bitů (52 bitů)
24
POT
Práce s čísly
Převod čísla do normalizovaného tvaru • Příklad:
normalizace čísla +6.62510 .
+6.62510 = 110.1012 • Normalizovaný tvar:
110.101 = 1.10101 × 22
25
K.D. - přednášky POT
POT
Práce s čísly
Dvojkový exponent • Exponent se ukládá na 8 (resp. 11) bitech v posunutém tvaru. Posunutý exponent = Exponent + 127 Exponent Zvláštní význam
+ 127 +1 0 - 126 Zvláštní význam K.D. - přednášky POT
Posunutý exponent 1111 1111 1111 1110 1000 0000 0111 1111 0000 0001 0000 0000 26
POT
Práce s čísly
Mantisa • Zobrazuje se v přímém kódu. • Číslice 1 před řádovou čárkou se neukládá. 2
+ 1. 10101 x 2
Exponent Uložená mantisa Neukládá se Znaménko 0 1 0 0 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4
0
D
4
0
0
0
0
Úplné zobrazení čísla 6.625 ⇒ 40D40000 27
K.D. - přednášky POT
POT
Práce s čísly
Příklady zobrazení (1) 1 = 1.0 × 20 +1 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
K.D. - přednášky POT
28
POT
Práce s čísly
Příklady zobrazení (2) +1 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+3 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0.25 0 0 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
29
K.D. - přednášky POT
POT
Práce s čísly
Příklady zobrazení (3) • Absolutně největší číslo: 2128 - LSB • Absolutně nejmenší číslo: 2-126 Absolutně největší číslo 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Absolutně nejmenší číslo 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
K.D. - přednášky POT
30
POT
Práce s čísly
Rozsah zobrazení
Přetečení
Podtečení
Použitelný rozsah +128
-(2
+ LSB)
Použitelný rozsah
0 -(2
-126
)
Přetečení
-126
+128
2
2
- LSB
31
K.D. - přednášky POT
POT
Práce s čísly
Speciální kombinace exponent/mantisa
Exponent
Mantisa
0000 0000
000...0
±0 (Nula)
0000 0000
... 1 ...
„Denormal“
1111 1111
000...0
±∞ (Nekonečno)
1111 1111
... 1 ...
NaN (Not a Number)
K.D. - přednášky POT
Význam
32
POT
Práce s čísly
Sečítání (1) • Před sečtením se čísla musí převést na stejný exponent • Příklad: 10 000 000 + 1 = 10 000 001 + 10 000 000 0 1 0 0 1 0 1 1 0 0 0 1 1 0 0 0 1 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0 +1 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exponent 1 0 0 1 0 1 1 0
Mantisa + 10 000 000 1 0 0 1 1 0 0 0 1 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0
1 0 0 1 0 1 1 0
+1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 Řádová čárka
K.D. - přednášky POT
POT
33
Práce s čísly
Sečítání (2) • Příklad: 100 000 000 + 1 + 100 000 000 0 1 0 0 1 1 0 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 0 0 0 0 1 0 0 0 0 0 +1 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exponent 1 0 0 1 1 0 0 1
Mantisa + 100 000 000 1 0 1 1 1 1 1 0 1 0 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0
1 0 0 1 1 0 0 1
+1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 Řádová čárka
Nevejdou se do zobrazení
Důsledek: 100 000 000 + 1 = 100 000 000 K.D. - přednášky POT
34