Digital Aritmetik Unsigned Integers Signed Integers

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!