ĐẠI HỌC BÁCH KHOA HÀ NỘI
HANOI UNIVERSITY OF SCIENCE AND TECHNOLOGY
VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC
KIẾN TRÚC MÁY TÍNH
CH3 - SỐ HỌC MÁY TÍNH
Nội dung
3.1. Biểu diễn số nguyên (Integer Representation)
3.2. Các phép tính với số nguyên (Integer Arithmetic)
3.3. Biểu diễn số dấu phẩy động (Floating-Point Representation)
3.4. Các phép tính dấu phẩy động (Floating-Point Arithmetic)
2
Đơn vị xử lý số học và logic ALU
Là đơn vị thực hiện các phép số học và logic trong CPU
Cấu trúc từ các mạch logic số đơn giản
3
ĐẠI HỌC BÁCH KHOA HÀ NỘI
HANOI UNIVERSITY OF SCIENCE AND TECHNOLOGY
VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC
CH3
3.1. Biểu diễn số nguyên (Integer Representation)
3.2. Các phép tính với số nguyên (Integer Arithmetic)
3.3. Biểu diễn số dấu phẩy động (Floating-Point Representation)
3.4. Các phép tính dấu phẩy động (Floating-Point Arithmetic)
4
3.1. Biểu diễn số nguyên
Số nguyên không dấu (Unsigned Integer)
Số nguyên có dấu (Signed Integer)
5
Số nguyên không dấu
Biểu diễn các đại lượng luôn dương
Tổng quát:
Giá trị
Giải biểu diễn
Số nguyên không dấu 1 byte
•Bé nhất
•Lớn nhất 8
Số nguyên không dấu 1 word 2byte
•Bé nhất 0000 0000 0000 00002 = 0
•Lớn nhất 16 6
Ví dụ
Biểu diễn số nguyên không dấu sau bằng 8-bit
A = 35, B=132
Ta có:
A = 32+2+1=25+21+20
A = 0010 00112
B=128+4= 27+22
B = 1000 01002
Xác định giá trị của các số nguyên không dấu biểu diễn bằng
8 bit sau
• C = 0101 1100
• D = 1011 1110 7
• C=26+24+23+22=64+16+8+4=92
Số nguyên không dấu
Xét N=8 bit Biểu diễn nhị Giá trị thập
phân phân
Vấn đề đặt ra:
0000 0000 0
•3 + 4 = 7
0000 0001 1
•1 + 255 ?
0000 0010 2
….
1111 1110 254
1111 1111 255
8
Số nguyên không dấu
Trục số học với N = 8 bit
Trục số học
Trục số học trong máy tính
9
Số nguyên có dấu
Trục số học với N = 8 bit
Trục số học :
Trục số học máy tính
10
Số nguyên không dấu
N = 16, 32, 64 bit
n = 16 bit
• 0000 0000 0000 0000 = 0
• …..
• 1111 1111 1111 1111 = 65535
dải biểu diễn từ :
n = 32 bit dải biểu diễn từ
n = 64 bit dải biểu diễn từ
11
3.1. Biểu diễn số nguyên
Số nguyên không dấu (Unsigned Integer)
Số nguyên có dấu (Signed Integer)
12
Số nguyên có dấu
Có nhiều cách biểu diễn
•Dấu lượng
•Bù: bù 1, bù 2, ...
•Số quá/số dịch N
•Đều dùng bit trái nhất cho dấu
13
Số nguyên có dấu
Biểu diễn dấu lượng Sign-Magnitude
Là cách đơn giản nhất
•bit trái nhất: bit dấu
•các bit còn lại: giá trị
Giá trị biểu diễn
•giá trị 0:
14
Số nguyên có dấu
Biểu diễn bù 1
Bù 1 - ones complement: bù với cơ số trừ đi 1 của số khác
Số bù 1 nhị phân A1 của số A là số A1 sao cho A1 + A = 11...112 =
2n - 1
•cách tính: A1 = (2n - 1) - A
•hoặc từ A: đảo các bit => A1
Biểu diễn số
•1 Bit dấu (số dương=0, số âm=1), n-1 bit giá trị
•Biểu diễn bù với số âm
Khoảng giá trị : n bit - 15
Số nguyên có dấu
Biểu diễn bù 1
Ví dụ
Với n = 8 bit, cho
tìm số bù 1 của A: 1
1111 1111
0011 0100
1100 1011
=> là đảo bit của A
n=8bit, Tìm dạng biểu diễn bù 1 của -9
16
Số nguyên có dấu
Biểu diễn bù 2
Bù 2 - twos complement: bù đúng (true complement) của một số
Số bù 2 A2 của số A là số A2 sao cho A2 + A là lũy thừa 2n (A2=
2n - A)
•Cách tính: từ số bù 1 => cộng thêm 1 (khi +1 => bit nhớ phía trái thành
dấu)
•Hoặc: từ bit 1 phải nhất: lật các bit bên trái
Biểu diễn số
•1 Bit dấu (số dương=0, số âm=1), n-1 bit giá trị
•Biểu diễn bù 2 với số âm
17
Số nguyên có dấu
Biểu diễn bù 2
Ví dụ
•8 bit, số dương A = 0011 0100 = 5210
số bù 1 = 1100 1011 - lật bit
số bù 2 = 1100 1011 + 1 = 1100 1100
•Số âm B = 1100 1100 => xác định số thập phân
số bù 1 = 0011 0011 - lật bit
số bù 2 = 0011 0011 + 1 = 0011 0100
18
Số nguyên có dấu
Giá trị
Dạng tổng quát của số biểu diễn n bit là:
Giá trị của số dương:
Dải giá trị biểu diễn cho số dương:
19
Số nguyên có dấu
Giá trị
Dạng tổng quát của số âm biểu diễn n bit bù 2 là:
Giá trị của số âm:
Dải giá trị biểu diễn cho số âm:
VD: 7 5 4 2
20
Số nguyên có dấu
Giá trị
Dạng tổng quát của số nguyên có dấu A:
Giá trị của A được xác định:
Dải giá trị
21
Số nguyên có dấu
Giá trị
Giá trị thập Biểu diễn bù
phân 2
0 0000 0000
Ví dụ +1 0000 0001
Dùng 8 bít biểu diễn số +2 0000 0010
….
Khoảng giá trị +126 0111 1110
7 = [-128,127] +127 0111 1111
-128 1000 0000
Đặc điểm: -127 1000 0001
•Trong dãy trên có 1 số 0 …
-2 1111 1110
•Không biểu diễn được giá trị 128
-1 1111 1111
22
Số nguyên có dấu
Bù 2
•VD: Tìm giá trị của các số nguyên có dấu biểu diễn bởi mã bù 8 bit sau:
•
•
•Ta có:
• A= 25+24+23+22+20
A= 32+16+8+4+1
A=61
• B= -27+(25+21+20)
B= -128+ (32+2+1)
B= -128+35
B= - 93
23
Số bù 2
Mở rộng bit
Mở rộng bit: số n bit lưu trữ với kích thước m bit ( m> n)
Số không dấu: Quy tắc - thêm các bit 0 vào bên trái
Số có dấu: Quy tắc - thêm các bit dấu vào bên trái
•Số dương: thêm số 0 vào bên trái
• (8 bit)
• (16 bit)
•Số âm: thêm số 1 vào bên trái
• (8 bit)
• (16 bit)
24
Số bù 2
Mở rộng bit
Với số A > 0: dễ thấy quy tắc đúng
Với A < 0
•Số n bit A= an-1 an-2 ... a1 a0
•Tìm biểu diễn m bit
Số bù 9 & bù 10
•Số thập phân A
• Số bù 9: A1=(10n-1)-A
• Số bù 10: A2= 10n - A
•Ví dụ: A=2101 với n=4
• = 9999-2101= 7898
• =10000-2101=7899
=>
26
ĐẠI HỌC BÁCH KHOA HÀ NỘI
HANOI UNIVERSITY OF SCIENCE AND TECHNOLOGY
VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC
Chương 3
3.1. Biểu diễn số nguyên (Integer Representation)
3.2. Các phép tính với số nguyên (Integer Arithmetic)
3.3. Biểu diễn số dấu phẩy động (Floating-Point Representation)
3.4. Các phép tính dấu phẩy động (Floating-Point Arithmetic)
27
Phép đảo dấu
Với biểu diễn dấu-lượng sign-magnitude
•Đảo bit dấu
28
Phép đảo dấu
Với biểu diễn bù 2: thực hiện 2 thao tác
•Lật bit
•Kết quả như số không dấu và cộng 1
•VD:
=>Phép bù 2 ~ phép đảo dấu số nguyên trong máy tính
29
Phép đảo dấu
Bù hai số dương
Bù hai số âm
=>Phép bù 2 là phép đảo dấu số nguyên trong máy tính
30
Phép đảo dấu
Kiểm tra:
•số A dạng bù 2:
•lật bit:
•cộng 1: được số B:
•có thể kiểm tra A = B ~ A+B=0:
31
Phép đảo dấu - bù 2
Trường hợp đặc biệt
•số 0: bỏ qua giá trị nhớ-bit cao nhất
•giải giá trị có thể biểu diễn: số âm và số dương khác nhau
32
Phép cộng hai số nguyên
Thực hiện phép cộng như với các số nguyên không dấu
Cộng hai số nguyên có dấu n-bit, Không quan tâm tới bit nhớ Cout
•Hai số trái dấu: Kết quả luôn đúng
•Hai số cùng dấu:
• Kết quả đúng nếu cùng dấu với số hạng
• Kết quả sai nếu trái dấu với hai số hạng - là quy tắc nhận biết tràn số
•Có thể xảy ra bit nhớ vượt quá biên => bỏ qua bit nhớ
•Tràn số khi kết quả ngoài [-(2n-1),+(2n-1-1)]
33
Phép cộng hai số nguyên
Ví dụ:
57+34 = 91
Đúng/sai ?
209+73=282
Đúng/sai ?
34
Phép cộng hai số nguyên
Nếu thực hiện phép cộng như với các số nguyên không dấu ?
(a),(b),(c),(d): phép toán đúng
(e),(f): phép toán sai
35
Phép cộng hai số nguyên
Ví dụ cộng không tràn
•70+42
•97+(-52)
•(-90)+36
•(-74)+(-30)
36
Phép cộng hai số nguyên
Ví dụ cộng bị tràn
•75+82
•(-104)+(-43)
37
Phép trừ hai số nguyên
Quy tắc: Dùng phép cộng
với số đảo - số bù 2
•M S ~ M (S)
38
Phép cộng trừ - thể hiện hình học
39
Mạch cộng trừ
40
Cộng số nguyên không dấu
Phép nhân
Phép tính và mạch phức tạp hơn nhiều
Nhân số không dấu
Nhân số biểu diễn bù 2
41
Phép nhân
Nhân số không dấu
B1/ Tính các tích riêng thành phần
B2/ Tính tổng các tích thành phần
Tích thành phần
•Bit = 0 => tích = 0
•Bit = 1 => tích = số bị nhân
Tổng các tích thành phần
•Dịch bit ~ nhân với lũy thừa 2i
Thừa số n-bit => tích không quá 2n-bit
42
Phép nhân
Nhân số không dấu
Thực hiện trên máy
•Cộng ngay các tích thành phần
•Bit hiện tại của Số nhân
bit 1: cần cộng và dịch
bit 0: chỉ cần dịch
•số bị nhân M (tích riêng)
cộng (dồn) với A => ghi vào A
~ thanh ghi kết hợp A-Q chứa tích hiện thời
43
Phép nhân
Nhân số không dấu
44
Phép nhân
Nhân số có dấu bù 2
Phép cộng số bù 2:
•Coi là 2 số không dấu và cộng số không dấu
•Không áp dụng được cho phép nhân, vd:
Nếu ta coi là 2 số không dấu thì: 11x13=143 (đúng)
Nếu ta coi là 2 số âm: (-5)x(-3) = 113 (sai)
45
Phép nhân
Nhân số có dấu bù 2
VD số bị nhân < 0
•Các tích riêng phải là số âm
•Mở rộng số âm dạng bù 2
thành 2n bit: mở rộng với
bit 1
46
Phép nhân
Nhân số có dấu bù 2
Sử dụng giải thuật nhân không dấu
Sử dụng giải thuật Booth
47
Phép nhân
Nhân số bù 2: Sử dụng giải thuật nhân không dấu
Bước 1: Chuyển hai thừa số thành số dương tương ứng
Bước 2: Nhân hai số dương bằng giải thuật nhân hai số không
dâu
Bước 3: Hiệu chỉnh dấu của tích
•Nếu hai thừa cùng dấu => Giữ nguyên kết quả bước 2
•Nếu hai thừa số trái dấu => Đảo dấu (Lấy bù 2)
48
Phép nhân
Nhân số có dấu bù 2: sử dụng nhân không dấu
0011
Ví dụ 0101
00000011 1011 x1 x20
0000000- 1011 x0 x21
000011-- 1011 x1 x22
00000--- 1011 x0 x23
00001111 = 1510
Lấy bù 2 nếu cần: 111100012 = -1510 ,
Nếu là tích 2 số không dấu thì: 3x5=15 (đ)
Nếu là tích 2 số có 1 số âm: (-5)x(3)=(-3)x(5)=-15 (lấy bù kết quả)
Nếu là tích 2 số âm (-3)x(-5)=15 (đ)
49
Phép nhân
Nhân số bù 2: Giải thuật Booth
•Số bị nhân => thanh ghi M
•Số nhân => thanh ghi Q
•thêm thanh ghi Q-1 - bit thấp lưu lịch sử Q0
•Mỗi nhịp xử lý 1 bit, xét 2 bit Q0Q-1
• giống nhau (1-1;0-0):
• dịch phải nhưng bảo toàn bit dấu An-1 của A -
gọi là arithmetic shift right <A Q Q-1 >
• khác nhau (1-0;0-1):
• cộng hoặc trừ số bị nhân M với A
• thực hiện arithmetic shift right <A Q Q-1 >
50
Phép nhân
Nhân số bù 2: Giải thuật Booth
•VD: (7 x 3) 0111 x 0011
51
Phép nhân
Nhân số bù 2 Giải thuật Booth
•Các trường hợp >0, <0 Q0 Q -1
52
Phép nhân
Nhân số bù 2 Giải thuật Booth
•Tình huống số nhân > 0:
để ý
•Tình huống số nhân < 0:
giả sử k: vị trí bit 0 trái nhất
53
Phép chia
Chia 2 số không dấu
•10010011 : 1011
•Các bit số bị chia duyệt từ trái sang
•Còn nhỏ hơn số chia =>
• bit 0 đưa vào thương
• ghép vào số dư riêng phần
•Đến khi lớn hơn số chia =>
• bit 1 đưa vào thương
• số dư riêng phần -= số chia
•Lặp lại
54
Phép chia
Chia 2 số không dấu
•Ban đầu
• Thanh ghi A = 0
• Thanh ghi M = số chia
• Thanh ghi Q = số bị chia
•Kết quả
• Thương => thanh ghi Q
• Phần dư => thanh ghi A
•giả định số chia < số bị chia
55
Phép chia
Chia 2 số không dấu
VD: 7:3 = 2 dư 1
56
Phép chia
Chia 2 số có dấu
Bước 1: Chuyển số bị chia và số chia thành số dương tương
ứng
Bước 2: Sử dụng giải thuật chia không dấu để chia hai số
dương ta được thương và số dư đều dương
Bước 3: Hiệu chỉnh dấu của kết quả theo bảng sau
57
ĐẠI HỌC BÁCH KHOA HÀ NỘI
HANOI UNIVERSITY OF SCIENCE AND TECHNOLOGY
VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC
Chương 3
3.1. Biểu diễn số nguyên (Integer Representation)
3.2. Các phép tính với số nguyên (Integer Arithmetic)
3.3. Biểu diễn số dấu phẩy động (Floating-Point Representation)
3.4. Các phép tính dấu phẩy động (Floating-Point Arithmetic)
58
Số dấu phẩy động
Số nguyên bù 2: dạng fix point
Số thập phân dạng fixpoint: X ( 2) xn ...x1 x0 , x1...x m xi 0,1
Vấn đề
•Biểu diễn số: số rất lớn, hoặc số có phần thập phân rất nhỏ
•Sai số tính toán
59
Số dấu phẩy động
Số thập phân scientific
976,000,000,000,000 = 9.76 * 1014
0.0000000000000976 = 9.76 * 10-14
Tổng quát:
: Phần dấu
M: Định trị (Mantissa)
R: Cơ số (Radix)
E: Phần mũ (Exponent)
60
Số dấu phẩy động
Áp dụng cho hệ nhị phân
•1 bit dấu
•e bit mũ (biểu diễn dạng bias - số dịch)
để ý: cơ số không cần biểu diễn (R=2)
•s bit định trị
•VD 32 bit:
X ( 2 ) xn ...x1 x0 , x1...x m xi 0,1
X xn 2 n xn 1 2 n 1 ... x1 21 x0 20 x1 2 1 ... x m 2 m
61
Số dấu phẩy động
Chuẩn IEE754-2008
Cơ số ngầm định R=2
•32 bit
• exp: 8 bit
• M: 23 bit
•64 bit
• exp: 11 bit
• M: 52 bit
•128 bit
• exp: 15 bit
• M: 112 bit
62
Số dấu phẩy động
Chuẩn IEE754-2008
Thông số
cơ bản
63
Số dấu phẩy động
Dạng 32 bit IEE754-2008
S: bit dấu
•S=0 => Số dương
•S=1 => Số âm
phần mũ: được biểu diễn là số dịch (bias) 127
•nếu số mũ thực tế là E: phần mũ e=E+127 => giá trị mũ E = e127
phần định trị: chỉ phần lẻ của phần định trị M
•M=1.m
64
Số dấu phẩy động
Dạng 32 bit IEE754-2008
Dải giá trị dạng 32 bit
Từ (2 2 23)x2+128 đến 2 127 với số âm
và từ 2 127 đến (2 2 23) x 2+128 với số dương
65
Số dấu phẩy động
Dạng 32 bit IEE754-2008
Ví dụ
Xác định số thực (cơ số 10) của
•X=1100 0001 0101 0110 0000 0000 0000 0000
•bit dấu s=1 => Số âm
•e=1000 00102=13010 => E=130-127=3 => phần mũ 23
•M=1+(2-1 +2-3 +2-5 +2-6 ) = 1.671875
•X = 1.671875 x 23 = 13.375 2
3
66
Số dấu phẩy động
Dạng 32 bit IEE754-2008
Ví dụ
Biễu diễn 32 bit fp cho số thực X=27.75
•Chuyển sang nhị phân
phần nguyên: 27=11011 ; phần lẻ: .75 = .11
=> X= 11011.11
chuẩn hóa: X= 11011.11 = 1.101111 x 24
•bit dấu s=1
•mũ: E=4 => e=131 = 100000112
•định trị m = 101111
67
Số dấu phẩy động
Các qui ước đặc biệt
Các bit của e và m bằng 0 thì
Các bit của e và m bằng 1 thì
Các bit của e bằng 1, m có ít nhất 1 bit bằng 1 thì nó không biểu
diễn cho số nào (NAN- not a number)
Mật độ số
68
Số dấu phẩy động
Dạng 64 bit
S là bit dấu: 1 bit
e (11 bit) được biểu diễn là số dịch 1023 của phần mũ
•e=E+1023-> Phẫn mũ E=e-1023
m (52 bit) là phần lẻ của phần định trị M
•M=1.m
•
Giải biểu diễn:
-(2-2-52)x2+1024 đến -2-1023; 2-1023 đến (2-2-52)x2+1023
69
Số dấu phẩy động
Dạng 128 bit
S là bit dấu: 1 bit
e (15 bit) được biểu diễn là số dịch 16383 của phần mũ
•e=E+16383-> Phẫn mũ E=e-16383
m (112 bit) là phẩn lẻ của phần định trị M
•M=1.m
•
Giải biểu diễn:
-(2-2-112)x2+16384 đến -2-163833; 2-16383 đến (2-2-112)x2+16384
70
ĐẠI HỌC BÁCH KHOA HÀ NỘI
HANOI UNIVERSITY OF SCIENCE AND TECHNOLOGY
VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC
Chương 3
3.1. Biểu diễn số nguyên (Integer Representation)
3.2. Các phép tính với số nguyên (Integer Arithmetic)
3.3. Biểu diễn số dấu phẩy động (Floating-Point Representation)
3.4. Các phép tính dấu phẩy động (Floating-Point Arithmetic)
71
Thực hiện các phép toán dấu phẩy động
giả sử mũ exponent:
72
Thực hiện các phép toán dấu phẩy động
giả sử mũ exponent:
73
Tình huống tràn số
Có thể tràn upper hoặc lower
Có thể tràn ở phần định trị hoặc phần mũ
Tràn trên số mũ (Exponent Overflow)
Tràn dưới số mũ (Exponent Underflow)
Tràn trên phần định trị (Mantissa Overflown)
Tràn dưới phần định trị (Mantissa Underflow)
Các số bị mất ở bên phải phần định trị khi hiệu chỉnh phần
định trị=> Làm tròn
74
Phép cộng/ trừ dấu phẩy động
Kiểm tra xem một trong các số hạng có bằng 0 hay không
Qui đồng mũ, bằng cách hiệu chỉnh phần định trị
Cộng/trừ phần định trị
Chuẩn hóa kết quả (Hiệu chỉnh phần định trị và mũ)
75
Phép cộng/ trừ dấu phẩy động
• Kiểm tra xem một trong các số hạng có bằng 0 hay không
• Qui đồng mũ, bằng cách hiệu chỉnh phần định trị
• Cộng/trừ phần định trị
• Chuẩn hóa kết quả (Hiệu chỉnh phần định trị và mũ)
76
Phép nhân
số dấu phẩy động
•Cộng mũ
• cộng mũ
• hiệu chỉnh bias
• kiểm tra tràn
•Nhân định trị
•Chuẩn hóa, làm tròn
77
Phép chia
số dấu phẩy động
•Kiểm tra 0
• số chia
• số bị chia
•Trừ số mũ
• kiểm tra tràn
•Chia phần định trị
•Chuẩn hóa và làm tròn
×
78
Bit dự phòng - Guard bits
Khi biến đổi về cùng mũ => định trị dịch phải => mất 1 số bit
giá trị => giảm độ chính xác
Có thể dùng bit dự phòng
79