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

Tài liệu Đề cương vi xử lý

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 (863.17 KB, 94 trang )

Trờng đại học s phạm kỹ thuật hng yên
Khoa Công nghệ Thông tin
WX







Giáo trình học phần
Vi xử lý
(Hệ Đại học)







Tài liệu lu hành nội bộ











Hng Yên 2005

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY

MỤC LỤC
Chương 1. BỘ VI XỬ LÝ 8086/8088 …………………………… ……………………2
1.1. Tổng quan về các bộ vi xử lý của Intel 2
1.2. Cấu trúc bộ vi xử lý 8086 3
1.2.1. Sơ đồ khối 3
1.2.2. Giải thích các thành phần trong sơ đồ 3
1.2.3. Một số khái niệm cơ bản 4
1.3. Tập thanh ghi của bộ vi xử lý 8086 5
1.3.1. Các thanh ghi dữ liệu 5
1.3.2. Các thanh ghi đoạn: CS, DS, ES, SS 6
1.3.3. Các thanh ghi con trỏ và chỉ số: SI, DI, SP, BP 6
1.3.4. Thanh ghi con trỏ lệnh: IP 7
1.3.5. Thanh ghi cờ 7
1.4. Tập lệnh của bộ vi xử lý 7
1.4.1. Sơ lược về tập lệnh của bộ vi xử lý 7
1.4.2. Tập lệnh của CPU 8
1.4.3. Nhóm lệnh di chuyển dữ liệu 8
1.4.4. Nhóm lệnh số học 10
1.4.5. Nhóm lệnh logic 11
1.4.6. Nhóm lệnh dịch chuyển và quay 12
1.4.7. Nhóm lệnh điều khiển rẽ nhánh 13
1.4.8. Nhóm lệnh vào ra cổng 14
1.4.9. Nhóm lệnh điều khiển 14
1.5. Chế độ địa chỉ của bộ vi xử lý 8086 14
1.5.1. Tổng quan 14

1.5.2. Các chế độ địa chỉ dữ liệu 15
1.5.3. Chế độ địa chỉ thanh ghi 15
1.5.4. Chế độ địa chỉ tức thì 15
1.5.5. Chế độ địa chỉ trực tiếp 15
1.5.6. Chế độ địa chỉ gián tiếp thanh ghi 16
1.5.7. Chế độ địa chỉ tương đối cơ sở(Base Relative Addressing) 16
1.5.8. Chế độ địa chỉ tương đối chỉ số(Indexed Relative Addressing) 17
1.5.9. Chế độ địa chỉ tương đối chỉ số cơ sở(Base Indexed Relative) 17
1.5.10. Bảng tóm tắt các chế độ địa chỉ 18
1.6. Phân tích mã lệnh mã máy 18
1.6.1. Khuôn dạng lệnh 18
1.6.2. Một số mã lệnh mã máy 20
1.6.3. Một số ví dụ minh họa 21
1.7. Lập trình và gỡ rối bằng DEBUG 22
1.7.1. Giới thiệu về lệnh của DEBUG 22
1.7.2. Lập trình bằng DEBUG 24
1.7.3. Gỡ rối chương trình bằng DEBUG 25
Chương 2. CÁC BỘ VI XỬ LÝ TIÊN TIẾN CỦA INTEL 26
2.1. Bộ vi xử lý 80286 26
2.1.1. Các thanh ghi 26
2.1.2. Tập lệnh 27

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY

2.2. Bộ vi xử lý 80386 28

2.2.1. Sơ đồ khối của 80386 28
2.2.2. Các thanh ghi 28
2.2.3. Quản lý bộ nhớ 30

2.2.4. Tập lệnh 32
2.3. Bộ vi xử lý 80486 32
2.3.1. Các phần tử xử lý CISC và RISC 32
2.3.2. Vi xử lý 80486 33
2.4. Các bộ vi xử lý Intel Pentium 35
2.4.1. Đặc điểm chung 35
2.4.2. Cấu trúc và tính năng 35
2.5. Bộ đồng xử lý toán 80x87 39
2.5.1. Sơ lược về các số thực 39
2.5.2. Cấu trúc của 8087 39
2.5.3. Tập lệnh của 8087 39
2.6. Cấu trúc và chức năng của 8087 39
2.6.1. Sơ đồ khối bên trong của 8087 39
2.6.2. Nối 8087 với CPU 42
2.7. Đồng xử lý 80287 42
Chương 3. CẤU TRÚC LẬP TRÌNH ASSEMBLY 43
3.1. Tổng quan về ngôn ngữ lập trình ASSEMBLY 43
3.1.1. Khái niệm 43
3.1.2. So sánh hợp ngữ với các ngôn ngữ bậc cao 43
3.2. Các đoạn trong một chương trình 44
3.3. Cấu trúc chung của một lệnh ASSEMBLY 44
3.4. Khai báo dữ liệu và kiểu dữ liệu 45
3.4.1. Biến byte 45
3.4.2. Biến Word 46
3.4.3. Biến mảng 46
3.4.4. Biến chuỗi 47
3.5. Khung của một chương trình ASSEMBLY 47
3.5.1. Cấu trúc chương trình để dịch ra tệp *.EXE 47
3.5.2. Cấu trúc chương trình để dịch ra tệp *.COM 50
3.6. Cách tạo một chương trình hợp ngữ 52

Chương 4. CÁC CẤU TRÚC LẬP TRÌNH 55
4.1. Tổng quan 55
4.1.1. Các lệnh chuyển điều khiển 55
4.2. Cấu trúc tuần tự 56
4.3. Cấu trúc rẽ nhánh 57
4.3.1. Cấu trúc IF…THEN… 57
4.3.2. Cấu trúc IF THEN…ELSE 58
4.3.3. Cấu trúc rẽ nhánh CASE…OF… 59
4.3.4. Cấu trúc rẽ nhánh với điều kiện kép 60
4.4. Cấu trúc lặp 61
4.4.1. Cấu trúc FOR…TO…DO… 61
4.4.2. Cấu trúc WHILE…DO… 62

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY

4.4.3. Cấu trúc REPEAT…UNTIL… 63

4.5. Cấu trúc chương trình con 63
4.5.1. Cấu trúc của chương trình con 64
4.5.2. Cách gọi và thực hiện một chương trình con 66
4.6. MACRO 67
4.6.1. Định nghĩa MACRO 67
4.6.2. Gọi MACRO trong chương trình 68
4.6.3. Gọi MACRO từ đoạn chương trình khác 70
Chương 5. MỘT SỐ VẤN ĐỀ NÂNG CAO 72
5.1. Lập trình xử lý số nguyên 72
5.2. Cấu trúc dữ liệu mảng 72
5.2.1. Khai báo mảng 72
5.2.2. Sử dụng mảng 73

