Struktura a architektura počítačů Aritmetické operace Pevná a pohyblivá řádová čárka České vysoké učení technické Fakulta elektrotechnická Ver..2 J. Zděnek 23
Aritmetické operace pevná řádová čárka Pevná řádová čárka (Fixed Point) Řádová čárka má vzhledem k řádové mřížce pevně definovanou pozici Nejčastěji používané formáty (v doplňkovém kódu): Integer (celá čísla) Př. Integer6 Fraction (čísla menší než ) Značení Fx.y nebo Qx.y, kde x je počet řádových pozic před řádovou čárkou (n+), y pak počet pozic za řádovou čárkou (m) Nejčastěji se používá formát F.y, kdy před řádovou čárkou je pouze znaménkový bit (čísla v doplňkovém kódu) Př. i --2... -5 Fraction F.5 n, m5 A7B4SAP Struktura a architektura počítačů - Aritmetické operace 2
Aritmetické operace pevná řádová čárka Pevná řádová čárka (Fixed Point) shrnutí: Procesor řádovou čárku nesleduje (sledovat ji musí programátor) Procesor pracuje pouze nad bitovými obrazci Čísla bez znaménka (unsigned) jsou v přímém binárním kódu Čísla se znaménkem (signed) jsou kódována v doplňkovém kódu (Twos s Complement Code) (též dvojkový nebo druhý doplněk) K výpočtu doplňkového kódu stačí operace NOT a + Odčítání je možné nahradit přičtením čísla v doplňkovém kódu A7B4SAP Struktura a architektura počítačů - Aritmetické operace 3
Aritmetické operace pevná řádová čárka Pevná řádová čárka (Fixed Point) - shrnutí Instrukční soubor procesoru obsahuje vždy alespoň operace: Sčítání, not, and, or, posuvy vlevo a vpravo Pomocí těchto operací se ostatní operace (odčítání, násobení, dělení) dají sestavit. Některé procesory mají přímo instrukce pro: Přičtení, odečtení (Increment, Decrement) Odčítání, Násobení, Dělení, Výpočet dvojkového doplňku (Negate, NEG), A7B4SAP Struktura a architektura počítačů - Aritmetické operace 4
Aritmetické operace pevná řádová čárka Pevná řádová čárka (Fixed Point) shrnutí: Důležité: Význam příznakových bitů (Flags, PSW, Status) pro aritmetické operace: Po aritmetických operacích (a některých dalších) se nastaví příznakové bity C, OV, AC, N, Z ve stavovém slově (Flags, PSW, Status) procesoru. Příznaky se použijí v dalších operacích: Pro spojení operací přesahujících šířku slova ALU V podmíněném větvení programu (podmíněné skoky), C (Carry) indikuje přenos z nejvyššího řádu použitého slova, pří odčítání má význam výpůjčky (borrow) z vyššího řádu. Používá se pro spojení operací sčítání a odčítání při šířce zpracovávaného slova větší než je šířka slova ALU. Indikuje přeplnění formátu u čísel bez znaménka. A7B4SAP Struktura a architektura počítačů - Aritmetické operace 5
Aritmetické operace pevná řádová čárka Pevná řádová čárka (Fixed Point) shrnutí: Důležité: Význam příznakových bitů (Flags, PSW, Status) pro aritmetické operace: OV (Overflow) sleduje přenos z nejvyššího a nejbližšího nižšího řádu použitého slova. Indikuje přeplnění formátu u čísel se znaménkem. OV C s xor C s- AC (Auxiliary Carry)(též DC) indikuje přenos mezi třetím a čtvrtým bitem slova (Některé procesory ho nemají). Používá se pro dekadickou korekci pří počítání s binárně kódovanými desítkovými čísly (BCD - Binary Coded Decimal Numbers). A7B4SAP Struktura a architektura počítačů - Aritmetické operace 6
Aritmetické operace pevná řádová čárka Pevná řádová čárka (Fixed Point) shrnutí: Důležité: Význam příznakových bitů (FLAGs, PSW, Status) pro aritmetické operace: Z (Zero) indikuje, že výsledek předchozí operace ALU je nulový. Z pokud je výsledek nula, jinak Z (tj. výsledek nebyl nula) N (Negative) sleduje hodnotu nejvyššího bitu použitého slova. N pokud je výsledek operace záporné číslo (v doplňkovém kódu). ALU nerozlišuje, zda programátor považuje zpracovávané hodnoty za číslo se znaménkem nebo bez znaménka. ALU nastaví vždy všechny příznakové bity dle jejich definice. Programátor pak musí zvolit pro další operace správné příznaky a ty testovat nebo jinak použít. A7B4SAP Struktura a architektura počítačů - Aritmetické operace 7
pic8f Family ALU and Multiplier A7B4SAP Struktura a architektura počítačů - Aritmetické operace 8
Výpočet dvojkového doplňku C( x) NOT( C( x)) + Př: C( x) x 6 2 x 6 C( x)? Výpočet: Kontrola: NOT( C( x)) C( x) 2 + 2 C( x) + ( C( x)) 2 2 A7B4SAP Struktura a architektura počítačů - Aritmetické operace 9
Sčítání čísla bez znaménka (kladná) Jednobitové sčítání (pravdivostní tabulka): D 2 3 4 5 6 7 a b c i c s s Př. Vícebitové sčítání (předpoklad C i ): 24 d b +7 d b 248 d b C s 25 d +8 d 258 d C s b b b Mimo formát: A7B4SAP Struktura a architektura počítačů - Aritmetické operace
Odečítání čísla bez znaménka (kladná) Jednobitové odčítání (pravdivostní tabulka) d i a i b i c i D 2 3 4 5 6 7 a i b i c i c s d i Př. Vícebitové odčítání (předpoklad C i, význam borrow ): 243 d 7 d 236 d b b b (borrow) C s A7B4SAP Struktura a architektura počítačů - Aritmetické operace
Přeplnění (Overflow) čísla se znaménkem U čísel se znaménkem je přeplnění (Overflow), tj. výsledek je mimo formát, indikováno nastavením příznakového bitu OV (Overflow). Bit OV je součástí stavového slova procesoru (PSW, Flags). Logika bitu OV musí sledovat přenos z posledního a ještě předposledního bitu formátu. OV C s xor C s- Odečítání pomocí dvojkového doplňku (Two s Complement) Tento způsob je použitý v počítači d x y x + ( y) x + ( NOT ( y) + ) A7B4SAP Struktura a architektura počítačů - Aritmetické operace 2
Přeplnění (Overflow) čísla se znaménkem Př: Přeplnění z formátu (M, zde formát +7,-8) 7 d b 7 d b d b C s C s- OV 4 d b 3 d b 7 d b x x C s C s- OV 4 d b 4 d b 8 d b C s C s- OV 4 d b 4 d b 8 d b x C s C s- OV 6 d b 3 d b 9 d b x C s C s- OV 4 d b 5 d b 9 d b x C s C s- OV A7B4SAP Struktura a architektura počítačů - Aritmetické operace 3
Sčítání a odčítání čísla se znaménkem Př. Sčítání a odčítání 4bitovou sčítačkou ve dvojkovém doplňku 73 d b b 73 d b b +27 d b b 27 d b b C s b C s b C s b C s b d x x b C s C s- b OV 46 d b C s C s- b OV 2 d b b 2 d b b +6 d b b 6 d b b C s b C s b C s b C s b 36 d b x C s C s- b OV 36 d b x C s C s- b OV A7B4SAP Struktura a architektura počítačů - Aritmetické operace 4
Násobení bez znaménka V desítkové soustavě (připomenutí): 43 x 246 3578 858 43 x 6. +572 43 x 4. +286 43 x 2. 2 3578 součet Zapisujeme přehledněji (Viz následující strana) Ve dvojkové soustavě (stejný princip): Př. 9 d x 6 d 54 d x x.2 + x.2 + + x.2 2 x.2 3 součet Zapisujeme přehledněji (Viz následující strana) A7B4SAP Struktura a architektura počítačů - Aritmetické operace 5
Násobení bez znaménka - postup V desítkové soustavě (připomenutí): 43 x 246 3578 858 43 x 6. +572 43 x 4. +286 3578 43 x 2. 2 součet Ve dvojkové soustavě (stejný princip): Př: 9 d x 6 d 54 d + + + x x.2 x.2 x.2 2 x.2 3 součet A7B4SAP Struktura a architektura počítačů - Aritmetické operace 6
Násobení bez znaménka - algoritmus uct a x b, (8 x 8 6 bits) UMul UMulInit: add a b count 8 UMulNextCycle:? count no yes b yes? LSB no add + shift bit count count- uct a x b A7B4SAP Struktura a architektura počítačů - Aritmetické operace 7
Násobení bez znaménka - příklad Př. 4 x 4 8 bitů Desítkově: a 7, b 4, p 7 x 4 28 Dvojkově: a b, b b, p? Init add a + + b Step ) shift logical right 2) shift logical right 3) add & shift logical right add + add shift logical right 4) 28 d A7B4SAP Struktura a architektura počítačů - Aritmetické operace 8
Násobení bez znaménka - realizace ; ****************************************************************** ; Unsigned multiplication algorithm ; ; 8 x 8 6 bit ; ; a, b E (, 255) ; ; inputs: addh, addl addh a multiplicand, addl ; H, L H, L b multiplier ; ; outputs: H, L uct ; ; affects: STATUS, WREG ; ;******************************************************************** #define BIT #define BIT7 7 #define F #define UMul_LOOP_CNT 9 A7B4SAP Struktura a architektura počítačů - Aritmetické operace 9
Násobení bez znaménka - realizace UMul: movlw UMul_LOOP_CNT ; Preset loop counter movwf loopctr UMulNextCycle: dcfsnz loopctr ; Run loop 8 times bra UmExit UmTestLsb: btfsc L, BIT bra UmAdd ; LSB bcf STATUS, C ; Clear C SLR only bra UmSar ; LSb UmAdd: movff addl, WREG ; Add multiplicand to partial uct addwf L, F movff addh, WREG addwfc H, F bra UmSar UmSar: ; Shift logical right, including C rrcf H ; Shift partial uct bit right rrcf L ; 6bit shift bra UMulNextCycle UmExit: return A7B4SAP Struktura a architektura počítačů - Aritmetické operace 2
Násobení se znaménkem - postup Čísla v doplňkovém kódu (Two s Complement) Př. 4 x 4 8 bitů Desítkově: a 3 b -5, p 3 x (-5) -5 Dvojkově: a b, b b, p? x + + + b partial sum x sign extension (not carry) xxxx xxx xxxx xx xxxx x Last step minus (+ two s complement) b -5 d A7B4SAP Struktura a architektura počítačů - Aritmetické operace 2
Násobení se znaménkem - postup Čísla v doplňkovém kódu (Two s Complement) Př. 4 x 4 8 bitů Desítkově: a 3 b 5, p 3 x 5 5 Dvojkově: a b, b b, p? x + + + b partial sum x sign extension (not carry) xxxx xxx xxxx xx xxxx x Last step minus (+ two s complement) b 5 d A7B4SAP Struktura a architektura počítačů - Aritmetické operace 22
Násobení se znaménkem - postup Čísla v doplňkovém kódu (Two s Complement) Př. 4 x 4 8 bitů Desítkově: a -3 b -5, p (-3) x (-5) 5 Dvojkově: a b, b b, p? x + + + b partial sum x sign extension (not carry) xxxx xxx xxxx xx xxxx x Last step minus (+ two s complement) b 5 d A7B4SAP Struktura a architektura počítačů - Aritmetické operace 23
Násobení se znaménkem - algoritmus uct a x b, (8 x 8 6 bits) SMul SMulInit: add +a sub a b SMulNextCycle: count 7 no? count yes b b yes? LSB no yes? LSB no add + sub + shift bit shift bit count count- uct a x b A7B4SAP Struktura a architektura počítačů - Aritmetické operace 24
Násobení se znaménkem - příklad Př. 4 x 4 8 bitů Desítkově: a 3, b -5, p 3 x (-5) -5 Dvojkově: a b, b b, p? Init: add +a + sub a + + b Pokračování na dalším snímku A7B4SAP Struktura a architektura počítačů - Aritmetické operace 25
Násobení se znaménkem - příklad Step ) add & shift arithm. right add shift arithm. right 2) add & shift arithm. right add shift arithm. right 3) shift arithm. right 4) sub & shift arithm. right sub (i.e. add a) shift arithm. right -5 d A7B4SAP Struktura a architektura počítačů - Aritmetické operace 26
Násobení se znaménkem - realizace ; ****************************************************************** ; Signed multiplication algorithm ; ; 8 x 8 6 bit ; ; a, b E (-28,27) ; ; inputs: addh,addl addh a multiplicand, addl ; subh,subl subh -a multiplicand, subl ; H,L H, L b multiplier ; ; outputs: H,L uct ; ; affects: STATUS, WREG ; ;******************************************************************** #define BIT #define BIT7 7 #define F #define SMul_LOOP_CNT 9 #define SMul_LAST_CYCLE A7B4SAP Struktura a architektura počítačů - Aritmetické operace 27
Násobení se znaménkem - realizace SMul: movlw SMul_LOOP_CNT ; Preset loop counter movwf loopctr SMulNextCycle: dcfsnz loopctr ; Run loop 8 times bra BmExit SmTestLsb: btfss L, BIT ;? multiply by bra SmSar ; yes, shift only movlw SMul_LAST_CYCLE cpfsgt loopctr ;?last cycle bra SmSub ; yes, subtract multiplicand bra SmAdd ; no, add multiplicand SmAdd: movff addl,wreg addwf L, F movff addh, WREG addwfc H, F movff addh, WREG bra SmSar A7B4SAP Struktura a architektura počítačů - Aritmetické operace 28
Násobení se znaménkem - realizace SmSub: movff subl,wreg addwf L, F movff subh, WREG addwfc H, F movff subh, WREG bra SmSar SmSar: ; Extend correct sign bsf STATUS, C ; preset sign btfss WREG, BIT7 ;? number positive bcf STATUS, C ; yes, clear sign rrcf H ; shift arithmetic right bit rrcf L ; 6bit shift bra SMulNextCycle BmExit: return A7B4SAP Struktura a architektura počítačů - Aritmetické operace 29
Násobení 6 x 6 32 násobičkou 8 x 8 6 Použití hardwarové násobičky 8 x 8 6 bitů k násobení čísel 6 x 6 32 bitů (zde příklad násobičky čísel bez znaménka) ( m.2 8 + r).( a.2 8 + b) m. a.2 6 + r. a.2 8 + m. b.2 8 + r. b A7B4SAP Struktura a architektura počítačů - Aritmetické operace 3
Dělení bez znaménka V desítkové soustavě (připomenutí): Dělení beze zbytku 3578 286 657-572 858-858 / 43 246 43 x 2. 2 43 x 4. 43 x 6. 2 zbytek podíl A7B4SAP Struktura a architektura počítačů - Aritmetické operace 3
Dělení bez znaménka V desítkové soustavě (připomenutí): Dělení se zbytkem 78 5 28-25 3 / 5 5 + 3/5 podíl 5 x. 5 x 5. zbytek po dělení A7B4SAP Struktura a architektura počítačů - Aritmetické operace 32
Dělení bez znaménka Ve dvojkové soustavě (stejný princip): Př. 78 / 5 5 + 3/5 - - - - - / + / x.2 4 x.2 3 x.2 2 x.2 x.2 zbytek po dělení podíl A7B4SAP Struktura a architektura počítačů - Aritmetické operace 33
Aritmetické operace - chyby Rozsah zobrazení čísel v počítači je omezený: Velikostí registrů, velikostí paměti, Formát zobrazitelných čísel určuje použitá řádová mřížka (ř.m.) ř.m. definuje nejvyšší (n) a nejnižší (-m) dvojkového čísla. Při aritmetických operacích v dané ř.m. vznikají chyby: Při přeplnění formátu směrem nahoru (přes n) vznikají neodstranitelné (hrubé) chyby. Pro správnou funkci je nutné řádovou mřížku rozšířit (zvětšit n). Při přeplnění formátu směrem dolů (pod m) dochází ke ztrátě přesnosti. Velikost chyby můžeme ovlivnit: Rozšířením ř.m. směrem dolů (zvětšit m) Způsobem zaokrouhlování výsledku. A7B4SAP Struktura a architektura počítačů - Aritmetické operace 34
Aritmetické operace - zaokrouhlování Způsoby zaokrouhlování při přeplnění formátu ř.m. směrem dolů (pod -m) Preference většího čísla,434,43,435,44 Preference sudé číslice,434,43,435,43,436,44 Zaokrouhlení dolů (oříznutí),435,43 Zaokrouhlení nahoru,432 +,,442,44 A7B4SAP Struktura a architektura počítačů - Aritmetické operace 35
Pohyblivá řádová čárka Čísla v pohyblivé řádové čárce (Floating Point) mají tvar: kde: x m z e z. m mantisa (mantissa, significant) e exponent (characteristic, exponent) z základ číselné soustavy m mantisa obsahuje informace o hodnotě čísla. e - exponent obsahuje informace o pozici řádové čárky. K vyjádření m a e používáme kódy pro zobrazení záporných čísel. Čísla v pevné řádové čárce mají značně omezený rozsah hodnot. Pro zvětšení rozsahu hodnot používáme formát pohyblivé řádové čárky. A7B4SAP Struktura a architektura počítačů - Aritmetické operace 36
Pohyblivá řádová čárka V desítkové soustavě čísla v pohyblivé řádové čárce běžně používáme. V desítkové soustavě má pohyblivá řádová čárka formát: ± e x d ± m. Př. +3,582. 2 3,582. 358 +3,582. -3 3,582.,,3582-2,47. -2,47. -24,7-2,47. - -2,47., -,247 Ve dvojkové soustavě používá formát čísel v pohyblivé čárce stejné principy jako v soustavě desítkové. Kódování m (mantisy) a e (exponentu) je ale jiné. V počítačích se používá několik různých formátů čísel v pohyblivé čárce. A7B4SAP Struktura a architektura počítačů - Aritmetické operace 37
Pohyblivá řádová čárka IEEE Std.754 Nejčastěji se používá formát pohyblivé řádové čárky podle normy ANSI/IEEE Standard 754 Formát čísla dle této normy má tvar: s E BIAS s e xd ( ).2. m ( ).2. m mantisa je kódovaná přímým kódem (Sign&Magnitude) s znaménkový bit mantisy m normalizovaný tvar absolutní hodnoty mantisy, m<2 m je normalizovaná na tvar,xxx, jedničku před řádovou čárkou pak není třeba uchovávat v paměti (ušetří se bit pro zvýšení přesnosti). Takové jedničce se říká skrytá. e exponent je kódovaný aditivním kódem (Biased Code) Formát dle IEEE 754 má dvě formy: Single precision celkem 32 bitů Double precision celkem 64 bitů A7B4SAP Struktura a architektura počítačů - Aritmetické operace 38
Pohyblivá řádová čárka IEEE Std.754 Hodnoty čísla x d ve formátu Single Precision (32 bitů): q zlomková část mantisy (ostatní značení viz předchozí snímek) E q s x d Komentář - 254 q / / xd ( ).2.( + x s s E 27 26 d ( ).2. q q) Normalizovaný tvar Denormalizovaný tvar x d x d 255 x d + 255 x d 255 > / x d NaN Not a Number A7B4SAP Struktura a architektura počítačů - Aritmetické operace 39
Pohyblivá řádová čárka IEEE Std.754 Dvě varianty formátu dle IEEE 754: Precision Memory Sign Exponent Bias (K) Mantissa Single 32b b 8b 27 23b (24b) Double 64b b b 23 52b (53b) Formát Single Precision v paměti: Formát Double Precision v paměti: A7B4SAP Struktura a architektura počítačů - Aritmetické operace 4
Pohyblivá řádová čárka IEEE Std.754 Př. Převeďte číslo 62,25 d do formátu Single precision IEEE 754. ) Převod 62 d do dvojkového formátu (postupným dělením 2) 62 d b 2) Převod,25d do dvojkového formátu (postupným násobením 2),25 d, b 3) Formát celého čísla 62,25 d v binárním tvaru 62,25 d, b 4) Normalizace ( m < 2),,.2 7,.2 b tedy: e 7 d b 5) Zápis čísla ve formátu Single Precision dle IEEE 754 BIAS 27, e E BIAS E e + BIAS 7+27 34 b A7B4SAP Struktura a architektura počítačů - Aritmetické operace 4
Pohyblivá řádová čárka aritmetické operace Sčítání / odčítání Srovnat exponenty a sečíst/odečíst mantisy. x y x x + y + x x + y x y : a.2 ± b.2 a.2 ± b.2 ( a. ± b.2 ). 2 x x y x y + y y y + x y x< y : a.2 ± b.2 a.2 ± b.2 ( a.2 ± b.). 2 Násobení Sečíst exponenty, vynásobit mantisy. Dělení Odečíst exponenty, vydělit mantisy. Porovnání Srovnat exponenty, porovnat mantisy. Normalizace Normalizovaný tvar vstupních operandů operace nezaručí normalizovaný tvar výsledku. Normalizaci (úpravu výsledku do normalizovaného tvaru) je nutné provádět po každé operaci. A7B4SAP Struktura a architektura počítačů - Aritmetické operace 42
FPU platformy x86 FPU (Floating Point Unit) některých platforem mají mimo základních operací (+,, *, /) instrukce i pro další matematické operace. Např. FPU platformy x86 (tj. PC) vykonává v pohyblivé řádové čárce tyto operace: Basic operations: + add subtract * multipoly / divide Konst :. log log log log π 2 2 e e 2 2 Functions: x x compare 2 x y.log y.log 2 2 x ( x + ) Functions : sin ( x) cos( x) sin ( x),cos( x) tg ( x) arctq ( x) x Vztahy pro prepocet ( FPU neumi pocitat primo) : x x. log 2() x.log 2( e) x.log 2( y) 2 e x 2 y x 2 A7B4SAP Struktura a architektura počítačů - Aritmetické operace 43
Struktura a architektura počítačů Aritmetické operace Pevná a pohyblivá řádová čárka KONEC České vysoké učení technické Fakulta elektrotechnická A7B4SAP Struktura a architektura počítačů - Aritmetické operace 44