TH028 – Kiến trúc máy tính và hợp ngữ
Bài 2. Biểu diễn số nguyên
Lê Trí Anh
Bài giảng có sử dụng tư liệu từ trang />Mục tiêu
• Sau bài này, SV có khả năng:
– Mô tả cách biểu diễn số nguyên không dấu và
có dấu ở dạng số nhị phân bù 2
– Chuyển đổi qua lại giữa các hệ cơ số 2,10,16
–
Mô
tả
cách
thực
hiện
những
phép
toán
số
học
LTA08
–
Mô
tả
cách
thực
hiện
những
phép
toán
số
học
Giá trị & biểu diễn
• Giả sử không dùng các con số làm sao để
diễn tả một lượng nào đó ?
• Điều gì xảy ra nếu tất cả mọi người đều
đồng ý thay số 0 bằng chữ z ?
LTA08
• Cái gì là cơ sở chung của các hệ thống số
1,2,3,4…. và I,II,III,IV,… ?
Hệ cơ số 10
A = 123 = 100 + 20 + 3 = 1.10
2
+ 2.10
1
+ 3.10
0
x
n-1
…x
1
x
0
= x
n-1
.q
n-1
+ … + x
1
.q
1
+ x
0
.q
0
Tổng quát số hệ cơ số q
mỗi chữ số x
i
lấy từ tập X có q phần tử
LTA08
q=2, X={0,1} : hệ nhị phân (binary)
q=8, X={0,1,2, 7} : hệ bát phân (octal)
q=10, X={0,1,2,…9} : hệ thập phân (decimal)
q=16, X={0,1,2, 9,A,B, F} : hệ thập lục phân (hexadecimal)
A = 123 d = 01111011 b = 173 o = 7B h
Hệ nhị phân
• được dùng nhiều trong máy tính
• n gọi là chiều dài bit của số đó
• bit trái nhất x
n-1
là bit có giá trị nhất MSB
x
n-1
…x
1
x
0
= x
n-1
.2
n-1
+ … + x
1
.2
1
+ x
0
.2
0
Phạm vi lưu trữ: từ 0 đến 2
n
-1
LTA08
• bit phải nhất x
0
là bit ít giá trị nhất LSB
Để chuyển đổi từ hệ 2 sang hệ 16,
chỉ cần gom từng nhóm 4 bit
Ví dụ: A = 01111011 b
4 bit cuối 1011b = Bh
4 bit đầu 0111b = 7h
Vậy A = 7Bh
0000 – 0 1000 – 8
0001 – 1 1001 – 9
0010 – 2 1010 – A
0011 – 3 1011 – B
0100 – 4 1100 – C
0101 – 5 1101 – D
0110 – 6 1110 – E
0111 – 7 1111 – F
BIG IDEA: Bits can represent anything!!
• Characters?
– 26 letters 5 bits (2
5
= 32)
– upper/lower case + punctuation 7 bits (in 8)
(“ASCII”)
– all the world’s languages 8,16,32 bits (“Unicode”)
LTA08
• Logical values?
0 False, 1 True
• colors ? Ex:
• locations / addresses? commands?
• MEMORIZE: N bits at most 2
N
things
Red (00) Green (01) Blue (11)
Biểu diễn số âm
x
n-1
…x
1
x
0
= x
n-1
.(-2
n-1
)+ x
n-2
.2
n-2
+ … + x
1
.2
1
+ x
0
.2
0
Phạm vi lưu trữ: từ -2
n-1
đến 2
n-1
-1
Ví dụ
Vd: +123 = 01111011b
-123 = 10000101b
0 = 00000000b
-
1 = 11111111b
-
1 = 11111111b
-2 = 11111110b
-3 = 11111101b
-127 = 10000001b
-128 = 10000000b
Phép dịch bit và phép quay
• Shift left (SHL)
– Chuyển tất cả các bit sang trái, đánh mất bit trái nhất,
thêm 0 ở bit phải nhất
• Shift right (SHR)
– Chuyển tất cả các bit sang phải, đánh mất bit phải
nhất, thêm 0 ở bit trái nhất
11001010 10010100
10010101 01001010
LTA08
nhất, thêm 0 ở bit trái nhất
• Quay trái (ROL)
– Chuyển tất cả các bit sang trái, bit trái nhất thành bit
phải nhất
• Quay phải (ROR)
– Chuyển tất cả các bit sang phải, bit phải nhất thành
bit trái nhất
10010101 11001010
11001010 10010101
AND, OR, NOT, XOR
• Các phép này giống như các phép toán
logic, được thực hiện trên từng bit
AND 0 1
0 0 0
1 0 1
OR 0 1
0 0 1
1 1 1
XOR 0 1
0 0 1
1 1 0
0 1
NOT 1 0
LTA08
1 0 1
1 1 1
1 1 0
11010011
00001111
AND
00000011
00000011
01100000
OR
01100011
01100011
01100011
XOR
00000000
NOT 11010011
= 00101100
Ví dụ
X = 00001000 b = 8 d
X shl 2 = 00100000 b = 32 d
(X shl 2) or X = 00101000 b = 40 d
Y = 01001010 b = 74 d
((Y and 0Fh) shl 4) = 10100000
or
((Y and F0h) shr 4) = 00000100
= 10100100 b = 164 d = -92d
Phép lấy đối
Để có số đối, ta lấy NOT sau đó cộng vào 1 đơn vị
123 = 01111011
NOT(123) = 10000100
+ 1
+ 1
-123 =10000101
NOT(0) = 11111111
+ 1
-0 = 100000000
Số 1 sẽ bị mất
do độ dài bit là 8
Phép cộng
Phép trừ
Phép nhân
1011
x 1101
1011
0000
1011
1011
= 11
= 13
1011
x 1101
00000000
+ 1011
00001011
+ 0000
1011
10001111
= 143
+ 0000
00001011
+ 1011
00110111
+ 1011
10001111
0 0 0 0 0 1 1 0 1
1 0 1 1
0 1 0 1 1 1 1 00
M =
C A Q
Xét bit cuối
của Q
0 1 0 1 1 1 1 0 1
1 0 1 1
M =
bằng 1 : cộng M
dịch phải
bằng 0
dịch phải
bằng 1 : cộng M
0 0 1 0 1 1 1 10
dịch phải
bằng 1 : cộng M
1 0 1 1
M =
0 1 1 0 1 1 1 1 1
dịch phải
0 0 1 1 0 1 1 1 1
bằng 1 : cộng M
1 0 1 1
M =
1 0 0 0 1 1 1 1 1
0 1 0 0 0 1 1 1 1
dịch phải
Thuật toán nhân
[C,A] 0
M số thứ hai
Q số thứ nhất
k n
Lặp khi k > 0
{
{
nếu bit cuối của Q = 1 thì
[C,A]A+M
dịch phải [C,A,Q]
k = k - 1
}
C đóng vai trò bit nhớ
[C,A,Q] coi như một thanh ghi ghép gồm 2n+1 bit
[C,A] coi như một thanh ghi ghép gồm n+1 bit
Cải tiến
A 0
Q
-1
0
M số thứ hai
Q số thứ nhất
k n
Lặp khi k > 0
Ý tưởng là thay thế
một dãy liên tiếp các
bit 1 bằng một hiệu
dạng 2
a
-2
b
Cải tiến này cho
phép thuật toán
chạy được với số có
Lặp khi k > 0
{
nếu 2 bit cuối Q
0
Q
-1
{
= 10 thì AA-M
= 01 thì AA+M
}
dịch phải số học A,Q,Q
-1
k = k - 1
}
chạy được với số có
dấu
Q
i
Q
i-1
A thay đổi
00 không thay đổi
01 A=A+M
10 A=A-M
11 không thay đổi
Cơ sở của thuật toán
Nghĩa là tại bước thứ i thì A = (A + (Q
i-1
-Q
i
)M)
Kết hợp với phép dịch phải (thực chất là nhân đôi của giá
trị sắp cộng thêm ở bước sau) ta có
Bước 0: A = (0 + (Q
-1
-Q
0
).M)
Bước 1: A = (0 + (Q
-1
-Q
0
).M + (Q
0
-Q
1
).M.2)
= M.(Q
-1
-Q
0
+ Q
0
.2-Q
1
.2)
Bước 2: A = (M.(Q
-1
-Q
0
+ Q
0
.2-Q
1
.2) + (Q
1
-Q
2
).M.2
2
)
= M.(Q
-1
-Q
0
+ Q
0
.2-Q
1
.2 + Q
1
.2
2
-Q
2
.2
2
)
Bước 3:
A = M.(Q
-1
-Q
0
+ Q
0
.2-Q
1
.2 + Q
1
.2
2
-Q
2
.2
2
+ Q
2
.2
3
-Q
3
.2
3
)
= M.(Q
-1
+Q
0
+Q
1
.2 + Q
2
.2
2
-Q
3
.2
3
)
Cơ sở của thuật toán
Bước n-1:
A = M.(Q
-1
+Q
0
+Q
1
.2 + Q
2
.2
2
+Q
3
.2
3
+…+Q
n-2
.2
n-2
-Q
n-1
.2
n-1
Vì Q
-1
=0 và Q
n-1
chính là bit xác định dấu nên phần
trong dấu ngoặc chính là Q
Vậy A = M.Q
Vậy A = M.Q
Ví dụ: n=4, M=7, Q=-3
A Q Q
-1
M
Khởi đầu 0000 1101 0 0111
Bước 0: A=A-M 1001 1101 0 0111
shift 1100 1110 1 0111
Bước 1: A=A+M 0011 1110 1 0111
Bước 1: A=A+M 0011 1110 1 0111
shift 0001 1111 0 0111
Bước 2: A=A-M 1010 1111 0 0111
shift 1101 0111 1 0111
Bước 3: shift 1110 1011 1 0111
Kết quả 11101011 = -21
Phép chia
A 0
Qsố bị chia
M số chia
k n
Lặp khi k > 0
{
{
dịch trái A,Q
AA-M
nếu A<0 thì Q
0
0 và AA+M
ngược lại thì Q
0
1
k = k - 1
}
Ví dụ
Kilo, Mega, Giga, Tera, Peta, Exa, Zetta, Yotta
• Common use prefixes (all SI, except K [= k in SI])
Name Abbr Factor SI size
Kilo K 2
10
= 1,024 10
3
= 1,000
Mega M 2
20
= 1,048,576 10
6
= 1,000,000
Giga G 2
30
= 1,073,741,824 10
9
= 1,000,000,000
Tera T 2
40
= 1,099,511,627,776 10
12
= 1,000,000,000,000
Peta P 2
50
= 1,125,899,906,842,624 10
15
= 1,000,000,000,000,000
Exa
E
2
60
=
1,152,921,504,606,846,976
10
18
= 1,000,000,000,000,000,000
LTA08
• Confusing! Common usage of “kilobyte” means
1024 bytes, but the “correct” SI value is 1000 bytes
• Hard Disk manufacturers & Telecommunications are the only
computing groups that use SI factors, so what is advertised as a
30 GB drive will actually only hold about 28 x 2
30
bytes, and a
1 Mbit/s connection transfers 10
6
bps.
Exa
E
2
60
=
1,152,921,504,606,846,976
10
18
= 1,000,000,000,000,000,000
Zetta Z 2
70
= 1,180,591,620,717,411,303,424 10
21
= 1,000,000,000,000,000,000,000
Yotta Y 2
80
= 1,208,925,819,614,629,174,706,176 10
24
= 1,000,000,000,000,000,000,000,000
physics.nist.gov/cuu/Units/binary.html
kibi, mebi, gibi, tebi, pebi, exbi, zebi, yobi
• New IEC Standard Prefixes [only to exbi officially]
Name Abbr Factor
kibi Ki 2
10
= 1,024
mebi Mi 2
20
= 1,048,576
gibi Gi 2
30
= 1,073,741,824
tebi Ti 2
40
= 1,099,511,627,776
pebi Pi 2
50
= 1,125,899,906,842,624
exbi
Ei
2
60
=
1,152,921,504,606,846,976
LTA08
• International Electrotechnical Commission (IEC) in 1999 introduced
these to specify binary quantities.
– Names come from shortened versions of the original SI prefixes
(same pronunciation) and bi is short for “binary”, but pronounced
“bee” :-(
– Now SI prefixes only have their base-10 meaning and never have
a base-2 meaning.
exbi
Ei
2
60
=
1,152,921,504,606,846,976
zebi Zi 2
70
= 1,180,591,620,717,411,303,424
yobi Yi 2
80
= 1,208,925,819,614,629,174,706,176
en.wikipedia.org/wiki/Binary_prefix