Tài liệu Giáo trình: Lập trình hợp ngữ - Pdf 91

GV. Vương Quốc Dũng
1
------
Giáo trình
Lập trình hợp
ngữ1
GV. Vương Quốc Dũng
Ch¬ng 1. MÔ HÌNH LẬP TRÌNH CỦA 8086
1.1. Giới thiệu chung về máy tính và sơ đồ cấu trúc của IBM-PC
1.1.1. Giới thiệu chung về máy tính:
* Máy tính ngày nay là máy tính số, thực chất là thiết bị điện tử thực hiện:
Nhận thông tin vào đã dược số hóa.
Xử lý thông tin theo dãy các lệnh nhớ sẵn bên trong.
Đưa thông tin ra.
Dãy các lệnh nhớ sẵn bên trong chính là các chương trình.
Máy tính gồm 2 phần:
Phần cứng (Hardware): Gồm các linh kiện vật lý.
Phần mềm (Software): Gồm các chương trình và dữ liệu.
* Các loại máy tính:
Máy tính điện tử đầu tiên ra đời vào năm 1946, rất cồng kềnh, nó chiếm khoảng
1500 m
2
. Hiện nay người ta chia máy tính ra làm 2 nhóm lớn:
+ Máy vi tính (MicroComputer):
Ra đời những năm 70 và phát triển rầm rộ vào những năm 80.
Đặc điểm: Máy tính được chế tạo ra cho 1 người sử dụng, còn gọi là máy tính cá
nhân (Personal Computer - PC).
Máy vi tính chia làm 4 loại:

Hệ đếm thập phân
Trong cuộc sống hằng ngày chúng ta dùng hệ cơ số mười hoặc nói ngắn gọn là hệ mười
(Decimal number system, viết tắt là hệ D) để biểu diễn các giá trị số. điều này là rất tự
nhiên vì từ xa xưa một con người bình thường đã biết dùng 10 ngón tay để đếm. Trong hệ
thống này, chúng ta dùng tổ hợp của các chữ số 0..9 để biểu diễn các giá trị số, đi kèm theo
tập hợp có thể dùng thêm chữ D hoặc d ở cuối để chỉ ra rằng đó là hệ 10 (một chữ số
không có ký hiệu chữ đi kèm ở sau thì ta ngầm hiểu đó là số hệ 10)
Hệ đếm nhị phân
Số nhị phân hay còn gọi là số hệ hai là hệ đếm dùng trong máy tính. Một số hệ hai gồm
các bit được đánh dấu bằng chữ B hoặc b đi kèm ở cuối để phân biệt với các hệ khác khi ta
làm việc cùng một lúc với các hệ đếm khác nhau. Một cụm 4 bit sẽ tạo thành 1 nibble, một
cụm 8 bit tạo thành 1 byte, một cụm 16 bit tạo thành 1 word (một từ), một cụm 32 bit tạo
thành 1 double word (từ kép). Chữ số dầu tiên bên trái trong dãy các số hệ hai gọi là bit có
ý nghĩa lớn nhất (Most significant bit – MSB), còn bit cuối cùng bên phải (bit 0) trong dãy
gọi là à bit có ý nghĩa bé nhất (Least significant bit – LSB). Ứng với thứ tự đếm 1, 2, 3 …
ở hệ 10 thì ở hệ hai ta có 1, 10, 11, …
nibble
Byte
Word
Double Word
Hình 1.1. Các đơn vị đo độ dài của số hệ hai dẫn xuất từ bit
Hệ đếm thập lục phân
3
15 0
3 0
7 0
31 0
GV. Vương Quốc Dũng
Nếu ta dùng số hệ hai để biểu diễn các số có giá trị lớn, ta sẽ gặp điều bất tiện là số hệ
hai thu được quá dài. Ví dụ để biểu diễn số 255 ta cần 8 bit viết như sau:

