TRƯỜNG CAO ĐẲNG VIỄN ĐÔNG
KIẾN TRÚC MÁY TÍNH
LỆNH VÀ CHẾ ĐỘ ĐỊA CHỈ
GV: Th.S Nguyễn Đặng Thế Vinh
Email:
Tp.HCM, tháng 09 năm 2018
Cấu trúc mã lệnh
2
1. Cấu trúc mã lệnh
▪ Quy trình thực hiện một lệnh trong bộ
VXL: Lấy lệnh (feeching), giải mã lệnh
(decording) và xử lý lệnh (excution).
▪ LT hợp ngữ (assembly language) mô tả
lệnh máy bằng tổ hợp các ký tự gợi nhớ
(mnemonic).
Cấu trúc mã lệnh
3
▪ Cấu trúc chung của một mã lệnh:
o Prefix đi trước mã lệnh.
o Mã toán (operation code) phân biệt đó là
lệnh gì, ví dụ với lệnh dịch chuyển MOV
có mã toán là 100010.
o Toán hạng (operand) cho biết cái gì
được xử lý (nội dung của thanh ghi hay
bộ nhớ).
o Địa chỉ trực tiếp (2 byte).
Cấu trúc mã lệnh
4
1 0 0 0 1 0
Mã lệnh
Địa
Địa chỉ
chỉ
phần
D W MOD REG R/M phần
cao
thấp
Byte 1
Byte 2
Byte 3
Byte 4
Bit D (Direction) chỉ hướng thanh ghi REG,
Bit W (Word) chỉ xem thanh ghi được dùng
là 8 bit hay 16 bit (1 word), MOD và R/M
(register/memory) chế độ địa chỉ của lệnh
Cấu trúc mã lệnh
5
1
0
0
0
1
0
Operation Code
Mã lệnh
1
0
0
0
0
0
1
1
1
1
(*) (**)
(***)
(****)
(*****)
D
MOD
REG
R/M
CL
[BX]
W
MOV
(*), (***): chuyển tới thanh ghi
(**): chuyển 1 bit
(****): các bit mã hóa CL
(*****): ô nhớ có địa chỉ DS:BX
Tập lệnh của bộ vi xử lý
6
2. Tập lệnh của bộ vi xử lý
▪ Tập lệnh của 8086/8088 gồm hơn 100 ký
hiệu gợi nhớ (mnemonic) của lệnh ngôn
ngữ assembler cơ sở, để quy định cho
bộ vi xử lý phải làm gì.
▪ Gồm 6 nhóm lệnh
Nhóm lệnh Truyền dữ liệu (TDL)
7
3. Nhóm lệnh truyền dữ liệu
3.1. Lệnh di chuyển dữ liệu
▪ Ý nghĩa: Dùng để di chuyển byte (8 bit)
hoặc (16 bit)
▪ Cú pháp: MOV đích, nguồn
TDL - Lệnh di chuyển dữ liệu
8
Đích
Nguồn
Ví dụ
Ý nghĩa
Bộ nhớ
Thanh ghi
MOV 100H, AX
Chuyển nội dung trong AX vào vị trí
nhớ 100H.
Thanh ghi
Bộ nhớ
MOV AX, MEM1
Chuyển nội dung trong vị trí nhớ do
nhãn MEM1 chỉ ra vào thanh ghi AX.
Thanh ghi
Thanh ghi
MOV AX, BX
Chuyển nội dung trong BX vào thanh
ghi AX.
Thanh ghi
Tức thời
MOV AX, 0FFFFH
Chuyển giá trị hằng số FFFFH vào
thanh ghi AX; số 0 ở đầu được dùng
để phân biệt và chỉ rõ FFFFH là một
giá trị hằng chứ không phải là một
nhãn.
TDL - Lệnh XCHG
9
3.2. Lệnh XCHG - Exchange two operands
▪ Ý nghĩa: Hoán đổi nội dung 2 toán hạng.
▪ Cú pháp: XCHG đích, nguồn
Ví dụ
Ý nghĩa
XCHG AH, AL
Tráo nội dung AH và AL.
XCHG AL, [BX]
Tráo nội dung AL với ô nhớ có địa chỉ
DS:BX.
TDL - Lệnh IN
10
3.3. Lệnh IN- Input data from a port
▪ Ý nghĩa: Đọc dữ liệu từ cổng vào thanh
Acc.
▪ Cú pháp: IN Acc, Port
▪ Trong đó: Port là địa chỉ 8 bit của cổng,
nó có thể có giá trị trong khoảng
00H…FFH.
TDL - OUT
11
3.4. Lệnh OUT- Output a byte or word to a
port
▪ Ý nghĩa: Đưa dữ liệu ra cổng từ Acc.
▪ Cú pháp: OUT Port, Acc
TDL - LEA
12
3.5. Lệnh LEA - Load Effective Address
▪ Ý nghĩa: Lệnh nạp địa chỉ hiệu dụng vào
thanh ghi, nó không di chuyển nội dung
chứa trong địa chỉ đó. Đây là lệnh để tính
địa chỉ lệnh hoặc địa chỉ của ô nhớ chọn
làm gốc rồi nạp vào thanh ghi đã chọn.
▪ Cú pháp: LEA đích, nguồn
TDL - LEA
13
Ví dụ
LEA DX, MSG
Ý nghĩa
Nạp địa chỉ lệnh của bản tin
MSG vào DX.
LEA CX, [BX] [DI]
Nạp vào CX địa chỉ hiệu dụng do
BX và DI chỉ ra: EA=BX+DI.
TDL - PUSH/POP
14
3.6. Lệnh PUSH/POP
▪ Ý nghĩa: Lưu giữ tạm dữ liệu và các toán
hạng cần nhớ của chương trình. PUSH
cất dữ liệu vào ngăn xếp. POP lấy dữ
liệu từ ngăn xếp.
▪ Cú pháp: PUSH nguồn/ POP đích
TDL - PUSH/POP
15
Ví dụ
PUSH BX
Ý nghĩa
Lưu BX vào ngăn xếp, tại vị trí do SP chỉ
ra.
PUSH Table [BX]
Lưu 2 byte của vùng dữ liệu DS, có địa chỉ
đầu tại (Table+BX).
POP DX
Lấy 2 byte từ đỉnh ngăn xếp, đưa vào DX.
PUSH Table [BX]
Lấy 2 byte ở đỉnh ngăn xếp rồi để tại vùng
DS, có địa chỉ đầu tại (Table+BX).
TDL - PUSHF/POPF
16
3.7. Lệnh PUSHF/POPF
▪ Các nội dung của thanh ghi cờ có thể
được gửi vào hay lấy ra khỏi ngăn xếp.
Nhóm lệnh số học - ADD/SUB
17
4. Nhóm lệnh số học
4.1. Lệnh ADD/SUB
▪ Ý nghĩa: Thực hiện phép tính cộng (Add)
và trừ (Subtract).
▪ Cú pháp: ADD đích, nguồn/ SUB đích,
nguồn
Nhóm lệnh số học - ADD/SUB
18
Ví dụ: Sử dụng ngôn ngữ assembly viết
đoạn chương trình thực hiện cộng 5H với
3H, dùng các thanh ghi AL, BL.
Thực hiện
Ý nghĩa
MOV AL, 05H
AL 05H
MOV BL, 03H
BL 03H
ADD AL, BL
AL 05H+03H =08H
MOV 100H, AL
Di chuyển kết quả từ AL vào vị trí nhớ
DS:100H
Nhóm lệnh số học - MUL/DIV
19
4.2. Lệnh MUL/DIV
▪ Ý nghĩa: Thực hiện phép tính nhân
(Multiply) và chia (Divide).
▪ Cú pháp: MUL số nhân nguồn/ DIV số
chia nguồn
Nhóm lệnh số học - MUL/DIV
20
Ví dụ: Sử dụng ngôn ngữ assembly viết
đoạn chương trình thực hiện nhân 5H với
3H, dùng thanh ghi CL.
Thực hiện
Ý nghĩa
MOV AL, 05H
AL 05H (số được nhân)
MOV CL, 03H
CL 03H (số nhân)
MUL CL
AL 0FH (kết quả)
MOV MEM1, AL
Chuyển kết quả (0FH) từ AL vào vị trí
nhớ có nhãn MEM1.
Nhóm lệnh số học - MUL/DIV
21
Ví dụ: Sử dụng ngôn ngữ assembly viết
đoạn chương trình thực hiện chia 6H với
3H, dùng thanh ghi CL.
Thực hiện
Ý nghĩa
MOV AX, 0006H
AX 6H
MOV CL, 03H
CL 3H
DIV CL
AHAL 00H (số dư), 02H (thương số)
Chú ý: 6H→0006H lấp đầy thanh ghi AX.
Các byte trọng số cao AX bị xoá,tránh bị lỗi.
Nhóm lệnh số học - INC/DEC
22
4.3. Lệnh INC/DEC
▪ Ý nghĩa: Thực hiện tăng (increment)
hoặc giảm (decrement) 1 đơn vị vào toán
hạng.
▪ Cú pháp: INC đích/ DEC đích
Nhóm lệnh số học - NEG
23
4.4. Lệnh NEG- Negative a Operand
▪ Ý nghĩa: Lấy bù 2 của một toán hạng hay
đảo dấu toán hạng.
▪ Cú pháp: NEG đích
Ví dụ
Ý nghĩa
NEG AH
AH 0 - (AH)
NEG BYTE PTR[BX]
Lấy bù 2 của ô nhớ do BX chỉ ra
trong DS
Nhóm lệnh Logic - NOT
24
5. Nhóm lệnh Logic
5.1. Lệnh NOT
▪ Ý nghĩa: Đảo tất cả các bit trong toán
hạng
▪ Cú pháp: NOT đích
Nhóm lệnh Logic - NOT
25
Ví dụ: Xác định kết quả đoạn chương trình
Ví dụ
MOV
Ý nghĩa
BL, Nội dung của thanh ghi BL được nạp
00110011B
vào là 00110011B
NOT BL
Thực hiện phép NOT
MOV MEM1, BL Nội dung của thanh ghi BL là
11001100B và giá trị này được đưa
vào vị trí nhớ có nhãn MEM1