Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh

Ví dụ 2

n Cho các số nguyên không dấu M, N được

biểu diễn bằng 8-bit như sau:

n M = 0001 0010

n N = 1011 1001

Xác định giá trị của chúng ?

Giải:

n M = 0001 0010 = 24 + 21 = 16 +2 = 18

n N = 1011 1001 = 27 + 25 + 24 + 23 + 20

= 128 + 32 + 16 + 8 + 1 = 185

Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh trang 1

Trang 1

Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh trang 2

Trang 2

Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh trang 3

Trang 3

Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh trang 4

Trang 4

Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh trang 5

Trang 5

Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh trang 6

Trang 6

Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh trang 7

Trang 7

Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh trang 8

Trang 8

Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh trang 9

Trang 9

Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 60 trang xuanhieu 4680
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh

Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh
0 0000 0000 0000 = 0
n 0000 0000 0000 0001 = +1
n ...
n 0111 1111 1111 1111 = +32767 (215 - 1)
n 1000 0000 0000 0000 = -32768 (-215)
n 1000 0000 0000 0001 = -32767
n ...
n 1111 1111 1111 1111 = -1
n Với n = 32bit: biểu diễn từ -231 đến 231-1
n Với n = 64bit: biểu diễn từ -263 đến 263-1
2017 Kiến trúc máy tính 156
NKK-HUST
Mở rộng bit cho số nguyên
2017 Kiến trúc máy tính 157
n Mở rộng theo số không dấu (Zero-extended): 
thêm các bit 0 vào bên trái
n Mở rộng theo số có dấu (Sign-extended):
n Số dương: 
+19 = 0001 0011 (8bit)
+19 = 0000 0000 0001 0011 (16bit)
à thêm các bit 0 vào bên trái
n Số âm:
- 19 = 1110 1101 (8bit) 
- 19 = 1111 1111 1110 1101 (16bit)
à thêm các bit 1 vào bên trái
NKK-HUST
Bộ cộng n-bit 
XY
S
CinCout
n bit n bit
n bit
1. Phép cộng số nguyên không dấu
Bộ cộng n-bit
4.2. Thực hiện phép cộng/trừ với số nguyên
2017 Kiến trúc máy tính 158
NKK-HUST
Nguyên tắc cộng số nguyên không dấu
n Khi cộng hai số nguyên không dấu n-bit, 
kết quả nhận được là n-bit:
n Nếu Cout = 0 à nhận được kết quả đúng
n Nếu Cout = 1 à nhận được kết quả sai, do 
có nhớ ra ngoài (Carry Out)
n Hiện tượng nhớ ra ngoài xảy ra khi: 
tổng > (2n - 1)
2017 Kiến trúc máy tính 159
NKK-HUST
Ví dụ cộng số nguyên không dấu
n 57 = 0011 1001
+ 34 = + 0010 0010
91 0101 1011 = 64+16+8+2+1=91 à đúng
n 209 = 1101 0001
+ 73 = + 0100 1001
282 1 0001 1010 
kết quả = 0001 1010 =16+8+2=26 à sai
do có nhớ ra ngoài (Cout=1)
Để có kết quả đúng, ta thực hiện cộng theo 16-bit: 
209 = 0000 0000 1101 0001
+ 73 = + 0000 0000 0100 1001
0000 0001 0001 1010 = 256+16+8+2 = 282
2017 Kiến trúc máy tính 160
NKK-HUST
2. Phép đảo dấu
n Ta có:
+ 37 = 0010 0101 
bù một = 1101 1010
+ 1
bù hai = 1101 1011 = -37
n Lấy bù hai của số âm:
- 37 = 1101 1011 
bù một = 0010 0100
+ 1
bù hai = 0010 0101 = +37
n Kết luận: Phép đảo dấu số nguyên trong máy tính 
thực chất là lấy bù hai
2017 Kiến trúc máy tính 161
NKK-HUST
3. Cộng số nguyên có dấu
n Khi cộng hai số nguyên có dấu n-bit, kết quả 
nhận được là n-bit và không cần quan tâm đến 
bit Cout
n Khi cộng hai số khác dấu thì kết quả luôn luôn đúng
n Khi cộng hai số cùng dấu, nếu dấu kết quả cùng dấu 
với các số hạng thì kết quả là đúng
n Khi cộng hai số cùng dấu, nếu kết quả có dấu ngược 
lại, khi đó có tràn (Overflow) xảy ra và kết quả bị sai
n Hiện tượng tràn xảy ra khi tổng nằm ngoài dải 
biểu diễn: [ -(2n-1),+(2n-1-1)] 
2017 Kiến trúc máy tính 162
NKK-HUST
Ví dụ cộng số nguyên có dấu không tràn
n ( + 70) = 0100 0110
+ ( + 42) = 0010 1010
+ 112 0111 0000 = +112
n (+ 97) = 0110 0001
+ (- 52) = 1100 1100 (+52=0011 0100)
+ 45 1 0010 1101 = +45
n ( - 90) = 1010 0110 (+90=0101 1010)
+ ( +36) = 0010 0100
- 54 1100 1010 = - 54
n ( - 74) = 1011 0110 (+74=0100 1010)
+( - 30) = 1110 0010 (+30=0001 1110)
-104 1 1001 1000 = -104
2017 Kiến trúc máy tính 163
NKK-HUST
Ví dụ cộng số nguyên có dấu bị tràn
n ( + 75) = 0100 1011
+( + 82) = 0101 0010
+157 1001 1101 
= - 128+16+8+4+1= -99 à sai
n ( - 104) = 1001 1000 (+104=0110 1000)
+ ( - 43) = 1101 0101 (+ 43 =0010 1011)
- 147 1 0110 1101 
= 64+32+8+4+1= +109 à sai
n Cả hai ví dụ đều tràn vì tổng nằm ngoài dải 
biểu diễn [-128, +127] 
2017 Kiến trúc máy tính 164
NKK-HUST
4. Nguyên tắc thực hiện phép trừ
n Phép trừ hai số nguyên: X-Y = X+(-Y)
n Nguyên tắc: Lấy bù hai của Y để được –Y, 
rồi cộng với X
Bộ cộng n-bit
Y X
S= X-Y
Bù hai
n-bit n-bit
n-bit
2017 Kiến trúc máy tính 165
NKK-HUST
4.3. Phép nhân và phép chia số nguyên
1011 Số bị nhân (11)
x 1101 Số nhân (13)
1011
0000 Các tích riêng phần
1011
1011
10001111 Tích (143)
1. Nhân số nguyên không dấu
2017 Kiến trúc máy tính 166
NKK-HUST
Nhân số nguyên không dấu (tiếp)
n Các tích riêng phần được xác định như sau:
n Nếu bit của số nhân bằng 0 à tích riêng phần bằng 0 
n Nếu bit của số nhân bằng 1 à tích riêng phần bằng số 
bị nhân
n Tích riêng phần tiếp theo được dịch trái một bit so với 
tích riêng phần trước đó
n Tích bằng tổng các tích riêng phần
n Nhân hai số nguyên n-bit, tích có độ dài 2n bit 
(không bao giờ tràn)
2017 Kiến trúc máy tính 167
NKK-HUST
Bộ nhân số nguyên không dấu
Bộ cộng n-bit Bộ logic điều khiển cộng và dịch
Điều khiển 
dịch phải
Điều 
khiển 
cộng
Số nhân
Mn-1 Mn-2 M0M1. . .
An-1 An-2 A0A1. . . Qn-1 Qn-2 Q0Q1. . .C
Số bị nhân
2017 Kiến trúc máy tính 168
NKK-HUST
Lưu đồ nhân số nguyên không dấu
Bắt đầu
 C ß 0; A ß 0
 M ß Số bị nhân
 Q ß Số nhân 
 Bộ đếm ß n