x m
1
+ m
0
+ a
-1
x m
-1
+ … + a
-n+k
x m
-n+k
(1)
Đổi số hệ 2 sang hệ 10
Muốn đổi một số từ hệ 2 sang số hệ 10 tương ứng, ta áp dụng công thức (1) ở trên với
cơ số a = 2, có nghĩa là ta chỉ cần tính các giá trị 2
i
tương ứng với các chữ số khác 0 thứ i
của số hệ 2 rồi cộng chúng lại.
Ví dụ: 10111.11b = 2
4
+ 2
2
+ 2
1
+ 1 + 2
-1
+ 2
-2
= 25.75

đạt tới 2
0
và ghi lại các giá trị 0 hoặc 1 cho chữ số hệ hai thứ i tùy theo quan hệ giữa số dư
và lũy thức tương ứng.
= 1 khi số dư ≥ 2
i

= 0 khi số dư ≤ 2
i
Ví dụ đổi 34 sang số hệ 2:
- Các giá trị 2
i
cần tính đến (2
5
= 32 là giá trị 2
x
sát dưới nhất so với 34):
2
5
2
4
2
3
2
2
2
1
2
0


0 1
1
GV. Vương Quốc Dũng
Ví dụ đổi 0.125 ra số hệ hai
0.125 x 2 = 0 .250
0.250 x 2 = 0 .500
0.500 x2 = 1 .000
Kết quả ta thu được số nhị phân: 0.001b (như thứ tự phần được đóng khung)
Kết hợp 2 ví dụ ta có ví dụ đổi số 34.125 ra số nhị phân, kết quả là 100010.001b
Đổi số hệ 10 về hệ 16
Thực hiện tương tự như đổi số hệ 10 về số hệ 2, ta thực hiện chia kết quả phần thương
liên tiếp cho 16, lấy giá trị phần dư sắp xếp theo thứ tự ngược lại…
Tóm lại: để việc chuyển đổi thực hiện nhanh chóng, tránh thực hiện quá nhiều phép
chia, để đổi một số hệ mười ra số hệ hai, ta thực hiện thao thứ tự:
Số hệ mười ---> số hệ mười sáu ---> số hệ hai ---> số hệ tám
Vì việc thực hiện đổi số hệ mười sáu về số hệ hai rất đơn giản, chỉ việc đổi từng chữ số
hệ 16 ra hệ 2 rồi ghép chúng lại theo thứ tự. Từ số hệ 2 về số hệ 8 ta lấy từng cụm 3 bit
một bắt đầu từ LSB để đổi ra các số từ 0 ÷ 7 sau đó ghép đúng theo thứ tự.
Ví dụ: đổi số 125 ra hệ 16, ta lấy 125 chia 16 được 7 dư 13 = C, nhớ C. Lấy 7 chia 16
được 0, dư 7. Kết quả ta được 7Ch
Trong đó: Ch = 1101b
7h = 0111b
Ghép lại ta được số nhị phân: 01111101b = 175 (8)
1.1.2.3. Các phép toán số học với số hệ hai
Phép cộng
Phép cộng các số hệ hai giống như khi ta thực hiện với số hệ mười. Quy tắc phép cộng
số hệ 2 được chỉ ra trong bảng 1.1.
Bảng 1.1. y = a + b
A b y Nhớ
0 0 0 0

