MI-AAK(Aritmetika a kódy) Odčítáníazobrazení zápornýchčísel c doc. Ing. Alois Pluháček, CSc., 2011 Katedra číslicového návrhu Fakulta informačních technologií České vysoké učení technické v Praze Evropský sociální fond Praha& EU: Investujeme do vaší budoucnosti
A2. Odčítání a zobrazení záporných čísel použité konvence odčítání odčítání pomocí sčítačky zobrazení čísel se znaménkem přímýkód doplňkový kód inverzní kód aditivní kód aditivníkódtypu0 aditivníkódtypu1 MI-AAK c A. Pluháček 2011
použité konvence Dále bude označovat z základ číselné soustavy, n nejvyšší pozici, m nejnižší pozici, Z= z n+1 modulřádovémřížky, ε=z m jednotkuřádovémřížky, MSB bit v nejvyšší pozici [most significant bit], LSB bit v nejnižší pozici [least significant bit], a bude se předpokládat, že z=2 a ε=1 m=0. Vpříkladechbude n=3a m=0. 4bitováceláčísla MI-AAK A2 1 c A. Pluháček 2011
úplná odčítačka a b v u r 0 0 0 0 0 0 0 1 1 1 0 1 0 1 1 0 1 1 1 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 1 1 atd.-podobnějakousčítání odčítačka jedna možnost: výpůjčka [borrow] v i zřádu iprořád i 1 u i prořád izřádu i+1 r = a b v= = abv+ abv+ abv+abv u== ab+av+bv druhá možnost(zpravidla lepší a vhodnější): upravit sčítačku na odčítačku MI-AAK A2 2 c A. Pluháček 2011
odčítání pomocí sčítačky A B A+(Z B) (mod Z) MI-AAK A2 3 c A. Pluháček 2011
Jaknajíthodnotu Z B? odčítání pomocí sčítačky ii Všimněme si: z Z Z 1 10 1 00...00 0 99...99 2 1 00...00 0 11...11 Z B=(Z 1) B+1 } z=2 B 0 (Z 1) B= B Z B= B+1 příklad: Z 10000 Z 1 1111 B 1011 (Z 1) B 0100 = B Z B 0101 B=0 Z B= Z 0 (mod Z) B+1= 11...11 +1=1 00...00 MI-AAK A2 4 c A. Pluháček 2011
odčítání pomocí sčítačky iii A a 3 a 2 a 1 a 0 B b 3 b 2 b 1 b 0 R r 3 r 2 r 1 r 0 R=A+(Z B) q n Z= A B +(1 q n ) Z R=A B + q n Z 0 R < Z q n =1 R=A B 0 q n =0 R=A B + Z < Z A B <0 q n =1 A B R=A B q n =0 A < B R=Z (B A) MI-AAK A2 5 c A. Pluháček 2011
odčítání pomocí sčítačky iv doplňkový pseudokód q n =0 q n =1 Je-li q n =0, tzn. B > A, pak R=Z (B A) B A=Z R B A=R+1 MI-AAK A2 6 c A. Pluháček 2011
zobrazení čísel se znaménkem Patero způsobů, jak rozumně zobrazit izápornáčísla X: 1. přímýkód... P(X) [signandmagnitude] 2. doplňkový kód... D(X) [radix complement] pro z = 2 dvojkový doplněk [2 s complement] pro z = 10 desítkový doplněk [10 s complement] 3. inverzní kód... I(X) [diminished radix complement] pro z = 2 jedničkový doplněk [1 s complement] pro z = 10 devítkový doplněk [9 s complement] 4. aditivníkód... A(X) [biased] (též kód s posunutou nulou) a. typ0... A 0 (X) b. typ1... A 1 (X) MI-AAK A2 7 c A. Pluháček 2011
přímý kód znaménko& absolutní hodnota: znaménkový bit = { 0 pro X 0 1 pro X 0 P(X)= { X pro X 0 2 n + X pro X 0 1 2 Z < X < 1 2 Z symetrickýrozsah nula má dva obrazy: { tzv. kladnánula 00...0 tzv. zápornánula 10...0 MI-AAK A2 8 c A. Pluháček 2011
přímý kód ii X P(X) 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111-0 1000-1 1001-2 1010-3 1011-4 1100-5 1101-6 1110-7 1111 MI-AAK A2 9 c A. Pluháček 2011
přímý kód iii sčítání: (za, aa)+(zb, ab) (zc, ac), kde za, zba zcjsouznaménkovébitya aa, aba acjsouabsolutníhodnoty if(za=zb) {aa+ab ac; za zc; else if(q=1)přeplnění; } {aa+ab+1 ac; za zc; if(q=0) {ac+1 ac; zc zc; } } qjepřenosznejvyššíhořádu MI-AAK A2 10 c A. Pluháček 2011
přímý kód iv změna znaménka: P( X) P(X) MSB MSB odečítání: A B= A+( B) uvažovat zb místo zb jinak jako sčítání absolutní hodnota: P(X) P( X ) 0 MSB MI-AAK A2 11 c A. Pluháček 2011
doplňkový kód D(X)= { X pro X 0 Z+ X= Z X pro X <0 1 2 Z X < 1 2 Z nesymetrickýrozsah MSB=0 X 0 MSB=1 X <0 D(X) X(mod Z) MI-AAK A2 12 c A. Pluháček 2011
doplňkový kód ii X D(X) 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111-8 1000-7 1001-6 1010-5 1011-4 1100-3 1101-2 1110-1 1111 MI-AAK A2 13 c A. Pluháček 2011
doplňkový kód iii sčítání: D(A+B) D(A)+D(B) (mod Z) 1 2 MI-AAK A2 14 c A. Pluháček 2011
změna znaménka: doplňkový kód iv D( X) D(X)+1(mod Z) odečítání: A B= A+( B) MI-AAK A2 15 c A. Pluháček 2011
inverzní kód { X pro X 0 I(X)= X pro X 0 1 2 Z < X < 1 2 Z symetrickýrozsah nula má dva obrazy: { tzv. kladnánula 00...0 tzv. zápornánula 11...1 MSB=0 = X 0 MSB=1 = X 0 T + T =11...11=Z 1 I(X) X (mod Z 1) MI-AAK A2 16 c A. Pluháček 2011
inverzní kód ii X I(X) 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111-7 1000-6 1001-5 1010-4 1011-3 1100-2 1101-1 1110-0 1111 MI-AAK A2 17 c A. Pluháček 2011
inverzní kód iii sčítání: I(A+B) I(A)+I(B) (mod Z 1) I(A)+I(B) Z q=1 nutno odečíst Z a přičíst 1 = kruhový přenos zpětná vazba sekvenční obvod ošetření: korekce K na vstupu přenosu do nejnižšího řádu K = 1, prochází-li přenos přes všechny řády MI-AAK A2 18 c A. Pluháček 2011
změna znaménka: inverzní kód iv I( X) I(X) odečítání: A B= A+( B) MI-AAK A2 19 c A. Pluháček 2011
inverzní kód v číslabezznaménka+sčítačkavinverznímkódu inverzní pseudokód(srov. doplňkový pseudokód) MI-AAK A2 20 c A. Pluháček 2011
aditivní kód A(X)=X+ K, kde Kje vhodná konstanta vhodné konstanty: 1 2 Z A 0 (X)... aditivníkódtypu0 1 2 Z 1 A 1 (X)... aditivníkódtypu1 Kód je monotónní rostoucí. sčítání: A(A+B)=A(A)+A(B) K odčítání: A(A B)=A(A) A(B)+K Platíovšemjenvpřípadě,ženedojdekpřeplnění! MI-AAK A2 21 c A. Pluháček 2011
aditivní kód typu 0 A 0 (X)=X+ 1 2 Z 1 2 Z X < 1 2 Z nesymetrickýrozsah MSB=1 X 0 MSB=0 X <0 A 0 (X) D(X)(mod 1 2 Z)! A 0 (X)aD(X)majístejnébitykroměMSB! MSB(A 0 (X))=MSB(D(X)) = operace(sčítání, odčítání, změna znaménka apod.): A 0 (operandy) D(operandy) D(výsledek) A 0 (výsledek) MI-AAK A2 22 c A. Pluháček 2011
aditivní kód typu 0 ii X A 0 (X) -8 0000-7 0001-6 0010-5 0011-4 0100-3 0101-2 0110-1 0111 0 1000 1 1001 2 1010 3 1011 4 1100 5 1101 6 1110 7 1111 MI-AAK A2 23 c A. Pluháček 2011
aditivní kód typu 1 A 1 (X)=X+ 1 2 Z 1 1 2 Z < X 1 2 Z nesymetrickýrozsah MSB=1 X >0 MSB=0 X 0 MI-AAK A2 24 c A. Pluháček 2011
aditivní kód typu 1 ii X A(1)X -7 0000-6 0001-5 0010-4 0011-3 0100-2 0101-1 0110 0 0111 1 1000 2 1001 3 1010 4 1011 5 1100 6 1101 7 1110 8 1111 MI-AAK A2 25 c A. Pluháček 2011
sčítání a odčítání: aditivní kód typu 1 iii A(A+B)=A(A)+A(B) K A(A B)=A(A) A(B)+ K A(A+B)=A(A)+A(B) 1 2 Z+1 A(A B)=A(A) A(B)+ 1 2 Z 1 1 2 Z +1 2 Z (mod Z) 1 2 Z 100...00 1 2 Z +1 2 Z přeplnění: (mod Z) negacebituvnejvyššímřádu sčítání: stejná znaménka sčítanců a jiné znaménko výsledku odčítání: znaménka menšence a menšitele se liší a liší se znaménka menšence a výsledku (odvození analogické jako u doplňkového kódu) MI-AAK A2 26 c A. Pluháček 2011
aditivní kód typu 1 iv detekce přeplnění a n b n p n q n s n 0 0 0 0 0 q n = s n 0 0 1 0 1 q n s n 0 1 0 0 1 q n s n 0 1 1 1 0 q n s n 1 0 0 0 1 q n s n 1 0 1 1 0 q n s n 1 1 0 1 0 q n s n 1 1 1 1 1 q n = s n over=q n s n MI-AAK A2 27 c A. Pluháček 2011
aditivní kód typu 1 v sčítačka/ odčítačka změnaznaménka: X = 0 X MI-AAK A2 28 c A. Pluháček 2011