Bài 7
BIỂU DIỄN VÀ TÍNH TOÁN SỐ HỌC TRONG MÁY TÍNH
Nguyễn Hồng Sơn
NỘI DUNG
(cid:1) ALU (Arithmetic and Logical Unit) (cid:1) Biểu diễn và tính toán số nguyên (fixed
point)
(cid:1) Biễu diễn và tính toán số dấu chấm động
(floating point)
1
1
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 2
ALU
(cid:1) Thành phần thực hiện tất cả các phép tính
số học và luận lý
(cid:1) Tất cả các thành phần khác của máy tính nhằm chuyển data vào ALU để nó xử lý và sau đó lấy ra.
(cid:1) Được xây dựng từ các linh kiện điện tử số
ALU
flags
control unit
Registers
Registers
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 3
ALU
2
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 4
BIỂU DIỄN SỐ NGUYÊN (fixed point)
(cid:1) Dùng số nhị phân (cid:1) Integer có nghĩa là tập hợp tất cả các số
nguyên
(cid:1) Integer có thể là số dương hay số âm
Biễu diễn số nguyên: biễu diễn theo dấu và độ lớn
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 5
(cid:1) 0 = + (cid:1) 1 = - (cid:1) Ví dụ
+18 = 0 001 0010 -18 = 1 001 0010
(cid:1) Bit đầu tiên bên trái là bit dấu
− 2n
=
aunê
0
i a2 i
− 1n
∑
=
A
= 0i − 2n
−
=
aunê
1
i a2 i
− 1n
∑
= 0i
(cid:1) Vấn đề biểu diễn số 0 ( +010=0 0000000; -010=1 0000000) (cid:1) Tổng quát một số A gồm n bit
3
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 6
Biễu diễn số nguyên: biễu diễn bù hai
(cid:1) Cũng dùng bit đầu tiên bên trái làm bit dấu (cid:1) Tổng quát số A có n bit
− 2n
− 1n
−=
+
A
2
a
− 1n
i a2 i
∑
= 0i
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 7
Biễu diễn thập phân
Biễu diễn dấu và độ lớn
Biễn diễn bù 2
+8
-
-
+7
0111
0111
+6
0110
0110
+5
0101
0101
+4
0100
0100
+3
0011
0011
+2
0010
0010
+1
0001
0001
+0
0000
0000
-0
1000
-
-1
1001
1111
-2
1010
1110
-3
1011
1101
-4
1100
1100
-5
1101
1011
-6
1110
1010
-7
1111
1001
-8
-
1000
4
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 8
Chuyển đổi qua lại giữa chiều dài chuỗi bit khác nhau
(cid:1) Khi lưu một số có n bit vào m bit với m>n, số
đã bị chuyển đổi sang dạng số m bit
(cid:1) Với biểu diễn theo dấu và độ lớn:
(cid:1) Di chuyển bit dấu sang vị trí ngoài cùng bên trái (cid:1) Điền bit 0 vào các chỗ trống
(cid:1) Với biểu diễn bù 2
(cid:1) Di chuyển bit dấu sang vị trí ngoài cùng bên trái (cid:1) Điền bit dấu vào các chỗ trống
Tính toán số nguyên trong biểu diễn bù 2: Lấy số đảo
(cid:1) Trong biểu diễn dấu và độ lớn để lấy số đảo của một số chỉ
cần đảo ngược bit dấu.
(cid:1) Trong số bù 2 làm hai bước:
(cid:1) Đảo ngược các bit (cid:1) Cộng với 1
(cid:1) Ví dụ:
+18= 0001 0010 1110 1101 + 1 11101110 = -18
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 9
5
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 10
A và B là hai số đảo của nhau
− 2n
− 1n
−=
+
A
2
a
− 1n
i a2 i
∑
= 0i
− 2n
− 1n
−=
B
2
a
++ 1
− 1n
i a2 i
∑
= 0i
Cộng và trừ số biểu diễn bù 2
(cid:1) Cộng và trừ như hai số không dấu (cid:1) Phép trừ: X-Y = X+(-Y) (cid:1) Bỏ qua bit nhớ vượt ra ngoài kích thước từ
nhớ
(cid:1) Khi hai số cùng âm hay cùng dương và kết quả có dấu ngược lại thì có sự kiện tràn xảy ra, ALU thông báo sự kiện để ngăn chặn.
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 11
6
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 12
Ví dụ
1001 = -7
1100 = -4
+0101 = 5
+0100 = 4
1110 = -2
10000 = 0
0011 = 3
1100 = -4
+0100 = 4
+1111 = -1
0111 = 7
11011 = -5
Tính tràn
0101 = 5
1001 = -7
+1010 = -6
+0100 = 4
10011 = Tràn
1001 = Tràn
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 13
7
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 14
Sơ đồ phần cứng thực hiện cộng và trừ
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 15
8
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 16
Nhân hai số không dấu
(cid:1) Phức tạp hơn, có nhiều giải thuật được dùng
trong các máy khác nhau.
(cid:1) Nhân hai số nhị phân không dấu n bit tạo ra
tích số có 2n bit
Sơ đồ khối bộ nhân bằng cách cộng và dịch
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 17
9
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 18
Lưu đồ thuật toán nhân hai số không dấu
Start
0
C,A M Số bị nhân Q Số nhân Count n
No
Yes
Q0=1?
C,A<--A+M
Dịch phải C,A,Q Count = Count -1
No
Yes
Count=0?
Tích số chứa trong A và Q
End
Quá trình nhân
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 19
10
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 20
Nhân hai số bù 2
(cid:1) Không thể nhân như hai số không dấu, ví dụ
(cid:1) không dấu 11(1011) x 13 (1101) = 143 (10001111) (cid:1) bù 2
1011(-5) x 1101 (-3) = 10001111 (-113) -----> Sai
(cid:1) Vấn đề ở chỗ số âm
Khử yếu tố âm
(cid:1) Ví dụ nếu nhân hai số 1001 và 0011 (cid:1) Không dấu: được 00011011 (9 x 3=27) (cid:1) Số bù 2: được 11101011 (-7 x 3 = -21)
1001 (9) x 0011 (3)
1001 (-7) x 0011 (3)
00001001 1001 x 20 00010010 1001 x 21 00011011 (27)
11111001 (-7) x 20 = -7 11110010 (-7) x 21= -14 11101011 (-21)
Bù 2
Không dấu
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 21
11
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 22
Khử yếu tố âm (tt)
(cid:1) Phương pháp:
(cid:1) Đổi các thừa số sang số dương, nhân bình thường và sau đó sẽ lấy dạng bù 2 của kết quả nếu hai thừa số là khác dấu.
(cid:1) Giải thuật Booth được chuộng hơn
Giải thuật Booth
(cid:1) Lưu số bị nhân vào thanh ghi M và số nhân vào thanh ghi Q, dùng một ô nhớ Q-1 đặt bên phải Q
(cid:1) Khởi động với A=0, Q-1= 0 và Count = n (cid:1) While Count>0 (cid:1) switch (Q0Q-1) (cid:1) Case 01 (cid:1) Case 10
A=A+M A=A-M
(cid:1) rsht (A,Q,Q-1), dịch số học sang phải. (cid:1) Count = Count - 1
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 23
12
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 24
Lưu đồ giải thuật Booth
=
=
=
Ví dụ 7 x 3 theo giải thuật Booth
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 25
13
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 26
Chia hai số nhị phân
Thương số
Số bị chia
Số chia
1011
Số dư
00001101 10010011 1011 001110 1011 001111 1011 100
Lưu đồ giải thuật chia hai số nhị phân không dấu
Q chứa thương số A chứa số dư
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 27
14
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 28
Áp dụng chia hai số bù 2
(cid:1) M=số chia, AQ=số bị chia, Count = n (cid:1) While Count>0
(cid:1) dịch cả Q,A sang trái 1 bit (cid:1) if M và A cùng dấu
(cid:1) A=A-M
(cid:1) else
(cid:1) A=A+M (cid:1) if A không đổi dấu
(cid:1) Q0=1
(cid:1) else
(cid:1)
if A=0 và Q=0 (cid:1) Q0=1
(cid:1) else
(cid:1) A=Restore (A)// lấy lại giá trị A trước khi cộng/trừ với M, không lấy trị hiện hành.
(cid:1) Count = Count -1
start
AQ = số bị chia M = số chia count = số bit
ShiftLeft (AQ) count=count-1
yes
no
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 29
A=A+M
A=A-M
yes
no
M và A cùng dấu?
A=0 và Q=0?
no
yes
Q0=1
A=giá trị A cũ
yes
no
stop
count=0? Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM
A không đổi dấu?
15
30
Ví dụ
A
Q = 0111 (7)
M=1101 (-3)
0000
0111
Khởi tạo giá trị ban đầu
0000
1110
shift
1101
add
0000
1110
restore
0001
1100
shift
1110
add
0001
1100
restore
0011
1000
shif
0000
add
0000
1001
0001
0010
set Q0=1 shift
1110
add
0001
0010
restore
Biểu diễn dấu chấm động (floating point)
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 31
rất lớn hay rất nhỏ.
(cid:1) Nguyên lý: Dùng dạng ký hiệu khoa học để biểu diễn số
(cid:1) ví dụ: 168 000 000 000 000 = 1.68 x 1014 0.000000000000168 = 1.68 x 10-14
(cid:1) Linh động chuyển dấu chấm thập phân đến vị trí thuận tiện và dùng số mũ để theo dõi vị trí dấu chấm=> giúp biểu diễn dễ dàng một số rất lớn hay rất nhỏ chỉ bằng vài ký số!
(cid:1) Dùng cách tương tự để biểu diễn số nhị phân, dạng: ±S x B±E
16
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 32
Ví dụ
• Số âm sign=1. Số dương sign = 0 • Số mũ thực = Biased Exponent - Bias • Bias = 2k-1-1= 2(8-1)-1=27-1 = 127 • Significand (mantissa): định trị, là giá trị sau dấu chấm • Ví dụ:
0 11000100 11100000000000000000000 Dấu + Định trị = 1/2 + 1/4 + 1/8 = 0.875 Số mũ = 69
Chuẩn hóa
(cid:1) Số được viết dưới dạng chuẩn:
± 1.bbb…b × 2±E
(cid:1) Tại sao? – dễ tính toán, dễ so sánh (không âm) (cid:1) Cơ sở nào?
(cid:1) Dùng bit dấu (sign bit) (cid:1) Không cần lưu bit 1 bên trái dấu chấm (mặc định) (cid:1) bbb…b được lưu nguyên dạng (cid:1) E được lưu ở dạng mã thừa (bias) (cid:1) Không cần lưu cơ số
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 33
17
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 34
Ví dụ
1.1010001 x 210100 = 0 10010011 10100010000000000000000 = 1.6328125 x 220
-1.1010001 x 210100 = 1 10010011 10100010000000000000000 = -1.6328125 x 220
1.1010001 x 2-10100 = 0 01101011 10100010000000000000000 = 1.6328125 x 2-20
-1.1010001 x 2-10100 = 1 01101011 10100010000000000000000 = -1.6328125 x 2-20
Dải số ứng với 32-bit word
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 35
(2-2-23) x 2128 -2-127 2-127 (2-2-23) x 2128
18
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 36
Mật độ số
(cid:1) Các số không trải đều trên trục số, càng gần zero mật độ càng cao.
(cid:1) Cần áp dụng phương pháp làm tròn. (cid:1) Cân đối và giải pháp
(cid:1) Tăng số mũ --> mở rộng dải, số lượng số không đổi--> độ chính
xác giảm.
(cid:1) Chỉ có cách duy nhất là tăng số bit (single precision (32 bit) và
double-precision (64bit))
(cid:1) Dùng cơ số lớn, ví dụ thay 210100 = 16101
Chuẩn IEEE 754
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 37
19
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 38
Tham khảo về chuẩn IEE 754
[1]http://www.eecs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF [2] http://babbage.cs.qc.edu/courses/cs341/IEEE-754references.html
Tính toán trên số dấu chấm động
(cid:1) Cộng và trừ
(cid:1) Kiểm tra số có bằng zero hay không (cid:1) Điều chỉnh hai số cho bằng số mũ (cid:1) Cộng hay trừ phần định trị (cid:1) Chuẩn hóa kết quả (làm tròn nếu cần)
(123 x 100) - (456 x 10-2) = (123 x 100) + (4.56 x 100) = 127.56 x 100
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 39
20
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 40
Lưu đồ cộng và trừ
Tính toán trên số dấu chấm động (tt)
(cid:1) Nhân và chia
(cid:1) Kiểm tra số có bằng zero hay không (cid:1) Cộng hay trừ phần mũ (cid:1) Kiểm tra tràn trên và tràn dưới (cid:1) Nhân hay chia phần định trị (cid:1) Chuẩn hóa (cid:1) Làm tròn
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 41
21
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 42
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 43
22
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 44
Ví dụ
(cid:1) X = 0.3 × 102 = 30 (cid:1) Y = 0.2 × 103 = 200 Tính
(cid:1) X + Y=(0.3 x 102-3 + 0.2) x 103 = 0,23 x 103 (cid:1) X – Y=(0.3 x 102-3 - 0.2) x 103 = - 0,17 x 103 (cid:1) X × Y= (0.3 x 0.2) x 102+3 = 0.006 x 105 (cid:1) X ÷ Y = (0.3÷ 0.2) x 10 2-3 = 1.5 x 10-1
Chuẩn IEEE cho số học dấu chấm động nhị phân
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 45
(cid:1) - ∞ < mỗi số hữu hạn < +∞ (cid:1) Các phép toán số học liên quan đến vô cực
(cid:1) Vô cực
dụ mũ quá nhỏ)
(cid:1) Quiet and signaling NaNs (NaN = Not a Number) (cid:1) Các số không chuẩn – để kiểm soát tràn số mũ (số rất nhỏ, ví
23
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 46
Bài tập
1.Lấy vài ví dụ nhân hai số bù 2 bất kỳ và thực hiện phép nhân theo giải thuật
Booth.
2. Lấy vài ví dụ chia hai số bù 2 bất kỳ và thực hiện phép chia theo giải thuật chia
hai số bù 2.
3. Cho định dạng 8-bit phần mũ và 23-bit phần định trị, hãy cho biết chuỗi bit biểu
diễn của: a. -720 b. 0,645
4. Mô tả hoạt động cộng số dấu chấm động, cho phần định trị bị xén còn 4 ký số
thập phân: a. 0.5566 x 103 + 0.7777 x 103 b. 0.3344 x 102 - 0.8877 x 10-1
24
Biểu diễn và tính toán số học _Nguyễn Hồng Sơn_PTITHCM 47