1 0 1 0
1 1 0 0
Số bù 2
Trong thực tế, việc thực hiện phép trừ chính là cộng số bị trừ với số đảo dấu của số trừ,
điều này cũng được ứng dụng trong các khối tính toán số học của máy tính để tận dụng các
bộ cộng đã có sẵn. Vậy số đảo dấu của số trừ chính là một số âm. Khi thực hiện phép trừ
trong máy tính cũng tất yếu sẽ có kết quả là một số âm. Vấn đề đặt ra đối với số hệ hai là ta
phải biểu diễn số âm nhị phân như thế nào sao cho thích hợp để đáp ứng được việc sử
7
GV. Vương Quốc Dũng
dụng các bộ cộng trong máy tính. Việc sử dụng số bù 2 chính là cách biểu diễn số có dấu
trong máy tính ngày nay.
Vậy số bù 2 của số A chính là số đảo dấu của số A đó. Ví dụ số bù 2 của 5 là -5 và
ngược lại, số bù 2 của –5 là 5.
Sau đây là phương pháp xây dựng số bù 2:
- Trước hết ta xây dựng số bù 1 của A. Số bù một của A chính là số nhận được khi ta
đảo tất cả các bit của số A.
Ví dụ 5 = 00000101b, số bù 1 của 5 là 11111010b
- Số bù 2 của A = số bù 1 của A + 1
Ví dụ: số bù 2 của 5 = số bù 1 của 5 + 1 = 11111010b + 1 = 11111011b = -5
Bảng 1.4. Biểu diễn các số theo số hệ 2, số hệ hai có dấu và số bù 2
Số hệ hai 8 bit Số hệ mười tương
đương
Số hệ mười tính
theo số bù 2
0000 0000 0 0
0000 0001 1 +1
0000 0010 2 +2
… … …
0111 1101 125 +125

0000 Thành phần 4 của tổng tích lũy
0110110 Tổng tích lũy bằng 54
Độ dài cực đại của kết quả trong trường hợp này là 8 bit. Nếu ta nhân các số 8 bit (hoặc
16) bit thì độ dài cực đại của kết quả là 16 bit (hoặc 32 bit). Mỗi lần nhân một bit khác 0
của số nhân với số bị nhân, ta thu được chính số bị nhân, nếu dịch trái nó một số lần tương
ứng với cị trí các bit khác 0, ta tạo ra 1 thành phần của tổng tích lũy. Tổng của các thành
phần như trên là kết quả của phép nhân.
Phân tích quá trình trên, ta thấy phép nhân có thể thực hiện theo thuật toán cộng và dịch
như sau:
- Thành phần đầu tiên của tổng tích lũy thu được là tích của LSB trong số nhân với số
bị nhân. Nếu LSB = 0 thì thành phần này bằng 0, Nếu LSB = 1 thì thành phần này =
chính số bị nhân.
- Mỗi thành phần thứ i tiếp theo của tổng tích lũy sẽ tính được bằng cách tương tự,
nhưng phải dịch trái đi i bit (có thể bỏ qua các thành phần = 0)
- Tổng của các thành phần là tích cần tìm.
Để minh họa thuật toán trên, ta dùng luôn nó để rút gọn ví dụ đã làm ở trên:
1001 Số bị nhân = 9

x
0110 Số nhân = 6
1001 Số bị nhân dịch trái 1 lần
1001 Số bị nhân dịch trái 2 lần
0110110 Tổng tích lũy bằng 54
Trong máy tính, phép nhân được thực hiện bởi bộ cộng và bộ dịch trái theo như thuật
toán cộng và dịch vừa trình bày.
Phép chia
Phép chia là phép tính ngược của phép nhân. Từ đó suy ra phép chia có thể thực hiện
bằng các phép trừ và phép dịch liên tiếp cho tới khi không thể trừ được nữa (do không còn
gì để trừ hoặc số bị trừ nhỏ hơn số chia). Sau đây là thuật toán thực hiện phép chia thông
qua ví dụ cụ thể:

