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

Tài liệu Giao tiếp giữa KIT vi xử lý 8086 và máy tính Nguồn, chương 4 pdf

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 (77.07 KB, 6 trang )

CHƯƠNG 4
KHẢO SÁT TỔNG QUÁT TẬP LỆNH CỦA VI XỬ LÝ 8086
I. CÁCH MÃ HOÁ LỆNH CỦA 8086
Vi xử lý 8086 có nhiều phương pháp đònh đòa chỉ và cũng có
nhiều khả năng kết hợp các phương pháp đó lại với nhau. Tuy
nhiên, một lệnh chỉ cần 6 byte để mã hóa, và byte bắt đầu là mã
công tác (Operations code), byte tiếp theo chứa kiểu đòa chỉ và
tiếp theo đó có thể là một hoặc hai byte dùng để chứa đòa chỉ.
Các byte cuối cùng gồm một hoặc hai chứa toán hạng 8 hoặc 16
bit.
Thực tế để biểu diển dạng thức các byte dùng để mã hóa
lệnh Mov. Ta ttấy rằng để mã hóa lệnh Mov ta phải cần ít nhất
là hai byte, trong đó 6 bit của byte đầu dùng để chứa mã lệnh.
Đối với lệnh Mov để chuyển dữ liệu kiểu:
- Thanh ghi  thanh ghi
- Bộ nhớ  thanh ghi
Thì bit đầu (opcode) này luôn là ‘100010’ (đối với thanh ghi
đoạn thì khác).
Đối với bit ‘D’ dùng để chỉ hướng đi của dữ liệu.
D = 0 thì dữ liệu đi từ thanh ghi cho bởi 3 bit của REG.
D = 1 dữ liệu đi đến thanh ghi cho bởi 3 bit REG.
Đối với bit W dùng để chỉ rằng một byte (W = 0) hoặc một
từ (W = 1) sẽ được chuyển.
Byte1 Byte 2 Byte 3 Byte 4
Opcod
e
R
EG
M
/R
Disp: displacement (dòch chuyển )


Trừ thanh ghi đoạn
D
W
Mod
Disp
L
Disp
H
Đòa chỉ trực tiếp phần
thấp
Đòa chỉ trực tiếp
phần cao
hoặc
II. KHẢO SÁT TỔNG QUÁT TẬP LỆNH CUẢ VXL 8086.
Tập lệnh của 8086 gồm 9 nhóm lệnh:
- Nhóm lệnh truyền số liệu.
- Nhóm lệnh số học.
- Nhóm lệnh thao tác chuỗi.
- Nhóm lệnh logic.
- Nhóm lệnh xử lý bit.
- Nhóm lệnh điều khiển chương trình.
- Nhóm lệnh ngôn ngữ bậc cao.
- Nhóm lệnh ở chế độ bảo vệ.
- Nhóm lệnh điều khiển các bộ vi xử lý.
Qua những nhóm lệnh giới thiệu trên nhóm thực hiện đề tài
chỉ khảo sát những nhóm lệnh thông dụng nhằm phục vụ cho
việc lập trình bằng ngôn ngữ máy.
2.1). Nhóm lệnh truyền số liệu:
Các lệnh truyền dữ liệu sẽ sao chép dữ liệu giữa thanh ghi
với thanh ghi, với bộ nhớ hoặc với khối vào-ra. Chúng có thể sử

dụng nhiều cách đònh đòa chỉ khác nhau. Trong cách viết lệnh
dưới dạng gợi nhớ: toán hạng đầu tiên là thanh ghi đích hoặc đòa
chỉ đích và tiếp sau dấu phẩy là thanh ghi nguồn hoặc đòa chỉ
nguồn. Khác với 8085, trong 8086 tất cả các lệnh truyền dữ liệu
đều dùng lệnh “Mov”
Truyền từ thanh ghi vào thanh ghi:
Mov (Reg1), (Reg2)
Nội dung (Reg2) được sao chép vào (Reg1).
Thí dụ: Mov AL, BL
Sao chép nội dung BL vào thanh ghi AL.
Truyền từ thanh ghi vào bộ nhớ:
Mov (Mem), (Reg)
Đối với lệnh byte, nội dung của thanh ghi được đưa vào đòa
chỉ của ô nhớ. Đối với lệnh word thì nội dung của thanh ghi
được đưa vào hai ô nhớ có đòa chỉ lần lược là (Mem) và (Mem +
1).
Thí dụ: Mov [1200], BL
Sao chép nội dung của thanh ghi BL vào ô nhớ có đòa chỉ
tương đối là 1200.
Truyền từ ô nhớ vào thanh ghi:
Mov (Reg), (Mem)
Đối với lệnh byte, nội dung ô nhớ được chép vào thanh ghi.
Đối với lệnh word, nội dung của 2 ô nhớ (Mem) và (Mem + 1)
được chép vào thanh ghi.
Thí dụ: Mov BL, [1500]
Sao chép nội dung ô nhớ tại đòa chỉ 1500 vào thanh ghi BL.
Mov BX, [1500]
Sao chép nội dung hai ô nhớ tại đòa chỉ 1500 và 1501 vào
thanh ghi BX (ô 1500 vào BL và ô 1501 vào BH)
Chú ý: nếu sử dụng AL hoặc AX trong các lệnh truyền từ

