24/09/2013 Talrepresentationer" Digital Aritmetik Unsigned Integers Signed Integers" • Ett tal kan representeras binärt på många sätt. ! • De vanligaste taltyperna som skall representeras är:! – Heltal, positiva heltal (eng. integers)! • ett-komplementet, två-komplementet, sign-magnitude! Original Slides! Ingo Sander! KTH/ICT/ES! [email protected]! Slides! Per Lindgren! EISLAB! [email protected]! – Decimala tal med fix tal-område! • Fix-tal (eng. fixed-point)! – Decimala tal i olika talområden! • Flyt-tal (eng. floating-point)! 2! Positiva Heltal" Addition" Carry-out = 0 resultatet OK Positiva Heltal: 26 25 24 23 22 21 20 1 1 0 1 1 0 1 = 1*26 + 1*25 + 1*23 + 1*22 + 1*20 = 109 5 + 2 + 7 C4=0 0101 0010 0111 3! 4! Addition" Heltal" Carry-out = 1 resultatet fel Positiva Heltal: 26 25 24 23 22 21 20 7 +14 21 c4=1 1 0111 + 1110 111 1 0 1 1 0 1 = 1*26 + 1*25 + 1*23 + 1*22 + 1*20 = 109 Men hur representerar vi negativa tal??? 10101 c3=1 5! 6! 1 24/09/2013 Talkonvertering – Positiva till Negativa tal" Två-komplementet" X 0 1 … 2n-11 -2n-1 … -2 -1 x 00…000 00…001 … 01…111 10…000 … 11…110 11…111 Talområde: -(2n-1)..+(2n-1-1) XR 0 1 Decimal komplementering (2 siffror): - 49 → 102-49=51 Binär komplementering (5 siffor): -15 → 25-15=17 n-1 2 -1 Vid två-komplementering inverteras ingående digits, och talet 1 läggs till, dvs –(d1d0) i basen b representeras som (b-1-d1)(b-1-d0)+1. Två-komplementet har den egenskapen att addition och subtraktion enkelt kan utföras. n-1 2 … 2n-2 2n-1 Tecken-bit 01111 +15 10000 invertera 10001 Lägg till ett 10001 -15 Fördel: En nolla. Nackdel: Risk för overflow 7! Talkonvertering – Negativa till Positiva tal" 10001 -15 01110 Invertera 01111 Lägg till ett 01111 +15 8! Talkonvertering – Positiva till Negativa tal" 01001 +9 10! Talkonvertering – Negativa till Positiva tal" Heltal (2-komplement)" Representation med 2-komplement! 10111 -9 B=bN-1 bN-2 ...b1 b0 bN-1 bN-2 ... där bi∈{0,1} b1 b0 Tecken-Bit (Sign Bit) Decimalvärde D(B)=-bN-1 2N-1 +bN-2 2N-2 + ...+b1 21+b0 20 12! 2 24/09/2013 Heltal: (2-komplement)" Sign-extension" 000 111 0 001 -2 110 Heltal: -26 25 24 23 22 21 20 1 -1 1 2 1 0 1 1 0 = -1*26 + 1*25+1*23 + 1*22 + 1*20 = - 45 1 010 -2n-1 2n-2 1 1 27 26 25 24 23 22 21 20 1 1 1 0 1 1 0 1 Teckenbiten har negativ vikt -3 101 3 011 -4 Kopiera teckenbiten för att utvidga talområdet genom att använda flera bitar! 100 13! Addition av två heltal" X 0 1 … 2n-11 -2n-1 … -2 -1 x 00…000 00…001 … 01…111 XR 0 1 10…000 … 11…110 11…111 2n-1 … 2n-2 2n-1 14! Addition" XR=x mod 2n YR=y mod 2n 2n-1-1 ADD(x,y)= x+y mod 2n = XR+YR mod 2n + (+5) + (+2) 1111111 01111111 01111111 11111110 + (+7) 0101 0010 0111 Overflow uppkommer om additionen hamnar utanför talområdet 15! Addition" (-5) + (+2) (-3) + 16! Addition" 1011 0010 (+5) + (-2) 1101 (+3) + 0101 1110 1 0011 Carry-biten kan ignoreras! 17! 18! 3 24/09/2013 Addition" (-5) + (-2) Overflow" 1011 1110 (+5) + (+5) 1 1001 (-6) + (-7) + 0101 0101 1 1 1010 Overflow – teckenbiten stämmer inte överens med ingående tal... Extra carry-biten kan ignoreras! 19! 20! Logik för att detektera overflow" Overflow (2)" • För 4-bit-tal! (-5) + (-5) – Overflow om a3 = b3 och b3 ≠ r3! 1011 1011 0 11 + (+6) ! 1 0110 Overflow = a 3b3 r3 + a 3 b3r3 Overflow = a n−1bn−1 rn−1 + a n−1 bn−1rn−1 Overflow – teckenbiten stämmer inte överens med ingående tal... 21! 22! Subtraktion" Subtraktion" Hur gör man subtraktionen på ett enkelt sätt? A A A A - B = +(-B)= +(2’s complement B) = +(NOT B) + 1 (+5) - (+2) (+3) - 0101 0010 ???? + 0101 1101 1 0011 I stället för subtraktion, gör en addition med 2-komplementet! 23! 24! 4 24/09/2013 Subtraktion" (-5) - (+2) - (-7) Subtraktion" 1011 0010 + ???? 1011 1110 (+5) - (-2) 1001 (+7) - 0101 1110 + ???? 0101 0010 0111 25! Tvåkomplementsrepresentation, en sammanfattning" Subtraktion" (-5) - (-2) - (-3) 26! 1011 1110 + ???? 1011 0010 1101 • Område: -2N-1 upp till 2N-1 – 1! • Negation: Invertera varje bit (det boolska komplementet), addera sedan 1.! • Expansion av bitlängd: Lägg till ytterligare bit positioner till vänster om teckenbiten, med samma värde som teckenbiten.! • Overflow-regeln: Om två nummer med samma tecken adderas, så har det blivit overflow om resultatet har ett motsatt tecken.! • Subtraktionsregeln: För att subtrahera B från A, ta två-komplementet av B och addera till A." 27! (Alternativt sätt att detektera overflow)" (+7) + (+2) (+9) + 28! (Alternativt sätt att detektera overflow)" 0111 0010 011 (-7) + (+2) (-5) + 1001 0010 000 1001 c4=0 1011 c3=1 c4=0 Overflow eftersom c4 och c3 är olika! c3=0 Inte overflow eftersom c4 och c3 är lika! 29! 30! 5 24/09/2013 (Alternativt sätt att detektera overflow)" (+7) + (-2) + (+5) c4=1 (Alternativt sätt att detektera overflow)" 0111 1110 111 (-7) + (-2) + (-9) 10101 c3=1 c4=1 Inte overflow eftersom c4 och c3 är lika! 1001 1110 100 10011 c3=0 Overflow eftersom c4 och c3 är olika! 31! 32! (Logik för att detektera overflow)" • För 4-bit-tal! – Overflow om c3 och c4 är olika! – Annars är det inte overflow! Aritmetisk Hårdvara" Overflow = c 3c 4 + c 3c 4 = c 3 ⊕ c 4 ! • För n-bit-tal! Overflow = c n −1 ⊕ c n € 33! 34! € Halv-adderaren (eng. Half adder)" a 0 0 1 1 c 0a 0b cs + b 0 1 0 1 c 0 0 0 1 s 0 1 1 0 a Hel-adderaren (eng. Full adder)" a b 0 1 0 1 0 0 0 1 c=ab b 0 1 0 1 0 1 1 0 + cutcin 0 a 0 b cuts s =a ⊕ b a 0 0 0 0 1 1 1 1 b 0 0 1 1 0 0 1 1 cin 0 1 0 1 0 1 0 1 cut 0 0 0 1 0 1 1 1 s 0 1 1 0 1 0 0 1 ab cin 00 0 1 HA s c a b s c a b cin 35! FA s cut 11 10 0 1 0 0 1 1 1 cut = a b + cina + cinb ab cin 00 0 a b 01 0 1 01 11 10 0 1 0 1 1 0 1 0 s = a ⊕ b ⊕ cin 36! 6 24/09/2013 Hel-adderare Komposition med halv-adderare" Hel-adderaren (eng. Full adder)" • Vi kan även konstruera en hel-adderare mha två halv-adderare och en ELLERgrind ! a b cin FA s cut a b cin HA HA + s cut • Komposition tillåter att konstruera nya system med hjälp av kända byggblock! a 0 0 0 0 1 1 1 1 cutcin 0 a 0 b cuts b 0 0 1 1 0 0 1 1 cin 0 1 0 1 0 1 0 1 cut 0 0 0 1 0 1 1 1 ab cin 00 s 0 1 1 0 1 0 0 1 0 1 01 11 10 0 0 1 0 0 1 1 1 cut = a b + cina + cinb ab cin 00 0 a b cin a b cin s cut FA HA (s) (cut) s cut HA 1 01 11 10 0 1 0 1 1 0 1 0 s = a ⊕ b ⊕ cin 37! 38! Mer komposition" Ripple-Carry Adderaren (RCA)" • Komposition kan även användas för att konstruera n-bit-adderare ! • Man behöver n hel-adderare för att konstruera en n-bit-adderare ! an-1 bn-1 cutn-1 FA a1 b 1 cinn-1 FA sn-1 an-1bn-1 cutn-1 FA s1 ... cin0 s0 a 0 b0 TD=n*TFA (cin -> cout) A=n*AFA cin0 n-bit ADD sn-1 a0 b 0 cin1 cut0 ... s0 39! 40! Subtraktion" Add/sub-enheten" yn – 1 • Subtraktion kan göras genom addition med två komplementet! y1 y0 Add ⁄ Sub control Add/Sub = 0: Addition Add/Sub = 1: Subtraktion – Invertera alla bitar av den andra operanden! – Addera 1! xn – 1 x1 cn c0 n-bit adder sn – 1 41! x0 s1 s0 42! 7 24/09/2013 EXEMPEL" yn – 1 EXEMPEL" y1 y0 yn – 1 Add ⁄ Sub control Add/Sub = 0: Addition Add/Sub = 1: Subtraktion xn – 1 x1 xn – 1 c0 n-bit adder sn – 1 s1 x1 cn Add ⁄ Sub control x0 c0 n-bit adder x = 1010 y = 0110 Add = 0 (addition) s0 y0 Add/Sub = 0: Addition Add/Sub = 1: Subtraktion x0 cn y1 sn – 1 s1 x = 1010 y = 0110 Add = 1 (subraktion) s0 43! 44! Arithmetic Logic Unit (ALU)" Funktionsväljare f0 f1 AU LU Funktionsväljare MUX A/L x f0 f1 A/L EXEMPEL" y ALU cin f0 f1 AU LU MUX A/L A/L 0 0 1 1 1 1 f1 0 0 0 0 1 1 f0 Funktion 0 x+y 1 x-y 0 x and y 1 x or y 0 x xor y 1 x nor y x f0 f1 A/L y ALU cin x = 1001 y = 0110 A/L 0 0 1 1 1 1 f1 0 0 0 0 1 1 45! (Komparator)" f0 Funktion 0 x+y 1 x-y 0 x and y 1 x or y 0 x xor y 1 x nor y 46! A<B (unsigned)" • Komparatorn implementeras som subtraktionskrets! • A < B -> A – B < 0 R = A – B -> A + (-B)! • Inspektera Carry-out, 1 -> A<B false e.g 7<2! (+7) 0111 + (-2) + 1110 111 (+5) 10101 c4=1 47! 48! 8 24/09/2013 A<B (unsigned)" A<B (signed)" • A < B -> A – B < 0 R = A + (-B)! • Inspektera Carry-out, 0 -> A<B true e.g 2<7! (+2) 0010 + (-7) + 1001 0 (+5) 01011 C4=0 • A < B -> A – B < 0 R = A + (-B)! • Inspektera N, 1 -> A<B true e.g 2<7! (+2) + (-7) + (+5) 0010 1001 0 01011 N=1 49! 50! A<B (signed)" A<B (signed)" • A < B -> A – B < 0 R = A + (-B)! • Inspektera N, 1 -> A<B true, men det stämmer inte (+7) 0111 e.g 7< -5! + (-(-5)) + 0101 0 (+5) 01100 • Vi måste även ta hänsyn till overflow! • Dvs, A<B -> A-B<0, N xor V = 1! (+7) + (-(-5)) + 0111 0101 0 (+5) V=1 01100 (A,B samma tecken R motsatt tecken) N=1 N=1 51! 52! A<B" Sammanfattning" • Olika beteende om vi betraktar talen som signed eller unsigned! • Unsigned, kolla carry-out! • Signed, kolla V xor N! • Därför två olika instruktioner i MIPS! • Addition och subtraktion av heltal! – Två-komplementet! – Subtraktion av ett tal implementeras som addition med dess två-komplement! • ALU utför både ! – SLTU (unsigned)! – SLT (signed)! – (se MIPS instruktionsuppsättning för fler varianter)! 53! – aritmetiska (ADD,SUB, SLT/SLTU etc.) och! – logiska operationer (AND, OR, etc.)! ! D0011E, Digitalteknik! 9