cho số chia) thì bit tương ứng của thương bằng 0.
4. Số K = số K dịch phải đi 1 bit, và làm lại bước 3 cho đến khi nhận được H = 0 (chia
hết) hoặc H số chia (chia còn dư).
5. Kết quả của thương số là các bit 0, 1 ghép theo trình tự các bit tương ứng của
thương.
Ví dụ: 103/6 = 17 dư 1. Thực hiện phép chia này ở hệ 2 theo thuật trên.
Ta có: Số chia = 00000110b
Số bù 2 của số chia = 11111010b
Số bị chia = 01100111b = 0000000001100111b (mở rộng bit dấu)
10
GV. Vương Quốc Dũng
Thuật toán chia số nhị phân số 103/6:
Tên toán hạng, thao tác Giá trị Thương
Q = Số bị chia 0000000001100111
K = Số bù 2 của số chia << 8 bit 1111101000000000
H = Q + K 1111101001100111 0
Q 0000000001100111
K = K >> 1 bit (giữ nguyên bit dấu) 1111110100000000
H = Q + K 1111110111100111 0
Q 0000000001100111
K = K >> 1 bit (giữ nguyên bit dấu) 1111111010000000
H = Q + K 1111111011100111 0
Q 0000000001100111
K = K >> 1 bit (giữ nguyên bit dấu) 1111111101000000
H = Q + K 1111111110100111 0
Q 0000000001100111
K = K >> 1 bit (giữ nguyên bit dấu) 1111111110100000
H = Q + K > 6 0000000000000111 1
Q = H 0000000000000111
K = K >> 1 bit (giữ nguyên bit dấu) 1111111111010000

Số nguyên có dấu
Số nguyên có dấu (signed integer) có thể là số dương hoặc âm. MSB được dùng để biểu
diễn dấu của số, MSB = 1 cho biết đó là số âm, MSB = 0 cho biết đó là số dương. Các số
nguyên có dấu được lưu trữ trong máy tính dưới dạng số bù 2.
Một ưu điểm của việc biểu diễn số âm trong máy tính bằng số bù 2 là phép trừ có thể
thực hiện bằng phương pháp lấy bù và phép cộng, các vi mạch thực hiện phép cộng và bù
các bit được con người thiết kế tương đối dễ dàng.
Biểu diễn số thực
Trong máy tính các số thực được biểu diễn và được viết dưới dạng dấu phảy
động (dạng có phần số mũ). Còn trong thực tế con người biểu diễn số thực ở 2
dạng:
- Dạng bình thường: 3.14, 3.0, -24.1234567, - 0.0002
Việc dùng dấu chấm trong cách viết số thực là cách viết của các nước Anh,
Mỹ.
- Dạng viết có phần mũ.
Để hiện thị được ra màn hình một số thực dạng bình thường hay dạng viết dấu
phảy động, phải thông qua giả lập bằng phần mềm.
Các dạng số dấu chấm động:
Đổi phần thập phân thành dạng nhị phân
Giả sử có phần thập phân là 0,d1d2d3…dn. Có dạng biểu diễn nhị phân là
0,b1b2b3…bm.
Bit b1 tương ứng với phần nguyên của tích: 0,d1d2d3…dn*2
Sau đây là thuật toán để đổi phần thập phân ra dạng nhị phân m chữ sô
X chứa phần thập phân cần đổi
12
GV. Vương Quốc Dũng
FOR i = 1 to m DO
Begin
Y = X * 2
X = phần thập phân của Y

