digital aritmetik unsigned integers signed integers...digital aritmetik unsigned integers signed...
TRANSCRIPT
Digital Aritmetik Unsigned Integers
Signed Integers"
Original Slides!Ingo Sander!KTH/ICT/[email protected]!
Slides!Per Lindgren!
• 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)!
Talrepresentationer"
2!
Positiva Heltal"
1 1 0 1 1 0 1
Positiva Heltal:
= 1*26 + 1*25 + 1*23 + 1*22 + 1*20 = 109 26 25 24 23 22 21 20
3!
Addition"
4!
5 + 2
7
0101 + 0010
0111
C4=0
Carry-out = 0 resultatet OK
Addition"
5!
Carry-out = 1 resultatet fel
7 +14
21
0111 + 1110
10101
1 1 1
c4=1 c3=1
Heltal"
1 1 0 1 1 0 1
Positiva Heltal:
= 1*26 + 1*25 + 1*23 + 1*22 + 1*20 = 109 26 25 24 23 22 21 20
Men hur representerar vi negativa tal???
6!
Två-komplementet"
7!
Fördel: En nolla. Nackdel: Risk för overflow
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.
X x XR0 00…000 01 00…001 1… …2nn--11-1
01…111 2nn--11-1
-2nn--11 10…000 2nn--11
… … …-2 11…110 2nn--22-1 11…111 2nn--11
Tecken-bit
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
Representation med 2-komplement!
Heltal(2-komplement)"
B=bN-1 bN-2 ...b1 b0 där bi∈{0,1}
bN-1 bN-2 ... 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
001
010
011
100
101
110
111
-1
-2
-4
-3 3
2
0
1
13!
Sign-extension"
1 1 0 1 1 0 1
Heltal:
= -1*26 + 1*25+1*23 + 1*22 + 1*20 = - 45 -26 25 24 23 22 21 20
Teckenbiten har negativ vikt 1 1 0 1 1 0 1 26 25 24 23 22 21 20
1 -2n-1
1 2n-2
Kopiera teckenbiten för att utvidga talområdet genom att använda flera bitar!
1 27
14!
Addition av två heltal"X x XR0 00…000 01 00…001 1… …2nn--11-1
01…111 2nn--11-1
-2nn--11 10…000 2nn--11
… … …-2 11…110 2nn--22-1 11…111 2nn--11
XR=x mod 2n YR=y mod 2n ADD(x,y)= x+y mod 2n = XR+YR mod 2n
111111101111111
+ 0111111111111110
Overflow uppkommer om additionen hamnar utanför talområdet
15!
Addition"
16!
(+5) + (+2)
(+7)
0101 + 0010
0111
Addition"
17!
(-5) + (+2)
(-3)
1011 + 0010
1101
Addition"
18!
(+5) + (-2)
(+3)
0101 + 1110
1 0011
Carry-biten kan ignoreras!
Addition"
19!
(-5) + (-2)
(-7)
1011 + 1110
1 1001
Extra carry-biten kan ignoreras!
Overflow"
20!
(+5) + (+5)
(-6)
0101 + 0101
1010
1 1
Overflow – teckenbiten stämmer inte överens med ingående tal...
Overflow (2)"
21!
(-5) + (-5)
(+6)
1011 + 1011
1 0110
1 1
Overflow – teckenbiten stämmer inte överens med ingående tal...
0
• För 4-bit-tal!– Overflow om a3 = b3 och b3 ≠ r3!
!
Logik för att detektera overflow"
22!
Overflow = a3b3r3 + a3b3r3
Overflow = an−1bn−1rn−1 + an−1bn−1rn−1
Subtraktion"
23!
A - B = A +(-B)= A +(2’s complement B) = A +(NOT B) + 1
Hur gör man subtraktionen på ett enkelt sätt?
Subtraktion"
24!
(+5) - (+2)
(+3)
0101 - 0010
????
I stället för subtraktion, gör en addition med 2-komplementet!
0101 + 1101
1 0011
Subtraktion"
25!
(-5) - (+2)
(-7)
1011 - 0010
????
1011 + 1110
1001
Subtraktion"
26!
(+5) - (-2)
(+7)
0101 - 1110
????
0101 + 0010
0111
Subtraktion"
27!
(-5) - (-2)
(-3)
1011 - 1110
????
1011 + 0010
1101
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)"
29!
(+7) + (+2)
(+9)
0111 + 0010
1001
1 1 0
c4=0 c3=1
Overflow eftersom c4 och c3 är olika!
(Alternativt sätt att detektera overflow)"
30!
(-7) + (+2)
(-5)
1001 + 0010
1011
0 0 0
c4=0 c3=0
Inte overflow eftersom c4 och c3 är lika!
(Alternativt sätt att detektera overflow)"
31!
(+7) + (-2)
(+5)
0111 + 1110
10101
1 1 1
c4=1 c3=1
Inte overflow eftersom c4 och c3 är lika!
(Alternativt sätt att detektera overflow)"
32!
(-7) + (-2)
(-9)
1001 + 1110
10011
0 0 1
c4=1 c3=0
Overflow eftersom c4 och c3 är olika!
• För 4-bit-tal!– Overflow om c3 och c4 är olika!– Annars är det inte overflow!
!• För n-bit-tal!
(Logik för att detektera overflow)"
33!
€
Overflow = c3c 4 + c 3c4 = c3 ⊕ c4
€
Overflow = cn−1 ⊕ cn
Aritmetisk Hårdvara"
34!
Halv-adderaren (eng. Half adder)"
c0a
+ 0bcs
0 0
0 1
0 1
0
1
a b
a b c s0 0 0 00 1 0 11 0 0 11 1 1 0
0 1
1 0
0 1
0
1
a b
c = a b s =a ⊕ b
HA a b
s c
a b
s c
35!
Hel-adderaren (eng. Full adder)"
cutcin
0 a+ 0 b
cuts
0 0
0 1
00 01 11 10
0
1
ab cin a b cin cut s
0 0 0 0 00 0 1 0 10 1 0 0 10 1 1 1 01 0 0 0 11 0 1 1 01 1 0 1 01 1 1 1 1
cut = a b + cina + cinb
1 0
1 1
0 1
1 0
00 01 11 10
0
1
ab cin
s = a ⊕ b ⊕ cin
0 1
1 0 FA
a b cin
s cut
36!
• Vi kan även konstruera en hel-adderare mha två halv-adderare och en ELLER-grind !
• Komposition tillåter att konstruera nya system med hjälp av kända byggblock!
Hel-adderare Komposition med halv-adderare"
37!
HA HA
a b cin
s cut FA
a b cin
s cut
Hel-adderaren (eng. Full adder)"
0 0
0 1
00 01 11 10
0
1
ab cin a b cin cut s
0 0 0 0 00 0 1 0 10 1 0 0 10 1 1 1 01 0 0 0 11 0 1 1 01 1 0 1 01 1 1 1 1
cut = a b + cina + cinb
1 0
1 1
0 1
1 0
00 01 11 10
0
1
ab cin
s = a ⊕ b ⊕ cin
0 1
1 0 HA
HA a b cin
s cut FA
a b cin
s cut
38!
(cut) (s)
cutcin
0 a+ 0 b
cuts
• 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 !
Mer komposition"
39!
Ripple-Carry Adderaren (RCA) "
FA
a1 b1
cin1
FA
a0 b0
cin0
s0 s1
FA
an-1 bn-1
cinn-1
sn-1
cut0 cutn-1
an-1bn-1 ... a0 b0
sn-1 ... s0
cin0 cutn-1 n-bit ADD
TD=n*TFA (cin -> cout) A=n*AFA
40!
• Subtraktion kan göras genom addition med två komplementet!– Invertera alla bitar av den andra operanden!– Addera 1!
Subtraktion"
41!
Add/sub-enheten"
42!
s 0 s 1 s n 1 –
x 0 x 1 x n 1 –
c n n -bit adder
y 0 y 1 y n 1 –
c 0
Add ⁄ Sub control Add/Sub = 0: Addition
Add/Sub = 1: Subtraktion
EXEMPEL"
43!
s 0 s 1 s n 1 –
x 0 x 1 x n 1 –
c n n -bit adder
y 0 y 1 y n 1 –
c 0
Add ⁄ Sub control Add/Sub = 0: Addition
Add/Sub = 1: Subtraktion
x = 1010 y = 0110 Add = 0 (addition)
EXEMPEL"
44!
s 0 s 1 s n 1 –
x 0 x 1 x n 1 –
c n n -bit adder
y 0 y 1 y n 1 –
c 0
Add ⁄ Sub control Add/Sub = 0: Addition
Add/Sub = 1: Subtraktion
x = 1010 y = 0110 Add = 1 (subraktion)
Arithmetic Logic Unit (ALU)"
MUX
LU AU f0 f1 Funktionsväljare
A/L
f0 f1 A/L
x y
cin ALU
A/L f1 f0 Funktion 0 0 0 x+y 0 0 1 x-y 1 0 0 x and y 1 0 1 x or y 1 1 0 x xor y 1 1 1 x nor y
45!
EXEMPEL"
MUX
LU AU f0 f1 Funktionsväljare
A/L
f0 f1 A/L
x y
cin ALU
A/L f1 f0 Funktion 0 0 0 x+y 0 0 1 x-y 1 0 0 x and y 1 0 1 x or y 1 1 0 x xor y 1 1 1 x nor y
46!
x = 1001 y = 0110
• Komparatorn implementeras som subtraktionskrets!
(Komparator)"
47!
• A < B -> A – B < 0 R = A – B -> A + (-B)!
• Inspektera Carry-out, 1 -> A<B false e.g 7<2!
A<B (unsigned)"
48!
(+7) + (-2)
(+5)
0111 + 1110
10101
1 1 1
c4=1
• A < B -> A – B < 0 R = A + (-B)!
• Inspektera Carry-out, 0 -> A<B true e.g 2<7!
A<B (unsigned)"
49!
(+2) + (-7)
(+5)
0010 + 1001
01011
0
C4=0
• A < B -> A – B < 0 R = A + (-B)!
• Inspektera N, 1 -> A<B true e.g 2<7!
A<B (signed)"
50!
(+2) + (-7)
(+5)
0010 + 1001
01011
0
N=1
• A < B -> A – B < 0 R = A + (-B)!
• Inspektera N, 1 -> A<B true, men det stämmer inte e.g 7< -5!
A<B (signed)"
51!
(+7) + (-(-5))
(+5)
0111 + 0101
01100
0
N=1
• Vi måste även ta hänsyn till overflow!• Dvs, A<B -> A-B<0, N xor V = 1!
A<B (signed)"
52!
(+7) + (-(-5))
(+5)
0111 + 0101
01100
0
N=1
V=1 (A,B samma tecken R motsatt tecken)
• 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)!
A<B "
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!