5.3. Cấu trúc dữ liệu xâu ký tự 75
5.3.1. Cờ định hướng 75
5.3.2. Lệnh chuyển đổi một chuỗi 76
5.3.3. Lệnh lưu chuỗi 77
5.3.4. Lệnh nạp chuỗi 77
5.4. Lập trình xử lý số thực 80
5.5. Lập trình cho các bộ vi xử lý tiên tiến 80
Chương 6. LIÊN KẾT ASSEMBLY VỚI CÁC NGÔN NGỮ BẬC CAO 80
6.1. Lập trình mã lệnh mã máy 80
6.1.1. Cú pháp 81
6.1.2. Thực hiện 81
6.1.3. Một số chú ý 81
6.1.4. Ví dụ 81
6.2. Lập trình mã lệnh gợi nhớ 83
6.2.1. Chèn khối lệnh ASSEMBLY 83
6.3. Ngắt và lập trình ngắt trong ngôn ngữ bậc cao 85
6.3.1. Khái niệm về ngắt 85
6.3.2. Phân loại ngắt 86
6.3.3. Giới thiệu về một số ngắt 86


Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 2

Phần I
BỘ VI XỬ LÝ
Chương 1. BỘ VI XỬ LÝ 8086/8088
1.1. Tổng quan về các bộ vi xử lý của Intel
Một hệ vi xử lý được gọi là một hệ thống trong đó bao gồm:
- Đơn vị nhập xuất: Được sử dụng để nhập và xuất số liệu, dữ liệu.

- Đơn vị xử lý: Xử lý các dữ liệu nhập vào, sau đó xuất ra các thiết bị ra.
- Bộ nhớ: Lưu trữ thông tin, dữ liệu trong quá trình xử lý
Tất cả các thiết bị có các chức năng như vậy đều có thể được gọi là một hệ vi xử lý. Máy
vi tính là một hệ thống vi xử lý. Một thành phần quan trọng trong hệ thống máy vi tính,
đó là bộ vi xử lý.
Trên thực tế, có rất nhiều hãng chế tạo bộ vi xử lý cho các máy vi tính như: IBM, Intel,
Cyrix, AMD, Motorola Nhưng thông dụng nhất vẫn là bộ vi xử lý của Intel.
Các bộ vi xử lý của Intel được phát triển qua các th
ời kỳ như sau:
o Năm 1971, Intel đưa ra bộ vi xử lý 4004 với 4 bit dữ liệu, 12 bit địa chỉ; 0,8MHz
o Năm 1972, bộ vi xử lý Intel 8080 ra đời với 8bit dữ liệu, 12 bit địa chỉ; tốc độ xử
lý 0,8-5MHz
o Năm 1974, bộ vi xử lý Intel 8085 ra đời với 8bit dữ liệu, 16 bit địa chỉ; tốc độ xử
lý 5MHz
o Năm 1978, bộ vi xử lý Intel 8086 ra đời với 16bit dữ liệu, 20 bit đị
a chỉ; tốc độ
xử lý 10MHz
o Năm 1979, bộ vi xử lý Intel 8088 ra đời nhằm mục đích giảm giá bộ vi xử lý và
tương thích với hệ thống 8086 cũ
o Năm 1982 bộ vi xử lý 80286 ra đời với 16bit dữ liệu, 20 bit địa chỉ, tốc độ xử lý
là 20MHz có thể định địa chỉ ở chế độ bảo vệ và chế độ thực.
o Năm 1985-1988, b
ộ vi xử lý 80386 ra đời với 32 bit dữ liệu và 32 bit địa chỉ tốc
độ xử lý 33-40MHz
o Năm 1989, bộ vi xử lý 80486 ra đời với 32 bit dữ liệu và 32 bit địa chỉ tốc độ xử
lý 50-60MHz
o Năm 1993, bộ vi xử lý Pentium ra đời với 64 bit dữ liệu, tốc độ xử lý 100MHz
Sau đó là các bộ vi xử lý Pentium Pro, Pentium II, Pentium III, Celeron, Pentium 4,

Giỏo trỡnh VI X Lí

B mụn K thut mỏy tớnh Khoa CNTT HSPKT_HY Trang 3


1.2. Cu trỳc b vi x lý 8086
1.2.1. S khi

1.2.2. Gii thớch cỏc thnh phn trong s
Khi phi ghộp Bus (Bus Interface Unit - BIU)
Khi thc hin lnh (Execution Unit - EU)
n v EU

E.U (execution unit) B.I.U (Bus interface unit)
Các thanh ghi
đa năng
Các thanh
ghi con trỏ
v chỉ số
Các thanh ghi tạm thời
AX
BX
CX
DX
SP
BP
SI
DI
CS
DS
SS
ES

IP



ALU
Thanh ghi c


Khối điều
khiển của
EU
Logic điều
khiển Bus
Đệm lệnh (hng đợi lệnh)
(6 byte cho 8086)
Bus
ngoi

Bus
dữ liệu
(8 bit)
Bus
trong
của
CPU
8 bit
dữ liệu
20 bit
địa
ch


Bus địa chỉ (20 bit)
Các
thanh
ghi
đoạn
v con
trỏ
lệnh
Accumulator
Base
Count
Data
Stack pointer
Base pointer
Source index
Destination index
Code segment
Data segment
Stack segment
Extra segment
Intruction pointer
Bus dữ liệu
ALU (16 bit)
Hình 1.1 : Sơ đồ cấu trúc bên trong bộ vi xử lý 8086/808
8



Giáo trình VI XỬ LÝ

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 4

Đơn vị EU của 8086 và 8088 là giống nhau nó bao gồm ALU, các thanh ghi cờ,
thanh ghi đệm và các thanh ghi đa năng. Các kênh truyền dữ liệu bên trong EU đều là 16
bit.
EU không nối trực tiếp với thế giới bên ngoài, nó lấy lệnh từ hàng đợi lệnh của
BIU. Nếu lệnh cần truy xuất bộ nhớ hoặc cổng vào/ra (là nơi liên hệ với thiết bị ngoại vi )
thì EU yêu cầu BIU nhận hoặc gửi dữ liệu. Tất cả các
địa chỉ mà BIU thao tác đều là 16
bit, khi gửi sang cho BIU sẽ sắp đặt lại để tạo thành địa chỉ vật lý 20 bit phát ra các chân
ra địa chỉ của chip.
 Đơn vị BIU
Đơn vị BIU thực hiện tất cả các thao tác với Bus mà BIU yêu cầu, ngoài ra khi
BIU đang thực hiện một lệnh, thì BIU có thể lấy lệnh từ bộ nhớ về đặt trong hàng đợi
lệnh. Hàng đợi lệnh của 8086 dài 6 byte, của 8088 dài 4 byte. Việc lấ
y lệnh về của BIU
và việc thực hiện lệnh của BIU thực hiện song song với nhau (trừ một số trường hợp
ngoại lệ) làm cho hiệu năng của vi xử lý tăng lên.
1.2.3. Một số khái niệm cơ bản
* Pipelining: Là một phương pháp xử lý lệnh trên một đường ống lệnh, có thể xử lý nhiều
lệnh đồng thời trong cùng một khoảng thời gian. Trong khi lệnh này đ
ang được xử lý thì
lệnh tiếp sau nó đã được nhận vào
Chúng ta có thể so sánh phương pháp xử lý bằng pipeline và phương pháp xử lý
dòng lệnh tuần tự như hai hình dưới đây:
a)
Instruction 1
1
2
3