trị. Gồm cả phần nguyên của phần định trị. Bias = 16383.
Ta xem cụ thể một loại số chấm động kiểu short real sau để thấy rõ.
Số dấu chấm (phảy) động kiểu short real
. Để biểu diễn số 0,0001b chúng ta có phần định trị là 1 và phần mũ là -4, Sau
khi cộng thêm 127, chúng ta nhận được phần mũ là 123 = 011111101b
Hình sau mô tả sắp xếp của một dấu phảy động 32 bits, trong đó S là một bit
dấu, exponent (phần mũ) chiếm 8 bits, mantissa (phần định trị) chiếm 23 bits
31 30 23 22 0
S Exponent Mantissa
Hình 1.1. Biểu diễn số dấu chấm (phảy) động 32 bit trong máy tính
13
GV. Vương Quốc Dũng
Ví dụ biểu diễn số 4,9 ở dạng dấu phảy động 32 bit (short real):
Áp dụng cách biểu diễn số dấu chấm động ở hình 1.1, chúng ta có:
4.9 = 100.1110011001100…
Sau khi chuẩn hóa ta có phần định trị là: 1.00111001100110011001100 và phần mũ
là 2. Cộng thêm bias vào phần mũ, ta nhận được 129 = 10000001b. Do phần nguyên trong
phần định trị không được lưu nên ta được số biểu diễn trên máy cho giá trị 4.9 là:
0 10000001 00111001100110011001100 hay bằng 409CCCCCh
Ví dụ biểu diễn số -0.75 ở dạng dấu phảy động 32 bit (short real):
Chúng ta có biểu diễn nhị phân của 0.75 = 0.11b, do đó –0.75 = -0.11b
Phần định trị sẽ được chuẩn hóa bằng 1.1
Phần mũ là -1, cộng với bias = 127, ta được phần mũ là 126 = 01111110b
Phần nguyên không được lưu nên ta có dạng short real của -0.75 là
1 01111110 10000000000000000000000 hay bằng BF400000h
Biểu diễn ký tự
Không phải mọi số liệu mà máy tính xử lý dều là các con sô. các thiết bị ngoại vi như
màn hình hay máy in đều so xu hướng làm việc với các ký tự. Ngoài ra các chương trình
như chương trình xử lý văn bản chuyên làm việc với dữ liệu kiểu ký tự. Cũng như tất cả
các dữ liệu khác, các ký tự cũng cần phải được mã hóa thành dạng nhị phân để máy tính có