Bộ đếm = 0 ?
Kết thúc
YesNo
 Q0 = 1 ?
C,A ß A+M
Dịch phải C,A,Q
Bộ đếm ßBộ đếm-1 
Yes
No
Tích trong AQ
2017 Kiến trúc máy tính 169
NKK-HUST
Ví dụ nhân số nguyên không dấu
n Số bị nhân M = 1011 (11)
n Số nhân Q = 1101 (13)
n Tích = 1000 1111 (143)
C A Q
n 0 0000 1101 Các giá trị khởi đầu
+ 1011
0 1011 1101 A ¬ A + M
n 0 0101 1110 Dịch phải
n 0 0010 1111 Dịch phải
+ 1011
0 1101 1111 A ¬ A + M
n 0 0110 1111 Dịch phải
+ 1011
1 0001 1111 A ¬ A + M
n 0 1000 1111 Dịch phải
2017 Kiến trúc máy tính 170
NKK-HUST
2. Nhân số nguyên có dấu 
n Sử dụng thuật giải nhân không dấu
n Sử dụng thuật giải Booth 
2017 Kiến trúc máy tính 171
NKK-HUST
Sử dụng thuật giải nhân không dấu
n Bước 1. Chuyển đổi số bị nhân và số nhân 
thành số dương tương ứng
n Bước 2. Nhân hai số dương bằng thuật giải 
nhân số nguyên không dấu, được tích của hai 
số dương.
n Bước 3. Hiệu chỉnh dấu của tích: 
n Nếu hai thừa số ban đầu cùng dấu thì giữ nguyên 
kết quả ở bước 2
n Nếu hai thừa số ban đầu là khác dấu thì đảo dấu 
kết quả của bước 2 (lấy bù hai)
2017 Kiến trúc máy tính 172
NKK-HUST
Thuật giải Booth (tham khảo sách COA)
10.3 / INTEGER ARITHMETIC 335
as the twos complement value -7, then each partial product must be a negative 
twos complement number of 2n (8) bits, as shown in Figure 10.11b. Note that this is 
accomplished by padding out each partial product to the left with binary 1s.
If the multiplier is negative, straightforward multiplication also will not work. 
The reason is that the bits of the multiplier no longer correspond to the shifts or 
multiplications that must take place. For example, the 4-bit decimal number -3 is 
written 1101 in twos complement. If we simply took partial products based on each 
bit position, we would have the following correspondence:
1101g -(1 * 23 + 1 * 22 + 0 * 21 + 1 * 20) = -(23 + 22 + 20)
In fact, what is desired is -(21 + 20). So this multiplier cannot be used directly in 
the manner we have been describing.
There are a number of ways out of this dilemma. One would be to convert 
both multiplier and multiplicand to positive numbers, perform the multiplication, 
and then take the twos complement of the result if and only if the sign of the two 
original numbers differed. Implementers have preferred to use techniques that 
do not require this final transformation step. One of the most common of these is 
Booth’s algorithm. This algorithm also has the benefit of speeding up the multipli-
cation process, relative to a more straightforward approach.
Booth’s algorithm is depicted in Figure 10.12 and can be described as follows. 
As before, the multiplier and multiplicand are placed in the Q and M registers, 
START
END
YesNo
! 10 ! 01
! 11
! 00
A 0, Q"1 0
M Multiplicand
Q Multiplier
Count n
Arithmetic shift
Right: A, Q, Q"1
Count Count " 1
A A # MA A " M
Q0, Q"1
Count ! 0?
Figure 10.12 Booth’s Algorithm for Twos 
Complement Multiplication
2017 Kiến trúc máy tính 173
NKK-HUST
3. Chia số nguyên không dấu
Số bị chia 10010011 1011 Số chia 
- 1011 00001101 Thương
001110
- 1011
001111
- 1011
100 Phần dư
2017 Kiến trúc máy tính 174
NKK-HUST
Bộ chia số nguyên không dấu
Bộ cộng/trừ n-bit Bộ logic điều khiểncộng/trừ và dịch
Điều khiển 
dịch trái
Điều 
khiển 
cộng/trừ
Số bị chia Q
Mn-1 Mn-2 M0M1. . .
An-1 An-2 A0A1. . . Qn-1 Qn-2 Q0Q1. . .
Số chia M
2017 Kiến trúc máy tính 175
NKK-HUST
Lưu đồ chia số nguyên không dấu
Bắt đầu
 A ß 0
 M ß Số chia
 Q ß Số bị chia
 Bộ đếm ß n