4
Instruction 3
1
2
Instruction 2
1
2
3
4
Time

b)
Instruction 1
1
2
3
4
Instruction 2
1
2
3
4
Time
1
2
3
4
1
2
3

4
Instruction 3
Instruction 4

Hình 1.2. So sánh pipeline và tuần tự
a) Xử lý tuần tự b) Xử lý bằng Pipeline
* CISC, RISC và VLIW
CISC – Complex Instruction Set Computer (Máy tính với tập lệnh đầy đủ)
RISC – Reduced Instruction Set Computer (Máy tính với tập lệnh rút gọn)
VLIW – Very Long Instruction Word (Máy tính với từ lệnh cực dài)
Về cơ bản, công nghệ hiện nay vẫn dựa trên cơ sở bộ vi xử lý CISC và RISC. Chúng ta
có thể so sánh sơ bộ về hai công nghệ này:

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 5

RISC CISC
 Cấu thành từ một vài lệnh đơn
 Các lệnh được thực thi bằng
phần cứng
 Kích thước của một lệnh và
thời gian thực thi của mỗi
lệnh gần như nhau
 Đầy đủ với độ phân cấp
 Các lệnh được thực thi bằng
các vi chương trình
 Kích thước và thời gian
thực hiện của các lệnh khác
nhau.


1.3. Tập thanh ghi của bộ vi xử lý 8086
1.3.1. Các thanh ghi dữ liệu
Mặc dù bộ vi xử lý có thể thao tác với dữ liệu bộ nhớ nhưng một lệnh như vậy sẽ
được thực hiện nhanh hơn (cần ít chu kỳ đồng hồ hơn), nếu dữ liệu được lưu trong các
thanh ghi. Đó cũng là nguyên nhân tại sao ngày nay các bộ vi xử lý được sản xuất với xu
hướng có nhiều thanh ghi h
ơn.
Với các thanh ghi dữ liệu các byte thấp và byte cao có thể được truy nhập một
cách riêng biệt, sử dụng từng 8 bit một cách riêng rẽ. Byte cao của thanh ghi AX được
gọi là AH và các byte thấp được gọi là AL. Tương tự cho các thanh ghi BX, CX, DX có
BH, BL, CH, CL, DH, DL.
Chức năng chuyên biệt của từng thanh ghi dữ liệu :
1. Thanh ghi AX (thanh ghi chứa- Accumulator register)
AX là thanh ghi được sử dụng nhiều nhất trong các lệnh số học, logic, và chuyể
n dữ
liệu bởi vì việc sử dụng chúng tạo ra mã máy ngắn nhất.
Trong các phép toán nhân chia một trong các số hạng tham gia phải được chứa trong
thanh ghi AX (nếu là 16 bit) và AL (nếu là 8 bit). Các thao tác vào ra cũng sử dụng thanh
ghi AX hoặc AL.
2. Thanh ghi BX (thanh ghi cơ sở- Base register)
Thanh ghi này ngoài việc thao tác dữ liệu nó thường chứa địa chỉ cơ sở của một bảng
dùng cho lệnh XLAT.(dịch AL thành 1 giá trị trong bảng BX)
3. Thanh ghi CX (thanh ghi đếm- Count register)
Việc xây dựng một chương trình lặp được thực hiện dễ dàng bằng cách
sử dụng thanh ghi CX, trong đó CX đóng vai trò bộ đếm số vòng lặp (REP, LOOP). CL
được dùng làm bộ đếm trong các lệnh dịch và quay bit.
4. Thanh ghi DX (thanh ghi dữ liệu - Data register)
DX và AX cùng được sử dụng trong các thao tác của phép nhân hoặc
chia các số 16 bit. DX còn được sử dụng để ch
ứa địa chỉ của các cổng trong các

lệnh vào ra dữ liệu trực tiếp (In/Out).

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 6

1.3.2. Các thanh ghi đoạn: CS, DS, ES, SS
Khối BIU đưa ra trên Bus địa chỉ 20 bit địa chỉ, như vậy 8088 có khả năng phân
biệt được 2
20
= 1. 048. 576 = 1 Mbyte ô nhớ. Nói cách khác không gian địa chỉ của 8088
là 1 Mbyte. Trong không gian 1 Mbyte bộ nhớ này cần chia thành nhiều đoạn khác nhau :
- Đoạn chứa chương trình
- Đoạn chứa dữ liệu và kết quả trung gian của chương trình
- Tạo ra vùng nhớ đặc biệt gọi là ngăn xếp
Trong thực tế bộ vi xử lý 8088 có các thanh ghi 16 bit liên quan đến địa chỉ đầu của các
đoạn trên và chúng được gọi là các thanh ghi đoạn (Segment Registers): CS, DS, SS, ES.
Các thanh ghi đoạn này chỉ ra địa chỉ đầu của 4 đoạn trong bộ nhớ dung lượng lớn
nhất của 4 đoạn này là 64 Kbyte. Các đoạn có thể nằm cách nhau hoặc trùm lên nhau
Nội dung của thanh ghi sẽ xác định địa chỉ của ô nhớ đầu tiên của đoạn, địa chỉ
này gọi là địa chỉ cơ sở. Địa chỉ của các ô nhớ khác trong cùng đoạn được tính bằ
ng cách
cộng thêm vào địa chỉ cơ sở một giá trị gọi là địa chỉ lệch hay độ lệch (offset)
Địa chỉ vật lý (20 bit) của một ô nhớ được xác định như sau :
Điạ chỉ vật lý = Điạ chỉ đoạn *10h+ thanh ghi lệch (hay offset)
và điạ chỉ logic trong máy tính luôn được biểu diễn dưới dạng : Segment:Offset
Tại mọi thời điểm thì chỉ những ô nhớ
được định địa chỉ bởi 4 đoạn trên mới được truy
cập.
1.3.3. Các thanh ghi con trỏ và chỉ số: SI, DI, SP, BP
Trong 8088 có 3 thanh ghi con trỏ và 2 thanh ghi chỉ số 16 bit. Các thanh ghi này

(trừ IP), đều có thể được dùng như các thanh ghi đa năng, nhưng ứng dụng chính của mỗi
thanh ghi là chúng được gầm định như là thanh ghi lệch cho các đoạn tương ứng. Cụ thể
như sau :
1. Thanh ghi BP : (con trỏ cơ sở - Base
Pointer)
BP luôn trỏ vào một dữ liệu nằm trong đoạn ngăn xếp SS. Địa chỉ cụ thể SS:BP được
xác định như trên.
2. Thanh ghi SP(con trỏ ngăn xếp - Stack Pointer)
Được sử dụng kết hợp với SS để truy nhập vào đoạn ngăn xếp. SP luôn trỏ vào đỉnh
hiện thời của ngăn xếp trong đoạn ngă
n xếp SS. Địa chỉ cụ thể SS:SP
3. Thanh ghi SI(chỉ số nguồn - Source Index).
SI chỉ vào dữ liệu trong đoạn dữ liệu DS mà địa chỉ cụ thể tương ứng với DS:SI.
Bằng cách tăng nội dung của SI chúng ta có thể truy nhập dễ dàng đến các ô nhớ liên
tiếp.
4. Thanh ghi DI (chỉ số đích - Destination Index).

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 7