80
`
96
p
112
1
1
<DC1>
17
!
33
1
49
A
65
Q
81
a
97
q
113
2
2
<DC2>
18

34
2
50
B

36
4
52
D
68
T
84
d
100
t
116
5

5
21
%
37
5
53
E
69
U
85
e
101
u
117
6

6

8
<BS>
8
<CAN>
24
(
40
8
56
H
72
X
88
h
104
x
120
9
<HT>
9
<EM>
25
)
41
9
57
I
73
Y
89

75
[
91
k
107
{
123
15
GV. Vng Quc Dng
C
<FF>
12
<FS>
28
,
44
<
60
L
76
\
92
l
108
|
124
D
<CR>
13
29

15
31
/
47
?
63
O
79
_
95
o
111
<DEL>
127
Bng 2.7. Bng mó ASCII vi 128 ký t na sau.
Hexa-
decimal
8 9 A B C D E F
0

128

144

160 176 192 208

224

112
1


243
4

132

148

164 180 196 212

228

244
5

133
ũ
149

165 181 197 213

229

245
6

134

150
ê


153 169 185 201 217

233

249
A

138
ĩ
154
ơ
170
186 202 218

234

250
16
GV. Vương Quốc Dũng
B
ï
139
¢
155
½
171 187 203 219
δ
235



254
F
Ă
143
ƒ
159
»
175 191 207 223

239
255
Vì mỗi ký tự ASCII được mã hóa bằng 7 bit nên mã của một ký tự chứa vừa vặn trong
một byte với MSB = 0. Các ký tự in được có thể hiển thị ra màn hình hoặc ra máy in, trong
khi đó các ký tự điều khiển lại dùng để điều khiển các thiết bị này. Ví dụ để hiển thị ký tự
A trên màn hình, chương trình sẽ gửi mã ASCII 41h đến màn hình, còn để lùi con trỏ trở
lại đầu dòng, chương trình sẽ gửi mã ASCII có giá trị 13 (0Dh – mã ASCII của ký tự điều
khiển CR) đến màn hình.
Ngoài ra máy tính cũng hiển thị một số ký tự đặc biệt ứng với một số mã ASCII không
in được. Như ta sẽ thấy bộ điều khiển màn hình của IBM PC có thể hiển thị một bộ ký tự
mở rộng 256 ký tự (bảng 2.7)
1.1.2.5. Mã hai byte
Unicode là viết tắt của từ Universal Code, tức là bộ mã vạn năng, có thể dùng để mã hoá
tất cả các ngôn ngữ chính trên toàn thế giới (trong đó có tiếng Việt), được dùng chủ yếu
trong trao đổi hiển thị dữ liệu trong các hệ thống công nghệ thông tin. Unicode còn là cộng
động của một số công ty hàng đầu trong lĩnh vực công nghệ thông tin như Microsoft, IBM,
Sun... được thành lập từ năm 1991 nhằm tạo ra một bộ mã dùng chung cho toàn thế giới.
Song song với tổ chức Unicode còn có tổ chức ISO (Tổ chức chuẩn quốc tế chính thống)
cũng nghiên cứu một bộ mã đa ngữ dùng trong CNTT là ISO /IEC 10646. Unicode và ISO
từ năm 1993 đã thống nhất cùng nhau phát triển và đồng nhất 2 bộ mã ở miền 16-Bit.

chương trình, nó trao đổi dữ liệu với bộ nhớ và các thiết bị vào ra.
Các thành phần cơ bản:
18
CPU
Bộ nhớ chính
Bus liên kết hệ thống
Hệ thống vào ra
(Bàn phím , màn hình, ổ đĩa, chuột, ...
và các mạch ghép nối)
GV. Vương Quốc Dũng
Đơn vị điều khiển (Control Unit): điều khiển hoạt động của CPU và các thành
phần khác của máy tính.
Đơn vị số học và logic (Arithmetic & Logic Unit - ALU): thực hiện các chức năng
xử lý dữ liệu.
Các thanh ghi: Là các ngăn nhớ đặc biệt nằm trong CPU để chứa các thông tin tạm
thời phục vụ cho quá trình thực hiện chương trình.
Bus bên trong: Dùng để kết nối và trao đổi thông tin giữa các thành phần với nhau.
Hệ thống nhớ:
Chức năng: Dùng để nhớ chương trình và dữ liệu.
Chương trình là những lệnh yêu cầu máy tính phải thực hiện.
Dữ liệu là những gì mà chương trình tác động vào.
Các thành phần cơ bản:
Bộ nhớ chính: (Main Memory): Là thành phần nhớ được nối trực tiếp với CPU và
được điều khiển bởi CPU. Các chương trình đang thực hiện phải nằm trong bộ nhớ
chính.
. Bộ nhớ chính gồm các ngăn nhớ và mỗi ngăn nhớ có 1 địa chỉ xác định,
các ngăn nhớ được tổ chức theo Byte.
. Bộ nhớ chính có tốc độ cao, dung lượng nhỏ. Gồm:
ROM (Read Only Memory): Chứa thông tin cố định trong hệ thống.
RAM (Random Access Memory): Bộ nhớ tạm thời.

Chỉ có Bus địa chỉ và Bus dữ liệu mới có khái niệm độ rộng.
Lý do tồn tại của các loại Bus:
- Bus địa chỉ:
. CPU muốn trao đổi dữ liệu với ngăn nhớ nào, với cổng vào ra nào thì cần
phải có Bus địa chỉ.
. Bus địa chỉ vận chuyển địa chỉ từ CPU đến bộ nhớ hay cổng vào ra để xác
định ngăn nhớ nào hay cổng vào ra nào cần trao đổi thông tin.
. Bus địa chỉ nói tổng quát gồm n đường dây A
0
÷ A
n-1
thì gọi độ rộng Bus
là n Bit và n Bit này được dùng để đánh địa chỉ, do đó có khả năng quản lý tối đa
2
n
địa chỉ ngăn nhớ hay 2
n
Byte nhớ (vì bộ nhớ chính quản lý theo Byte).
Ví dụ:
8088/8086: Bộ vi xử lý có n = 20  quản lý tối đa 2
20
Byte = 1MB
80286:n = 24  quản lý tối đa 2
24
Byte = 2
4
x 2

CPU
Bộ
nhớ
chính
Mạch
ghép nối
vào ra
Các thiết
bị vào ra
GV. Vương Quốc Dũng
8088/86: m = 8 tức là vận chuyển 1 lúc 1 Byte.
80286: m = 16 tức là vận chuyển 1 lúc 2 Byte.
80386/486: m = 32 tức là vận chuyển 1 lúc 4 Byte.
Pentum II: m = 64 tức là vận chuyển 1 lúc 8 Byte.
- Bus điều khiển:
. Là tập hợp các tín hiệu điều khiển hoặc là phát ra từ CPU để điều khiển bộ
nhớ hay hệ thống vào ra, hoặc là từ bộ nhớ hay hệ thống vào ra đến yêu cầu CPU.
1.2. Tổ chức các thanh ghi của vi xử lý 8086.
Để làm việc được thì trong CPU cần có các thanh ghi. Thanh ghi chính là bộ nhớ
có tốc độ truy nhập cực nhanh, dùng để lưu trữ các giá trị địa chỉ và dữ liệu phục
vụ cho nhiệm vụ điều khiển và xử lý dữ liệu. Trong 8086 có:
4 thanh ghi đoạn.
3 thanh ghi con trỏ và 2 thanh ghi chỉ số
4 thanh ghi đa năng.
1 thanh ghi cờ
1.2.1. Các thanh ghi đoạn:
Khối BIU đưa ra trên Bus địa chỉ 20 Bit địa chỉ, như vậy 8086 có khả năng
phân biệt được 2
20
= 1.048.576 = 1M ô nhớ = 1 Mbyte.

dữ liệu DS. Địa chỉ đầy đủ của 1 phần tử trong đoạn DS: DS : SI
. DI - Destination Index (Chỉ số đích): DI trỏ vào 1 dữ liệu nằm trong đoạn
dữ liệu DS. Địa chỉ đầy đủ cụ thể ứng với:
ES : DI
*Địa chỉ của các ô nhớ khác nằm trong đoạn được tính bằng cách cộng thêm
vào địa chỉ cơ sở 1 giá trị gọi là địa chỉ lệch hay độ lệch (địa chỉ offset /địa
chỉ tương đối). Độ lệch này được xác định bởi các thanh ghi 16 Bit khác
đóng vai trò thanh ghi lệch (offset register) - được nói rõ trong phần thanh
ghi con trỏ và chỉ số.
Cụ thể, để xác định địa chỉ vật lý 20 Bit của 1 ô nhớ cụ thể nào đó trong 1
đoạn bất kỳ, CPU 8086 phải dùng đến 2 thanh ghi 16 Bit (1 thanh ghi chứa
địa chỉ cơ sở, 1 thanh ghi chứa địa chỉ lệch). Từ nội dung của cặp thanh ghi
trên, tạo ra địa chỉ vật lý theo công thức sau:
Địa chỉ vật lý = thanh ghi đoạn *16 +thanh ghi lệch.
= segment * 16 + offset
Và địa chỉ logic được ký hiệu như sau:
Thanh ghi đoạn : thanh ghi lệch
Hay:
Segment : offset.
Địa chỉ kiểu Segment : offset là địa chỉ Logic vì nó tồn tại dưới dạng giá trị
của các thanh ghi cụ thể bên trong CPU. Khi cần thiết truy nhập ô nhớ nào đó,
CPU phải đổi địa chỉ logic này ra địa chỉ vật lý để rồi đưa lên Bus địa chỉ. Việc
chuyển đổi này do 1 bộ tạo địa chỉ thực hiện (Khối ∑ trong hình vẽ)
Riêng trong các lệnh thao tác với dữ liệu kiểu chuỗi thì cặp:
. ES:DI luôn ứng với phần tử thuộc chuỗi đích.
. DS:SI luôn ứng với phần tử thuộc chuỗi gốc (nguồn).
Ví dụ:
Cặp CS:IP sẽ chỉ ra địa chỉ của lệnh sắp thực hiện trong đoạn mã.
Nếu tại 1 thời điểm nào đó ta có: CS = F000h và IP = FFF0h thì:
địa chỉ logic CS : IP , tương ứng ta có địa chỉ vật lý:

cho bộ vi xử lý (các lệnh có điều kiện). Thanh ghi cờ gồm 16 Bit nhưng
người ta chỉ dùng hết 9 Bit của nó để làm các Bit cờ.
x x x x O D I T S Z x A x P x C
x : Bit không được định nghĩa.
Các cờ cụ thể:
. C hoặc CF (Carry Flag): Cờ nhớ.
CF = 1 khi có nhớ hoặc mượn từ MSB sang.
(MSB - Most Significant Bit: Bit có ý nghĩa nhất).
. P hoặc PF (Parity Flag): Cờ chẵn lẻ, phản ánh tính chẵn lẻ của tổng số Bit 1
trong kết quả.
PF = 1 khi tổng số Bit 1 trong kết quả là chẵn (even parity).
. A hoặc AF (Auxiliary Flag): Cờ nhớ phụ, rất có ý nghĩa khi ta làm việc với
1 số BCD.
AF = 1 khi có nhớ hoặc mượn từ 1 số BCD thấp (4 Bit thấp) sang 1 số
BCD cao (4 Bit cao).
. Z hoặc ZF (Zero Flag): Cờ Zero, ZF = 1 khi kết quả = 0.
. S hoặc SF (Sign Flag): Cờ dấu, SF = 1 khi kết quả âm.
23
GV. Vương Quốc Dũng
. O hoặc OF (Overflow Flag): Cờ tràn, OF = 1 khi kết quả là 1 số bù 2
vượt ra ngoài giớ hạn biểu diễn dành cho nó.
Trên là 6 Bit cờ trạng thái phản ánh các trạng thái khác nhau của kết quả
sau một thao tác nào đó. Chúng được lập hoặc xóa tùy theo điều kiện cụ thể
sau các thao tác của ALU. Ngoài ra 8086 còn có 3 cờ điều khiển (các cờ này
được lập, xóa bằng các lệnh riêng):
. T hoặc TF (Trap Flag): Cờ bẫy, TF = 1 khi CPU làm việc ở chế độ chạy
từng lệnh (Chế độ này dùng khi cần tìm lỗi của 1 chương trình).
. I hoặc IF (Interrupt enable Flag): Cờ cho phép ngắt, IF = 1 thì CPU cho
phép các yêu cầu ngắt (ngắt che được) được tác động.
. D hoặc DF (Direction Flag): Cờ hướng, DF = 1 khi CPU làm việc với 1

từ MSB sang)
do vậy: OF = CF ⊕ C
6,7
= 1
10000000 = - 128
+
10000001 = - 127
1 00000000 = 000 (Sai)

Carry Out Overflow
(Nhớ vào CF, xong không có
nhớ vào SF - Kết quả sai:
Tổng hai số âm bằng 1 số
dương)
ở đây: C
6,7
= 0 (không có nhớ
từ bit 6 lên bit 7)
CF = 1 (có nhớ từ
MSB sang)
24
CF b7 b6 AL b0
C6,7
GV. Vương Quốc Dũng
do vậy: OF = CF ⊕ C
6,7
= 1
1.3. Cơ chế quản lý bộ nhớ.
1.3.1. Tổng quan về hệ thống nhớ:
1.3.1.1. Các đặc trưng của hệ thống nhớ:

1.3.1.2. Mô hình phân cấp hệ thống nhớ:

25
Bộ vi xử lý (CPU)

Tập
thanh
ghi
Cache
L2
(Thứ cấp)
SRAM
Bộ nhớ
chính
Bộ nhớ
ngoài
DRAM
Cache
L1
(Sơ cấp)


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status