thanh ghi vào ô nhớ và ngược lại sẽ nhận được mã công tác
ngắn hơn khi sử dụng các thanh ghi khác.
Truyền tức thời vào thanh ghi:
Mov (Reg), (Data)
Trong lệnh này, dữ liệu được truyền tức thời vào thanh ghi.
Thí dụ: Mov BL, 20
Giá trò 20 được đưa vào thanh ghi BL.
Truyền tức thời vào bộ nhớ:
Mov (Mem), (Data)
Trong lệnh byte dữ liệu được truyền tức thời vào ô nhớ có
đòa chỉ (Mem). Trong lệnh word dữ liệu được truyền tức thời vào
2 ô nhớ có đòa chỉ (Mem) và (Mem + 1).
Thí dụ: Mov [1200], 50
Giá trò 50 được đưa vào ô nhớ có đòa chỉ 1200.
Mov Word PTR [1200], 50
Giá trò Word 0050 được đưa vào 2 ô nhớ bắt dầu tại đòa chỉ
1200:50 (LSB) vào đòa chỉ 1200:00 (MSB) vào đòa chỉ 1201
- Truy xuất trực tiếp cổng:
IN (Reg), (Port)
Đọc nội dung của cổng vào thanh ghi. thanh ghi sử dụng l2
AL (dạng byte) và AX (dạng Word), đòa chỉ cổng là một số 8 bit.
OUT (Reg), (Port)
Xuất nội dung của thanh ghi ra cổng.
- Truy xuất gián tiếp cổng:
IN (Reg), DX
Đọc nội dung của cổng có đòa chỉ chứa trong DX vào thanh
ghi. Thanh ghi sử dụng là AL hoặc AX, đòa chỉ cổng là số 16 bit.
OUT DX, (Reg)
Gởi nội dung thanh ghi ra cổng có đòa chỉ chứa trong
DX

2.2). Nhóm lệnh số học:
Bao gồm các phép tính cơ bản (cộng, trừ, nhân và chia) và
phép so sánh, toán hạng có thể là dữ liệu 8 bit hoặc 16 bit, kết
quả có thể là 8 bit, 16 bit hoặc 32 bit. Các toán hạng được chứa
trong thanh ghi bộ nhớ tức thời. Tùy theo thao tác, kết quả có
thể được chứa trong 1 hoặc 2 thanh ghi trong bộ nhớ.
 Phép cộng:
Vi xử lý 8086 thực hiện phép cộng có lưu ý số nhớ hoặc
không lưu ý số nhớ 8 bit hoặc 16 bit.
+ Số hạng đầu tiên được chứa trong các thanh ghi dữ
liệu (AX, BX, CX, DX, AH, AL, BH …), trog một thanh ghi chỉ
số hoặc một ô nhớ. Số hạng thứ hai có thể là tức thời trong thanh
ghi hoặc trong bộ nhớ. Hai số hạng không thể cùng ở trong bộ
nhớ, kết quả phép cộng được chứa trong toán hạng thứ nhất. Sau
đây là bảng liệt kê lệnh cộng dưới dạng gợi nhớ:
Cộng không lưu ý
số nhớ
Cộng có lưu ý số
nhớ
Thí dụ
ADD (accu), (data)
ADD (mem), (data)
ADD (reg), (data)
ADD (reg1), (reg2)
ADD (reg), (mem)
ADD (mem), (reg)
ADC (accu), (data)
ADC (mem),
(data)
ADC (reg), (data)

ADC (reg1), (reg2)
ADC (reg), (mem)
ADC (mem), (reg)
ADD AX, 1250
ADD Byte PTR
[0900],50
ADD BL, 50
ADC AL, AH
ADD CX, [0800]
ADC [0600], DL
 Phép trừ:
8086 có thể thực hiện phép trừ với 8 bit hoặc 16 bit, lệnh
SBB có lưu ý số thiếu và lệnh SUB không lưu ý số thiếu. Sau
đây là bảng liệt kê lệnh trừ dưới dạng gợi nhớ:
Trừ có số thiếu Trừ không có số
thiếu
Thí dụ
SUB (accu), (data)
SUB (mem), (data)
SUB (reg), (data)
SUB (reg1), (reg2)
SUB (reg), (mem)
SUB (mem), (reg)
SBB (accu), (data)
SBB (mem), (data)
SBB (reg), (data)
SBB (reg1), (reg2)
SBB (reg), (mem)
SBB (mem), (reg)
SUB AX, 1230

SBB Byte PTR
[5000], 90
SUB BL, 50
SBB AL, DL
SUB CX, [1230]
SBB [0300], DL

×