SI chỉ vào dữ liệu trong đoạn dữ liệu DS mà địa chỉ cụ thể tương ứng với DS:DI. Có
một số lệnh gọi là các thao tác chuỗi sử dụng DI để truy nhập đến các ô nhớ được định
địa chỉ bởi ES.
1.3.4. Thanh ghi con trỏ lệnh: IP
Các thanh ghi bộ nhớ chúng ta vừa trình bày dùng để truy cập dữ liệu, để truy
nhập đến các lệnh, 8088 s
ử dụng các thanh ghi CS và IP. Thanh ghi CS chứa điạ chỉ của
lệnh tiếp theo còn IP chứa địa chỉ offset của lệnh đó. Thanh ghi IP được cập nhập mỗi
khi có một lệnh được thực hiện.
1.3.5. Thanh ghi cờ

Đây là thanh ghi 16 bit, mỗi bit được sử dụng để thể hiện một trạng thái của bộ vi
xử lý tại một thời đ
iểm nhất định trong quá trình thực hiện chương trình. Mới chỉ có 9 bit
được sử dụng và người ta gọi mỗi bit là một cờ.
x x x x OF DF IF TF SF ZF x AF x PF x CF
* Các cờ trạng thái
CF (Carry Flag): được thiết lập khi phép toán thực hiện có nhớ hoặc có vay mượn
PF(Parity Flag): được thiết lập khi kết quả của phép toán có tổng số bit có giá trị 1
là một số chẵn (ở phần thấp của kết quả) .
AF (Auxiliary Flag): được thiết lập khi có nhớ từ "bit có trọng số lớn nhất ở phần
thấp" sang "bit có trọng số thấ
p nhất ở phần cao".
ZF (Zero Flag) : Được thiết lập khi tất cả các bit của kết quả có giá trị 0.
SF ( Sign Flag): được thiết lập khi bit MSB của kết quả có giá trị 1.
OF (Overflow Flag): được thiết lập khi kết quả nằm ngoài giới hạn cho phép.
*Các cờ điều khiển
TF (Trace Flag): Nếu bit này có giá trị 1 thì bộ vi xử lý cho phép thực hiện từng
bước chương trình
IF (Interrupt Flag) : Nếu bit này có giá tr
ị 1 thì bộ vi xử lý cho phép các ngắt cứng
có thể thực hiện.
DF (Direction Flag): Nếu bit này có giá trị 1 thì bộ vi xử lý cho phép duyệt chuỗi
từ phải sang trái hoặc từ địa chỉ cao đến địa chỉ thấp.
1.4. Tập lệnh của bộ vi xử lý
1.4.1. Sơ lược về tập lệnh của bộ vi xử lý
Tập lệnh của bộ vi xử lý là thành phần cơ bả
n nhất để máy tính có thể thực hiện
các yêu cầu của người sử dụng. Tất cả các thao tác, các chương trình do người dùng lập
ra đều được bộ vi xử lý thực hiện bằng việc ánh xạ chúng dưới dạng mã máy, mã lệnh
riêng của bộ vi xử lý.


Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 8

Thông thường, với các lập trình viên, các lệnh của bộ vi xử lý được hiểu dưới góc
độ là các lệnh gợi nhớ (Mnemonic). Với mã lệnh gợi nhớ thì một lệnh của bộ vi xử lý bao
gồm các thành phần sau:
[Mã lệnh] [Các toán hạng]
Trong đó:
Mã lệnh - Cơ bản trường này chứa mã lệnh dưới dạng mã gợi nhớ.
Các toán hạng - Là các thành phần mà các lệnh sử dụng để thực hiện lệnh.
Nếu là các lệnh thật thì đây chính là các toán hạng của lệnh. Với bộ vi xử lý
8086/8088, các toán hạng này có thể là 0,1 hoặc 2.
Ví dụ:
ADD AL,[BX]
ADD là lệnh thực hiện phép cộng; AL và [BX] là hai toán hạng với qui định nếu tên
thanh ghi hoặc một giá trị hằng nằm trong dấu [] thì đó là địa chỉ OFFSET của ô nhớ
chứa dữ liệu cần thao tác.
1.4.2. Tập lệnh của CPU
Trong tập lệnh của vi xử lý 8086 có rất nhiề
u lệnh, mỗi lệnh thực hiện một nhiệm
vụ cụ thể nào đó. Song, trong giới hạn nhất định, chúng ta có thể nghiên cứu một
vài lệnh cơ bản.
Để dễ hiểu, chúng ta có thể chia chúng các nhóm lệnh sau:
1. Nhóm lệnh di chuyển dữ liệu
2. Nhóm lệnh số học
3. Nhóm lệnh logic
4. Nhóm lệnh dịch chuyển và quay
5. Nhóm lệnh rẽ nhánh
6. Nhóm lệnh vào ra cổng

7. Nhóm lệnh điều khiển.
1.4.3.
Nhóm lệnh di chuyển dữ liệu
Trong nhóm này ta quan tâm một số lệnh cơ bản sau: MOV, MOVSB, MOVSW
XCHG, PUSH, POP
a) Lệnh MOV : Move a Word or Byte (chuyển 1 từ hay 1 byte)
MOV đích, nguồn
Di chuyển nội dung của toán hạng nguồn vào toán hạng đích. Hai toán hạng phải có
cùng độ lớn và không được đồng thời là 2 thanh ghi đoạn hoặc hai ô nhớ. Toán hạng
đích phải là thanh ghi hay ô nhớ. Giá trị của toán hạng nguồn không bị thay đổi, sau
khi thực hiện l
ệnh.
Ví dụ :

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 9

MOV ax,word1
Trước lệnh Mov Ax có nội dung : 0002h
Word1 : 0008h
Sau lệnh Mov Ax có nội dung : 0008h
Word1 : 0008h
Một số chú ý:
- Toán hạng đích không thể là một hằng số
- Không thể chuyển trực tiếp một giá trị byte vào một toán hạng đích là một từ và
ngược lại. Nếu cần, có thể sử dụng các toán tử PTR BYTE hoặc PTR WORD
- Không thể chuyển trực tiếp một hằng số vào một thanh ghi đoạn. Trong trường hợp
cần thiết, có thể chuyển tạm thời qua một thanh ghi khác
Ví dụ: Muốn chuyển giá trị 100 vào thanh ghi DS, ta có thể sử dụng hai lệnh sau
MOV AX,100

