Tải bản đầy đủ (.pdf) (26 trang)

Bài 2 : Biểu diễn số nguyên docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (955.63 KB, 26 trang )

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


tả
cách
thực
hiện
những
phép
toán
số
học
LTA08


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ì AA-M
= 01 thì AA+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
Qsố bị chia
M  số chia
k  n
Lặp khi k > 0
{
{
dịch trái A,Q
AA-M
nếu A<0 thì Q
0
0 và AA+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

×