0% found this document useful (0 votes)
34 views79 pages

KTMT Bai 3

Số học máy tính trong kiến trúc máy tính

Uploaded by

vietvipvai003
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
34 views79 pages

KTMT Bai 3

Số học máy tính trong kiến trúc máy tính

Uploaded by

vietvipvai003
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 79

ĐẠ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 , x1...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 , x1...x m xi  0,1


X  xn 2 n  xn 1 2 n 1  ...  x1 21  x0 20  x1 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 = e127
 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

You might also like