MOV DS,AX
MOVSB/MOVSW chuỗi đích, chuỗi nguồn
là hai lệnh dùng để chuyển các phần tử của một chuỗi nguồn sang một chuỗi đích.
MOVSB : MOVe String Byte
MOVSW : MOVe String Word
b) XCHG : eXCHanGe 2 operands ( tráo đổi nội dung của hai toán hạng)
XCHG đích, nguồn
Tráo đổi nội dung của toán hạng đích và toán hạng nguồn cho nhau.
Ví d
ụ: XCHG AX,BX
Trước lệnh XCHG AX có nội dung : 153Eh
BX : 28FCh
Sau lệnh Mov AX có nội dung : 28FCh
BX : 153Eh
Một số chú ý:
- Cả hai toán hạng không thể là hằng số
- Không thể tráo đổi hai toán hạng khác kiểu. Nếu cần, có thể sử dụng các toán tử
PTR BYTE hoặc PTR WORD.
- Không được phép là 2 thanh ghi đoạn
- Không được phép là hai ô nhớ.
c) PUSH : PUSH Word On the Stack (Đẩy vào ngăn xếp)
PUSH toán hạng
Đẩy nội dung của toán hạng vào ngăn xếp, nội dung của toán hạng không bị thay

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 10

đổi. (copy nội dung)
Toán hạng nhất thiết phải là thanh ghi (đối với 8086/8088)
Ví dụ:

PUSH AX
Đẩy nội dung của thanh ghi AX vào ngăn xếp
d) POP : POP Word from Top of Stack (lấy ra từ đỉnh ngăn xếp).
POP đích
Toán hạng nhất thiết phải là thanh ghi (đối với 8086/8088), trừ thanh ghi CS
1.4.4. Nhóm lệnh số học
Trong nhóm này ta quam tâm đến các lệnh cơ bản sau : ADD, ADC, INC, SUB,
SBB, DEC MUL(IMUL), DIV(IDIV)
a) ADD :Addition (cộng hai toán hạng)
ADD đích, nguồn
Cộng toán hạng đích v
ới toán hạng nguồn. Kết quả được chứa trong toán hạng đích
đích=đích+nguồn
Điều kiện: hai toán hạng phải cùng độ dài, không được là hai thanh ghi đoạn
ADD ax,word1
Ax= ax+word1
b) SUB : Subtraction (trừ)
Sub đích,nguồn
Trừ nội dung của toán hạng đích cho toán hạng nguồn, kết quả chứa trong toán hạng
đích.
Ví dụ : MOV BX, F0h
SUB BX,50h
BX=F0h-50h=A0h
c) MUL : Multiplexing - Multiply Unsigned Byte or Word (nhân số không dấu)
Nhân toán hạng với nội dung chứa trong thanh ghi AX. Tức là nhân hai toán h
ạng với
nhau nhưng 1 toán hạng phải được chứa trong AX. Hoặc là trong DX và AX
MUL gốc
Tuỳ vào độ dài của toán hạng gốc mà xác định kết quả :
- gốc : 8 bit thì số bị nhân trong AL -> kết quả trong AX

- gốc : 16 bit thì số bị nhân trong AX -> kết quả trong DX:AX
Ví dụ :
MOV AL,10h
MOV BL,5h

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 11

MUL BL
Vì toán hạng nguồn là thanh ghi BL, nên kết quả sẽ được lấy ra trong AX. AX=50h
Trong trường hợp muốn nhân số có dấu, ta có thể sử dụng lệnh IMUL có dạng lệnh
như lệnh MUL.
d) DIV : Unsigned Divide (chia hai số không dấu)
DIV nguồn
- nguồn là số 8 bit : AX/nguồn số bị chia phải là số không dấu 16 bit trong AX
sau khi chia AL chứa thương còn AH chứa số dư.
- nguồn là số 16 bit : DX:AX/nguồn số bị chia phải là số
không dấu và đặt trong
cặp DX:AX sau khi chia; AX chứa thương còn DX chứa số dư.
nguồn =0 (chia cho 0) hoặc kết quả lớn hơn FFH, FFFFh thì gọi ngắt INT 0
Trong trường hợp muốn chia số có dấu, ta có thể sử dụng lệnh IDIV có dạng lệnh như
lệnh DIV.
1.4.5. Nhóm lệnh logic
Trong nhóm này ta quan tâm đến các lệnh sau: AND, OR, XOR, NOT
a) AND : và hai toán hạng
AND đích,nguồn
Đích, nguồn phải có điều kiện :
- cùng độ dài
-
không phải đồng là 2 ô nhớ, 2 thanh ghi đoạn.

thường dùng để che đi hay giữ lại một vài bit nào đó của toán hạng đích
ví dụ : AND AX,0Fh
b) OR : hoặc hai toán hạng
OR đích,nguồn
Đích, nguồn phải có điều kiện :
- cùng độ dài
- không phải đồng là 2 ô nhớ, 2 thanh ghi đoạn.
thường dùng để lập một vai bit nào đó của toán hạng đích= cách cộng logic toán hạng
đó vớ
i toán hạng tức thời mà các bit 1 có vị trí tương ứng với bit cần lập.
Ví dụ : OR AL,BL
OR AL,0Fh
c) NOT : lấy phủ định - đảo bit NOT toánhạng
Dùng để đảo bit của một toán hạng (lấy bù 1)
d) XOR : hoặc loại trừ toán hạng
Dùng để xoá về 0 một thanh ghi nào đó

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 12

Ví dụ: XOR AX,AX ; Xoá thanh ghi AX về 0
1.4.6. Nhóm lệnh dịch chuyển và quay
Các lệnh cần quan tâm : SHL, SHR, ROL, ROR
a) SHL : Shift Left - dịch trái
SHL đích,1
SHL đích,CL
Dịch các bit của toán hạng đích sang trái một vị trí hoặc CL vị trí. Một giá trị 0 được
đưa vào bên phải của toán hạng đích, còn bit MSB được đưa vào CF.
Thực hiện phép nhân bằng cách dịch trái.
b) SHR : Shift Right ; Dịch phải

SHR đích,CL
Dịch các bit của toán hạng đích sang phải 1 hoặc CL vị
trí.
Giá trị 0 được đưa vào bit MSB còn gía trị của bit LSB được chuyển vào cờ CF.
Dùng lệnh dịch phải thực hiện phép chia.
c) ROL :Rotation Left- quay trái
ROL đích,CL
Dịch các bit sang bên trái. bit MSB được đưa vào LSB và cờ CF. muốn quay nhiều
lần thì chứa trong CL






d) ROR :Rotation Right- quay phải


0
CF
Lệnh SHL


0
CF
Lệnh SHR
0 15


CF

Lệnh ROL
MSB

MSB

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 13

ROR đích,CL
Dịch các bit sang bên phải. Bit LSB được đưa vào MSB và cờ CF. muốn quay nhiều
lần thì chứa trong CL






* Các lệnh quay qua cờ nhớ : RCL, RCR.
* Các ví dụ đưa ra và yêu cầu tìm giá trị của đích và CF sau CL lần dịch, quay.
1.4.7. Nhóm lệnh điều khiển rẽ nhánh
a) Nhảy có đìêu kiện
Jxxx nhãn_đích
Nếu điều kiện nhảy được thoả thì sẽ nhảy đến nhãn_đích và thi lệnh này. nhãn có thể
trước hoặc sau. Trước không quá 126 byte, sau không quá 127 byte.
Bảng các lệnh nhảy
Nhảy có dấu
Kí hiệu Chức năng Điều kiện
nhảy
Jg/jnle Nhảy nếu lớn hơn
Nhảy nếu không nhỏ hơn hay bằng