Bộ đếm = 0 ?
Kết thúc
YesNo
A < 0 ?
Q0 ß 0 
A ß A + M
Bộ đếmßBộ đếm-1 
Yes
No
Q0 ß1
Dịch trái A,Q
A ß A - M
Thương ở Q
Số dư ở A
2017 Kiến trúc máy tính 176
NKK-HUST
4. Chia số nguyên có dấu
n Bước 1. Chuyển đổi số bị chia và số chia về thành số 
dương tương ứng. 
n Bước 2. Sử dụng thuật giải chia số nguyên không dấu để 
chia hai số dương, kết quả nhận được là thương Q và 
phần dư R đều là dương
n Bước 3. Hiệu chỉnh dấu của kết quả như sau:
(Lưu ý: phép đảo dấu thực chất là thực hiện phép lấy bù hai)
Số bị chia Số chia Thương Số dư
dương dương giữ nguyên giữ nguyên
dương âm đảo dấu giữ nguyên
âm dương đảo dấu đảo dấu
âm âm giữ nguyên đảo dấu
2017 Kiến trúc máy tính 177
NKK-HUST
4.4. Số dấu phẩy động
1. Nguyên tắc chung
n Floating Point Number à biểu diễn cho số 
thực
n Tổng quát: một số thực X được biểu diễn 
theo kiểu số dấu phẩy động như sau:
X = ± M * RE
n M là phần định trị (Mantissa),
n R là cơ số (Radix),
n E là phần mũ (Exponent).
2017 Kiến trúc máy tính 178
NKK-HUST
2. Chuẩn IEEE754-2008
n Cơ số R = 2
n Các dạng:
n Dạng 32-bit
n Dạng 64-bit
n Dạng 128-bit
346 CHAPTER 10 / COMPUTER ARITHMETIC
is implementation dependent, but the standard places certain constraints on the 
length of the exponent and significand. These formats are arithmetic format types 
but not interchange format types. The extended formats are to be used for inter-
mediate calculations. With their greater precision, the extended formats lessen the 
Table 10.3 IEEE 754 Format Parameters
Parameter
Format
Binary32 Binary64 Binary128
Storage width (bits) 32 64 128
Exponent width (bits) 8 11 15
Exponent bias 127 1023 16383
Maximum exponent 127 1023 16383
Minimum exponent -126 -1022 -16382
Approx normal number range 
(base 10)
10-38, 10+38 10-308, 10+308 10-4932, 10+4932
Trailing significand width (bits)* 23 52 112
Number of exponents 254 2046 32766
Number of fractions 223 252 2112
Number of values 1.98 * 231 1.99 * 263 1.99 * 2128
Smallest positive normal number 2-126 2-1022 2-16362
Largest positive normal number 2128 - 2104 21024 - 2971 216384 - 216271
Smallest subnormal magnitude 2-149 2-1074 2-16494
Note: *not including implied bit and not including sign bit
Trailing significand field
(c) Binary128 format
Biased
exponent
Trailing significand field
(b) Binary64 format
8 bits
Sign
bit
Trailing
significand field
(a) Binary32 format
Biased
exponent
23 bits
11 bits 52 bits
15 bits 112 bits
Sign
bit
Biased
exponent
Sign
bit
Figure 10.21 IEEE 754 Formats
2017 Kiến trúc máy tín 179
NKK-HUST
Dạng 32-bit
n S là bit dấu:
n S = 0 à số dương
n S = 1 à số âm
n e (8 bit) là giá trị dịch chuyển của phần mũ E:
n e = E + 127 à phần mũ E = e - 127
n m (23 bit) là phần lẻ của phần định trị M:
n M = 1.m
n Công thức xác định giá trị của số thực:
X = (-1)S*1.m * 2e-127
2017 Kiến trúc máy tính 180
S me
1	bit 23	bit8	bit
NKK-HUST
Ví dụ 1
Xác định giá trị của các số thực được biểu diễn 
bằng 32-bit sau đây:
n 1100 0001 0101 0110 0000 0000 0000 0000
n S = 1 à số âm
n e = 1000 0010(2) = 130(10) à E = 130 - 127 = 3
Vậy 
X = -1.10101100(2) * 23 = -1101.011(2) = -13.375(10)
n 0011 1111 1000 0000 0000 0000 0000 0000 = ?
2017 Kiến trúc máy tính 181
NKK-HUST
Ví dụ 2
Biểu diễn số thực X= 83.75(10) về dạng số dấu 
phẩy động IEEE754 32-bit
Giải:
n X = 83.75(10) = 1010011.11(2) = 1.01001111 x 26
n Ta có:
n S = 0 vì đây là số dương
n E = e - 127 = 6 à e = 127 + 6 = 133(10) = 1000 0101(2)
n Vậy:
X = 0100 0010 1010 0111 1000 0000 0000 0000
2017 Kiến trúc máy tính 182
NKK-HUST
Các qui ước đặc biệt
n Các bit của e bằng 0, các bit của m bằng 0, thì X = ± 0
x000 0000 0000 0000 0000 0000 0000 0000 à X = ± 0
n Các bit của e bằng 1, các bit của m bằng 0, thì X = ± ¥
x111 1111 1000 0000 0000 0000 0000 0000 à X =± ¥
n Các bit của e bằng 1, còn m có ít nhất một bit bằng 1, thì 
nó không biểu diễn cho số nào cả (NaN - not a number) 
2017 Kiến trúc máy tính 183
NKK-HUST
Dải giá trị biểu diễn
n 2-127 đến 2+127
n 10-38 đến 10+38
0-2+127 +2+127+2-127-2-127
2017 Kiến trúc máy tính 184
NKK-HUST
Dạng 64-bit
n S là bit dấu
n e (11 bit) là giá trị dịch chuyển của phần 
mũ E:
n e = E + 1023 à phần mũ E = e - 1023 
n m (52 bit): phần lẻ của phần định trị M
n Giá trị số thực:
X = (-1)S*1.m * 2e-1023
n Dải giá trị biểu diễn: 10-308 đến 10+308
2017 Kiến trúc máy tính 185
NKK-HUST
Dạng 128-bit
n S là bit dấu
n e (15 bit) là giá trị dịch chuyển của phần 
mũ E:
n e = E + 16383 à phần mũ E = e - 16383 
n m (112 bit): phần lẻ của phần định trị M
n Giá trị số thực:
X = (-1)S*1.m * 2e-16383
n Dải giá trị biểu diễn: 10-4932 đến 10+4932
2017 Kiến trúc máy tính 186
NKK-HUST
3. Thực hiện phép toán số dấu phẩy động
n X1 = M1 * RE1
n X2 = M2 * RE2
n Ta có 
n X1 * X2 = (M1* M2) * RE1+E2
n X1 / X2 = (M1 / M2) * RE1-E2
n X1 ± X2 = (M1*RE1-E2 ± M2) * RE2 , với E2 ³ E1
2017 Kiến trúc máy tính 187
NKK-HUST
Các khả năng tràn số
n Tràn trên số mũ (Exponent Overflow): mũ 
dương vượt ra khỏi giá trị cực đại của số mũ 
dương có thể (à ∞)
n Tràn dưới số mũ (Exponent Underflow): mũ âm 
vượt ra khỏi giá trị cực đại của số mũ âm có thể 
(à 0)
n Tràn trên phần định trị (Mantissa Overflow): 
cộng hai phần định trị có cùng dấu, kết quả bị 
nhớ ra ngoài bit cao nhất
n Tràn dưới phần định trị (Mantissa Underflow): 
Khi hiệu chỉnh phần định trị, các số bị mất ở bên 
phải phần định trị
2017 Kiến trúc máy tính 188
NKK-HUST
Phép cộng và phép trừ
n Kiểm tra các số hạng có bằng 0 hay 
không
n Hiệu chỉnh phần định trị
n Cộng hoặc trừ phần định trị
n Chuẩn hoá kết quả
2017 Kiến trúc máy tính 189
NKK-HUST
Thuật toán cộng/trừ số dấu phẩy động
TRỪ
Dịch phải 
phần định trị 
Phần mũ 
bị tràn?
Y
NX = 0 ?
Cất số kia 
vào Z
Đổi dấu của Y
Tăng phần mũ 
nhỏ hơn
Z ß Y
CỘNG Y = 0 ?
Z ß X
TRỞ VỀ
Phần mũ 
bằng nhau?
Y
N
Y = 0 ?
TRỞ VỀ
Cộng có dấu 
phần định trị
định trị = 0?Z ß 0
TRỞ VỀ
N
N
Y
Y
định trị bị 
tràn?
N
Y
Dịch phải 
phần định trị 
Tăng phần mũ
YBáo tràn
TRỞ VỀ
N
Phần mũ bị 
tràn dưới?
N
Kết quả 
chuẩn hóa?
Y
Dịch phải 
phần định trị 
Giảm phần mũ
Y
Làm tròn 
kết quả
TRỞ VỀ
Báo tràn dưới
TRỞ VỀ
N
Y
N
2017 Kiến trúc máy tính 190
NKK-HUST
Thuật toán nhân số dấu phẩy động
NHÂN
Thông báo 
tràn trên
Y
NX = 0 ?
Làm tròn
Trừ cho 
độ lệch
Z ß 0
Y = 0 ? Cộng phần mũ
TRỞ VỀ
Y
N
Tràn dưới
phần mũ?
TRỞ VỀ
Thông báo 
tràn dưới
TRỞ VỀ
N
N
Tràn trên
 phần mũ?
Nhân phần 
định trị
Chuẩn hóa
Y
Y
2017 Kiến trúc máy tính 191
NKK-HUST
Thuật toán chia số dấu phẩy động
CHIA
Thông báo 
tràn trên
Y
NX = 0 ?
Làm tròn
Công thêm
 độ lệchZ ß 0
Y = 0 ? Trừ phần mũ
TRỞ VỀ
Y
N
Tràn dưới
 phần mũ?
TRỞ VỀ
Thông báo 
tràn dưới
TRỞ VỀ
N
N
Tràn trên
phần mũ?
Chia phần 
định trị
Chuẩn hóa
Y
Y
Z ß ∞
2017 Kiến trúc máy tính 192
NKK-HUST
Hết chương 4
2017 Kiến trúc máy tính 193

File đính kèm:

  • pdfbai_giang_kien_truc_may_tinh_chuong_4_so_hoc_may_tinh_nguyen.pdf