Digital Aritmetik Unsigned Integers Signed Integers" Slides! Per Lindgren! EISLAB! [email protected]! Original Slides! Ingo Sander! KTH/ICT/ES! [email protected]! Talrepresentationer" • 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! – 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" 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 3! Addition" Carry-out = 0 resultatet OK 5 + 2 7 C4=0 + 0101 0010 0111 4! Addition" Carry-out = 1 resultatet fel 7 +14 21 c4=1 0111 + 1110 111 10101 c3=1 5! Heltal" 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 Men hur representerar vi negativa tal??? 6! Två-komplementet" 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 2n-1-1 Talområde: -(2n-1)..+(2n-1-1) Decimal komplementering (2 siffror): - 49 → 102-49=51 Binär komplementering (5 siffor): -15 → 25-15=17 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. Tecken-bit Fördel: En nolla. Nackdel: Risk för overflow 7! Talkonvertering – Positiva till Negativa tal" 01111 +15 10000 invertera 10001 Lägg till ett 10001 -15 8! Talkonvertering – Negativa till Positiva tal" 10001 -15 01110 Invertera 01111 Lägg till ett 01111 +15 Talkonvertering – Positiva till Negativa tal" 01001 +9 10! Talkonvertering – Negativa till Positiva tal" 10111 -9 Heltal (2-komplement)" Representation med 2-komplement! 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! Heltal: (2-komplement)" 000 111 1 -1 110 001 0 -2 2 -3 101 -4 010 3 011 100 13! Sign-extension" Heltal: -26 25 24 23 22 21 20 1 1 0 1 1 0 1 -2n-1 2n-2 1 1 = -1*26 + 1*25+1*23 + 1*22 + 1*20 = - 45 27 26 25 24 23 22 21 20 1 1 1 0 1 1 0 1 Teckenbiten har negativ vikt Kopiera teckenbiten för att utvidga talområdet genom att använda flera bitar! 14! 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 XR=x mod 2n YR=y mod 2n 2n-1-1 ADD(x,y)= x+y mod 2n = XR+YR mod 2n + 1111111 01111111 01111111 11111110 Overflow uppkommer om additionen hamnar utanför talområdet 15! Addition" (+5) + (+2) (+7) + 0101 0010 0111 16! Addition" (-5) + (+2) (-3) + 1011 0010 1101 17! Addition" (+5) + (-2) (+3) + 0101 1110 1 0011 Carry-biten kan ignoreras! 18! Addition" (-5) + (-2) (-7) + 1011 1110 1 1001 Extra carry-biten kan ignoreras! 19! Overflow" (+5) + (+5) (-6) + 0101 0101 1 1 1010 Overflow – teckenbiten stämmer inte överens med ingående tal... 20! Overflow (2)" (-5) + (-5) (+6) + 1011 1011 0 11 1 0110 Overflow – teckenbiten stämmer inte överens med ingående tal... 21! Logik för att detektera overflow" • För 4-bit-tal! – Overflow om a3 = b3 och b3 ≠ r3! ! Overflow = a 3b3 r3 + a 3 b3r3 Overflow = a n−1bn−1 rn−1 + a n−1 bn−1rn−1 22! Subtraktion" Hur gör man subtraktionen på ett enkelt sätt? A A A A - B = +(-B)= +(2’s complement B) = +(NOT B) + 1 23! Subtraktion" (+5) - (+2) (+3) - 0101 0010 ???? + 0101 1101 1 0011 I stället för subtraktion, gör en addition med 2-komplementet! 24! Subtraktion" (-5) - (+2) (-7) - 1011 0010 ???? + 1011 1110 1001 25! Subtraktion" (+5) - (-2) (+7) - 0101 1110 ???? + 0101 0010 0111 26! Subtraktion" (-5) - (-2) (-3) - 1011 1110 ???? + 1011 0010 1101 27! Tvåkomplementsrepresentation, en sammanfattning" • 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." 28! (Alternativt sätt att detektera overflow)" (+7) + (+2) (+9) 0111 + 0010 011 1001 c4=0 c3=1 Overflow eftersom c4 och c3 är olika! 29! (Alternativt sätt att detektera overflow)" (-7) + (+2) (-5) 1001 + 0010 000 1011 c4=0 c3=0 Inte overflow eftersom c4 och c3 är lika! 30! (Alternativt sätt att detektera overflow)" (+7) + (-2) (+5) c4=1 0111 + 1110 111 10101 c3=1 Inte overflow eftersom c4 och c3 är lika! 31! (Alternativt sätt att detektera overflow)" (-7) + (-2) (-9) c4=1 1001 + 1110 100 10011 c3=0 Overflow eftersom c4 och c3 är olika! 32! (Logik för att detektera overflow)" • För 4-bit-tal! – Overflow om c3 och c4 är olika! – Annars är det inte overflow! ! Overflow = c 3c 4 + c 3c 4 = c 3 ⊕ c 4 • För n-bit-tal! Overflow = c n −1 ⊕ c n € 33! Aritmetisk Hårdvara" 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 a b 0 1 0 1 0 0 0 1 c=ab a b HA s c a b b 0 1 0 1 0 1 1 0 s =a ⊕ b s c 35! Hel-adderaren (eng. Full adder)" ab + cutcin 0 a 0 b cuts 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 cin 0 1 FA s cut 01 11 10 0 0 1 0 0 1 1 1 cut = a b + cina + cinb ab cin 0 a b cin 00 1 00 01 11 10 0 1 0 1 1 0 1 0 s = a ⊕ b ⊕ cin 36! Hel-adderare Komposition med halv-adderare" • 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! 37! Hel-adderaren (eng. Full adder)" ab + 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 s 0 1 1 0 1 0 0 1 cin 0 1 FA s cut a b cin HA (s) (cut) HA 01 11 10 0 0 1 0 0 1 1 1 cut = a b + cina + cinb ab cin 0 a b cin 00 s cut 1 00 01 11 10 0 1 0 1 1 0 1 0 s = a ⊕ b ⊕ cin 38! Mer komposition" • 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 ! 39! Ripple-Carry Adderaren (RCA)" an-1 bn-1 cutn-1 FA a1 b 1 cinn-1 FA sn-1 an-1bn-1 cutn-1 s1 ... ... cin1 cut0 FA cin0 s0 a 0 b0 cin0 n-bit ADD sn-1 a0 b 0 TD=n*TFA (cin -> cout) A=n*AFA s0 40! Subtraktion" • Subtraktion kan göras genom addition med två komplementet! – Invertera alla bitar av den andra operanden! – Addera 1! 41! Add/sub-enheten" yn – 1 y1 y0 Add ⁄ Sub control Add/Sub = 0: Addition Add/Sub = 1: Subtraktion xn – 1 x1 cn x0 c0 n-bit adder sn – 1 s1 s0 42! EXEMPEL" yn – 1 y1 y0 Add ⁄ Sub control Add/Sub = 0: Addition Add/Sub = 1: Subtraktion xn – 1 x1 cn x0 c0 n-bit adder sn – 1 s1 s0 x = 1010 y = 0110 Add = 0 (addition) 43! EXEMPEL" yn – 1 y1 y0 Add ⁄ Sub control Add/Sub = 0: Addition Add/Sub = 1: Subtraktion xn – 1 x1 cn x0 c0 n-bit adder sn – 1 s1 s0 x = 1010 y = 0110 Add = 1 (subraktion) 44! Arithmetic Logic Unit (ALU)" Funktionsväljare f0 f1 AU LU MUX A/L x f0 f1 A/L y ALU cin 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 45! EXEMPEL" Funktionsväljare f0 f1 AU LU MUX A/L 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 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! (Komparator)" • Komparatorn implementeras som subtraktionskrets! 47! A<B (unsigned)" • 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 48! A<B (unsigned)" • 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 49! A<B (signed)" • 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 50! 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 N=1 51! A<B (signed)" • 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 52! A<B" • 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! – SLTU (unsigned)! – SLT (signed)! – (se MIPS instruktionsuppsättning för fler varianter)! 53! Sammanfattning" • Addition och subtraktion av heltal! – Två-komplementet! – Subtraktion av ett tal implementeras som addition med dess två-komplement! • ALU utför både ! – aritmetiska (ADD,SUB, SLT/SLTU etc.) och! – logiska operationer (AND, OR, etc.)! ! D0011E, Digitalteknik!