Zf=0, sf=of
Jge/jnl Nhảy nếu lớn hơn hay bằng
Nhảy nếu không nhỏ hơn
Sf=0f
Jl/jnge Nhảy nếu nhỏ hơn
Nhảy nếu không lớn hơn hay bằng
Sf<>of
Jle/jng Nhảy nêu nhỏ hơn hay bằng
Nhảy nếu không lớn hơn
Zf=1 hay
sf=of
Nhảy không dấu
Ja/jnbe Nhảy nếu lớn hơn
Nhảy nếu không nhỏ hơn hay bằng
Cf=0 và zf=0
Jae/jnb Nhảy nếu lớn hơn hay bằng
Nhảy nếu không nhỏ hơn
Cf=0
Jb/jnae Nhảy nếu nhỏ hơn Cf=1



CF
Lệnh ROR
0 15
LSB LSB

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 14


Nhảy nếu không lớn hơn hay bằng
Nhảy điều kiện đơn
Je/jz Nhảy nếu bằng
Nhảy nếu bằng 0
Zf=1
Jne/jnz Nhảy nếu không bằng
Nhảy nếu không bằng 0
Zf=0

b) Nhảy không điều kiện
JMP nhãn_đích
Nhãn đích nằm trong cùng đoạn với JMP, vượt xa 126 byte đối với các lệnh nhảy có
điều kiện.
1.4.8. Nhóm lệnh vào ra cổng
a) IN : nhập vào từ cổng 1 byte hay 1 word
IN thanhchứa, cổng
Nếu thanh chứa là AL thì dữ liệu 8 bit được đưa vào có giá trị là điạ chỉ cổng
Nếu thanh chứa là AX thì dữ liệu 16 được đưa vào từ cổng có giá tr
ị là điạ chỉ cổng +1
Điạ chỉ cổng trong khoảng 00h - FFh
b) OUT :xuất ra cổng 1 byte hay 1 word
OUT điạchỉcổng, Acc
1.4.9. Nhóm lệnh điều khiển
a) CALL chương_trình_con
Gọi một chương trình con có tên gọi: chương_trình_con
b) INT số_hiệu_ngắt
Lệnh gọi ngắt với số_hiệu_ngắt
c) HLT Lệnh treo máy dừng chương trình
d) NOP : No Operation không thực hiệ
n lệnh nào cả.

1.5. Chế độ địa chỉ của bộ vi xử lý 8086
1.5.1. Tổng quan
Các chế độ địa chỉ chính là phương pháp để xác định toán hạng hoặc kiểu toán
hạng trong các câu lệnh. Bộ vi xử lý 8086/8088 có tổng số trên 20 chế độ địa chỉ cho các
thành phần khác nhau như mã lệnh, dữ liệu, ngăn xếp. Nhưng trên thực tế, việc lập trình,
phân tích lệnh, người ta chỉ
qua tâm đến việc dữ liệu của lệnh được xử lý ra sao. Vì vậy,
chúng ta cũng chỉ nghiên cứu về các chế độ địa chỉ dữ liệu của lệnh.
Trong bộ vi xử lý 8086 qui định có 7 chế độ địa chỉ cho toán hạng của lệnh. Cụ thể
bao gồm các chế độ sau:
- Chế độ địa chỉ thanh ghi

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 15

- Chế độ địa chỉ tức thì
- Chế độ địa chỉ trực tiếp
- Chế độ địa chỉ gián tiếp thanh ghi
- Chế độ địa chỉ tương đối cơ sở
- Chế độ địa chỉ tương đối chỉ số
- Chế độ địa chỉ tương đối chỉ số cơ s

1.5.2. Các chế độ địa chỉ dữ liệu

1.5.3. Chế độ địa chỉ thanh ghi
Trong chế độ này việc trao đổi thông tin diễn ra trực tiếp giữa các thanh ghi. Toán
tử chỉ hoàn toàn là các thanh ghi. Loại địa chỉ thanh ghi không cần truy nhập bộ nhớ nên
rất nhanh.
Ví dụ: MOV AX, BX ;Sao chép nội dung thanh ghi BX sang thanh ghi AX.
MOV AL,CL ; Sao chép nội dung thang ghi CL sang thanh ghi AL.

ADD AL, CL ; Cộng nội dung thanh ghi Clvới thanh ghi AL.
1.5.4. Chế độ địa chỉ tức thì
Trong chế độ
này toán hạng đích là một thanh ghi hoặc ô nhớ, còn toán hạng
nguồn là một hằng số. Ta có thể dùng chế độ này để nạp dữ liệu vào bất kỳ thanh ghi nào,
trừ thanh ghi đoạn và thanh ghi cờ.

Ví dụ: MOV CL, 5Fh; chuyển 5Fh vào thanh ghi CL.
MOV AX, 0FF0h; Chuyển 0FF0h vào trong thanh ghi AX
MOV DS, AX; Chuyển nội dung thanh ghi AX vào DS.
MOV [BX], 10; Chuyển 10 vào ô nhớ tại địa chỉ DS:BXX
1.5.5. Chế độ địa chỉ trực tiếp
Trong chế độ này, một toán hạng chứa địa chỉ lệch của ô nhớ dùng chứa dữ liệu,
Mã lệnh Tên các thanh ghi
TËp c¸c
thanh
ghi
Toán hạng
Mã lệnh Tên các thanh ghi Hằng số
Mã lệnh Toán hạng
Bộ nhớ
Toán hạng

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 16

còn toán hạng kia chỉ có thể là thanh ghi.
Ví dụ: MOV Al, [1053] ; Chuyển nội dung ô nhớ địa chỉ DS:1053h vào AL
MOV [5307h], CX ; Chuyển nội dung CX vào 2 ô nhớ liên tiếp có địa
; chỉ DS:5307h và DS:5308h

ADD [5307h], AL ; Cộng nội dung AL vào ô nhớ có địa chỉ DS:5307h
1.5.6. Chế độ địa chỉ gián tiếp thanh ghi
Trong chế độ này, một toán hạng là một thanh ghi được sử dụng để chứa địa chỉ
lệch (Offset) của ô nhớ chứa dữ liệu, còn toán hạng kia chỉ có th
ể là thanh ghi mà không
được là ô nhớ.
Ví dụ: MOV AL, [BX] ; Chuyển nội dung ô nhớ có đ/c DS:BX vào AL
MOV [SI], CL ; Chuyển nội dung CL vào ô nhớ có đ/c DS:SI
MOV [DI], AX ; Chuyển nội dung AX vào 2 ô nhớ liên tiếp có
; địa chỉ DS:DI và DS:DI+1
1.5.7. Chế độ địa chỉ tương đối cơ sở(Base Relative Addressing)
Trong chế độ này, các thanh ghi cơ sở BX và BP là các hằng số biểu diễn các giá
trị dịch chuyển (Displacement Values), kết hợp với DS và SS để tính địa chỉ hiệu dụng
củ
a toán hạng các vùng nhớ. Sự có mặt của các giá trị dịch chuyển xác định tính tương
đối (so với cơ sở) của địa chỉ.

