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