Ví dụ 1: MOV CX, [BX]+10 ; Chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ
MOV CX, [BX+10] ; DS:(BX+10) và DS:(BX+11) vào CX
MOV CX,10[BX] ;
MOV CL, [BP]+5 ; Chuyển nội dung ô nhớ SS:(BP+5) vào AL
Chú ý: Trong các ví dụ trên, các giá trị 10 và3 được gọi là các giá trị dịch chuyển
- (BX+10) hoặc (BP+5) gọi là địac chỉ hiệu dụng (Effective Address – EA)
Mã lệnh [Thanh ghi]
Tập các
thanh ghi
Bộ nhớ
Mã lệnh Địa chỉ thanh ghi
Tập các
thanh ghi



BX,BP
Bộ nhớ
Giá trị cụ thể

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 17

- DS:(BX+10) hoặc SS:(BP+5) chính là địa chỉ logic tương ứng với 1 PA
1.5.8. Chế độ địa chỉ tương đối chỉ số(Indexed Relative Addressing)
Trong chế độ này, các thanh ghi chỉ số DI và SI và các hằng số biểu diễn giá trị
dịch chuyển, được dùng để tính địa chỉ của toán hạng trong vùng nhớ DS.


Ví dụ: MOV AX,[SI]+10 ; Chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ
; DS:(SI+10) và DS:(SI+11) vào AX
MOV AX,[SI+10] ; Tương tự như trên.
MOV AL, [DI+5]; chuyển nội dung ô nhớ DS:(DI+5) vào CL.
1.5.9. Chế độ địa chỉ tương đối chỉ số cơ sở(Base Indexed Relative)
Là sự kết hợp của 2 chế độ địa chỉ, đó là chế độ địa chỉ tương đối chỉ số và chế độ
địa chỉ tương đối cơ
sở. Trong chế độ này dùng cả 2 thanh ghi cơ sở và 2 thanh ghi chỉ số
để tính địa chỉ của toán hạng. Chế độ này rất phù hợp với việc địa chỉ hoá các mảng 2
chiều.

Ví dụ: MOV AX, [BX]+[SI]+8 ;chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ
MOV AX, [BX+SI] + 8 ; DS:(BX+SI+8) và DS:(BX+SI+9) vào AX
MOV AX, [BX + SI + 8] ;
MOV CL, [BP][DI]+5 ; chuyển nội dung ô nhớ có địa chỉ

; DS:(BP+DI+5) vào CL
 Chú ý: Trong các chế độ địa chỉ trên, các thanh ghi đoạn và các thanh ghi lệch
được ngầm định đi kèm với nhau. Muốn loại bỏ sự ngầm định đó thì ta có thể viết
tường minh địa chỉ của đoạn.

Mã lệnh Địa chỉ thanh ghi
Tập các
thanh ghi
DI, SI
Bộ nhớ
Giá trị cụ thể
Mã lệnh Thanh ghi
Bộ nhớ
Giá trị cụ thể
Tập các
thanh ghi
BX,BP
Thanh ghi
Tập các
thanh ghi

SI,DI

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 18

Ví dụ: MOV AL, [BX] ; ngầm định là DS:BX
Muốn bỏ ngầm định là DS ta phải viết
MOV AL, SS:[BX]; chuyển thành SS:BX
1.5.10. Bảng tóm tắt các chế độ địa chỉ


STT Chế độ địa chỉ Toán hạng Đoạn ngầm định
1 Thanh ghi Reg
2 Tức thì Data
3 Trực tiếp [Offset] DS
4 Gián tiếp thanh ghi
[BX]
[SI]
[DI]
DS
DS
DS
5 Tương đối cơ sở
[BX] + Disp
[BP] + Disp
DS
SS
6 Tương đối chỉ số
[DI] + Disp
[SI] + Disp
DS
SS
7 Tương đối chỉ số cơ sở
[BX] + [DI] + Disp
[BX] + [SI] + Disp
[BP] + [DI] + Disp
[BP] + [SI] + Disp
DS
DS
SS

SS
 Các cặp thanh ghi đoạn và thanh ghi lệch ngầm định
Thanh ghi đoạn CS DS ES SS
Thanh ghi lệch IP SI, DI, BX DI SP, BP

1.6. Phân tích mã lệnh mã máy
1.6.1. Khuôn dạng lệnh
Mã lệnh dành cho vi xử lý được viết dưới dạng nhị phân. Nhưng để người lập
trình có thể hiểu và lập trình được thì các lệnh của vi xử lý được biểu diễn dưới dạng mã
lệnh gợi nhớ (Mnemonic). Song, về cơ bản chúng ta cũng cầm phải biết về mã lệnh mã
máy của bộ vi xử lý để có thể hiểu rằng mộ
t lệnh được bộ vi xử lý thực hiện ra sao và cấu
trúc của các lệnh đó như thế nào.
Vấn đề ta cần phải hiểu là một lệnh của bộ vi xử lý 8086 có độ dài lệnh tối đa là 6
byte. Cấu trúc chung của một mã lệnh đó bao gồm:

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 19




Disp Disp Disp Disp
Opcode D
W
mod
e
reg M/R

Byte 1



Byte 2

Byte 3,4

Byte 5,6
Trong đó:
Opcode (Operation Code) - Phân biệt lệnh đó là lệnh gì. Ví dụ, lệnh MOV=100010
D (Direction) chỉ hướng hành động của lệnh. D=0 từ thanh ghi, D=1 tới thanh ghi.
W (Word) chỉ độ dài của toán hạng. W=1 toán hạng 2 byte, W=0 toán hạng 1 byte
mode chỉ chế độ địa chỉ của toán hạng. Ví dụ, chế độ thanh ghi mode=11.
reg (Register) chỉ mã của thanh ghi trong lệnh (nếu lệnh có toán hạng là thanh ghi).
M/R (Memory/Register) Chỉ mã của thanh ghi hoặc ô nhớ theo chế độ địa chỉ
Disp (Displacement) đoạn dị
ch chuyển hoặc là toán hạng tức thì.
Bảng xác định chế độ địa chỉ toán hạng bằng các trường MOD và R/M:
MOD = 11 Tính địa chỉ
R/M W=0 W=1 R/M MOD=00 MOD=01 MOD=10
000 AL AX 000 (BX)+(SI) (BX)+(SI)+d8 (BX)+(SI)+d16
001 CL CX 001 (BX)+(DI) (BX)+(DI)+d8 (BX)+(DI)+d16
010 DL DX 010 (BP)+(SI) (BP)+(SI)+d8 (BP)+(SI)+d16
011 BL BX 011 (BP)+(DI) (BP)+(DI)+d8 (BP)+(DI)+d16
100 AH SP 100 (SI) (SI)+d8 (SI)+d16
101 CH BP 101 (DI) (DI)+d8 (DI)+d16
110 DH SI 110 Địa chỉ
trực tiếp
(BP)+d8 (BP)+d16
111 BH DI 111 (BX) (BX)+d8 (BX)+d16


Bảng Mã hoá các thanh ghi:
REG W=0 W=1
000 AL AX
001 CL CX

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 20

010 DL DX
011 BL BX
100 AH SP
101 CH BP
110 DH SI
111 BH DI

Bảng mã hoá các thanh ghi đoạn:
REG W=0
00 ES
01 CS
10 SS
11 DS
1.6.2. Một số mã lệnh mã máy
a/ Lệnh MOV
Từ thanh ghi đến ô nhớ: 1010001w addr_low addr_high
Từ ô nhớ đến thanh ghi: 1010000w addr_low addr_high
Từ ô nhớ hay thanh ghi đến thanh ghi đoạn: 10001110 mod 0 seg r/m
Từ thanh ghi đoạn đến ô nhớ hay thanh ghi: 10001110 mod 0 seg r/m
Từ ô nhớ hay thanh ghi đến thanh ghi/ từ thanh ghi vào ô nhớ:
100010d1 mod seg r/m (addr_low addr_high)
Từ dữ liệu trực tiếp vào thanh ghi: 1011w reg data (data_High)

Từ dữ liệu trực tiếp vào thanh ghi hay ô nhớ:
1100011w mod 000 r/m data (data_High)
b/ Lệnh PUSH
Toán hạng nguồn là thanh ghi công dụng chung: 01010 reg
Thanh ghi đoạn: 000 seg 110
Ô nhớ hoặc thanh ghi: 11111111 mod 110 r/m
c/ Lệnh POP
Toán hạng đích là thanh ghi công dụng chung: 01011 reg
Thanh ghi đoạn: 000 seg 111
Ô nhớ hoặc thanh ghi: 10001111 mod 000 r/m
d/ Lệnh ADD
Cộng ô nhớ hay thanh ghi đến thanh ghi: 000000dw mod reg r/m

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 21

Cộng trực tiếp số hạng vào thanh ghi: 0000010w data
Cộng trực tiếp ô nhớ hay thanh ghi cho toán hạng trực tiếp:
100000sw mod 000 r/m data
(Trong đó s được thiết lập nếu 1 byte số liệu được cộng vào ô nhớ hay thanh ghi 16bit)
e/ Lệnh SUB
Trừ ô nhớ hay thanh ghi vào thanh ghi: 100010dw mode reg r/m
Trừ thanh ghi cho toán hạng trực tiếp: 0010110w data
Trừ ô nhớ hay thanh ghi cho toán hạng trực tiếp: 100000sw mod 101 r/m data
(Trong đó s được thiết lập nếu 1 byte số liệu được cộng vào ô nhớ hay thanh ghi 16bit)
f/ Lệnh AND
Và ô nhớ hay thanh ghi với thanh ghi: 001000dw mod reg r/m
Và trực tiếp với thanh ghi: 0010010w data
Và trực tiếp với ô nhớ hay thanh ghi: 1000000w mod 100 r/m data
g/ Lệnh OR

Hoặc ô nhớ hay thanh ghi với thanh ghi: 000010dw mod reg r/m
Hoặc dữ liệu trực tiếp với thanh ghi: 0000110w data
Hoặc trực tiếp với ô nhớ hay thanh ghi: 1000000w mod 001 r/m data
h/ Lệnh XOR
XOR ô nhớ hay thanh ghi với thanh ghi: 001100dw mod reg r/m
XOR toán hạng trực tiếp với thanh ghi: 0011010w data
XOR toán hạng trực tiếp với ô nhớ hay thanh ghi: 1000000w mod 110 r/m data
1.6.3. Một số ví dụ minh họa
Phân tích mã lệnh mã máy của các lệ
nh sau:
- MOV SP,BX ; sao chép nội dung trong thanh ghi BX sang thanh ghi SP
opcode=100010
D=1 gửi tới thanh ghi
w=1 chuyển một từ
MOD=11 thanh ghi tới thanh ghi
REG=100 thanh ghi SP
R/M=011 thanh ghi BX
==> Mã lệnh mã máy của lệnh này là: 1000101111100011b = 8BE3h
- MOV CL,[BX] ; sao chép nội dung từ ô nhớ DS:BX sang thanh ghi CL
Opcode=100010
D=1 tới thanh ghi
W=0 toán hạng 8 bit

Giáo trình VI XỬ LÝ
Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 22

MOD=00 ô nhớ không dịch chuyển
REG=001 thanh ghi CL
R/M = 111 toán hạng là ô nhớ DS:BX
==> Mã lệnh mã máy của lệnh này là: 1000101000001111b = 8A0Fh

- MOV 43h[SI], DH; chuyển nội dung thanh ghi DH sang ô nhớ DS:(SI+43h)
Opcode=100010
D=0 từ thanh ghi
W=0 chuyển Byte
MOD=01 ô nhớ, dịch chuyển 1 byte
REG=110 thanh ghi DH
R/M=100 ô nhớ DS:SI
disp=01000011 độ dịch chuyển là 43h
==> Mã lệnh mã máy của lệnh này là: 100010000111010001000011b = 887443h
1.7. Lập trình và gỡ rối bằng DEBUG
Máy tính trước đây là các máy có kích thước tương đối lớn, được chế tạo từ các đèn điện
tử
chân không, vì vậy, các con rệp (BUGS) có thể chui vào đó và làm hỏng máy móc, dẫn
đến việc máy móc có thể xử lý sai. Trước tình thế đó, người ta đưa ra một yêu cầu bắt các
con rệp phá hoại này và được gọi là DEBUG (Bắt rệp).
Từ đó đến nay, công việc xử lý làm cho chương trình máy tính được thực hiện chính xác,
tránh gây ra lỗi được gọi là DEBUG. Các chương trình thực hiện nhiệm vụ này được gọi
là các trình gỡ rối.
Hiện nay, có rất nhiề
u trình gỡ rối được sử dụng để sửa lỗi cho các trình ứng dụng như:
DEBUG.EXE (trong DOS), Debugging (trong WINDOWS).
Để thực hiện được trình DEBUG trong môi trường DOS, ta có thể thực hiện theo cú pháp
sau:
DEBUG {ENTER}
DEBUG <tên tệp cần gỡ rối> {ENTER}
1.7.1. Giới thiệu về lệnh của DEBUG
Sau khi chạy trình DEBUG, dấu nhắc lệnh của DEBUG sẽ hiện lên với dấu (-). Tại đây ta
có thể gõ vào các lệnh của DEBUG. Cụ thể:
A - Assemble - H
ợp ngữ: được sử dụng để sửa các lệnh của chương trình

Cú pháp: A <địa chỉ offset của lệnh cần sửa>
Ví dụ: A 0153
Có thể được sử dụng để lập một chương trình *.COM. Nếu lập trình thì địa chỉ offset sẽ
phải bắt đầu từ 0100h.
D - Dump - Hiển thị nội dung một vùng nhớ lên màn hình.

×