Tải bản đầy đủ (.docx) (23 trang)

Nghiên cứu tìm hiểu về tập lệnh vi xử lý 8086

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 (427.98 KB, 23 trang )

Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA: CÔNG NGHỆ THƠNG TIN
----------o0o---------

BÀI TẬP LỚN
MƠN: KIẾN TRÚC MÁY TÍNH
Đề tài:Nghiên cứu tìm hiểu
về tập lệnh vi xử lý 8086
Giáo viên hướng dẫn: T.s Nguyễn Thanh Hải

Nhóm thực hiện: Nhóm 1

Lớp: Tin 1 – K 15

Bài tập lớn môn kiến trúc máy tính – Nhóm 1 Page1


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

Hà Nội: 2014

LỜI NÓI ĐẦU
Khoa học ngày càng phát triển mạnh mẽ, nhu cầu sử dụng những công nghệ ngày
càng cao, yêu cầu độ chính xác và năng suất hoạt động cao. Từ yêu cầu đó, con


người cần phải sản xuất và phát minh ra những công cụ, sản phẩm ứng dụng và
phát triển ngành cơng ngệ lập trình.
Đi tiên phong thế hệ vi xử lý lập trình theo nhu cầu mong muốn con người, nhà sản
xuất chip vi xử lý Intel đã phát triển và chế tạo thành công chip 4004 vào năm
1971. Là bộ vi xử lý 4 bit đầu tiên mở đầu cho kỷ nguyên thế hệ vi xử lý trong máy
tính.
Một mốc son quan trọng nhất mà Intel đạt được đó là hãng đã sản xuất ra bộ vi xử
lý mang tên 8086 có độ rộng dữ liệu lên đến 16 bit với 29000 bóng bán dẫn được
tích hợp bên trong. đây là bộ vi xử lý mở đầu cho họ vi xử lý x86.
Bộ vi xử lý 8086 đã mang lại sự bùng nổ công nghệ với sự có mặt trong hầu hết
các máy tính ở thời ký này. Để hiểu rõ hơn về cấu tạo và cách ghép nối giữa bộ vi
xử lý với các thiết bị ngoại vi, chúng em xin trình bày một số ví dụ cụ thể trong bài
báo cáo này.

Bài tập lớn mơn kiến trúc máy tính – Nhóm 1 Page2


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

Nhận xét và đóng góp ý kiến của giáo viên:
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................

.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
Bài tập lớn mơn kiến trúc máy tính – Nhóm 1 Page3


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

.....................................................................................................................................
.....................................................................................................................................

.....................................................................................................................................
Chúng em xin chân thành cảm ơn!

Phụ lục:
I. TỔ CHỨC LỆNH CỦA VI XỬ LÝ 8086……………….……….…………….…….5
1. Dạng lệnh………………………………………...………………...………….….……5
2. Địa chỉ hiệu dụng…………………………………………………………………...…5
II. CẤU TRÚC BÊN TRONG CỦA VI XỬ LÝ 8086…………………………...….....7
1. Sơ đồ khối…………………………………………………………...…………..……..7
2. Bộ thanh ghi…………………………………………………………………..……….9
2.1 Bộ thanh ghi đa dụng………………………………………………….……………..9
2.2 Bộ thanh đoạn và con trỏ lệnh………………………………………………………9
2.3 Thanh ghi trạng thái………………………………………………………………..10
III. CÁC LỆNH THƯỜNG DÙNG CỦA CPU 8086…………………………..…..…10
1. Giới thiệu……………………………………………………………………….….…10
2. Nhóm di chuyển số liệu………………………………………………………...…….11
3. Nhóm lệnh chuyển địa chỉ……………………………………………………..…….12
4. Nhóm lệnh chuyển cờ hiệu (thanh ghi trạng thái)…………………….………..….12
5. Nhóm lệnh vào ra ngoại vi…………………………………………………………..12
6. Nhóm lệnh điều khiển………………………………………………………………..13
7. Nhóm lệnh so sánh……………………………………………………………....…...14
8. Nhóm lệnh vịng lặp………………………………………………….………………14
9. Nhóm lệnh gọi chương trình con…………………………………………....………15
10. Nhóm lệnh tính tốn số học………………………………………….……………..16
11. Nhóm lệnh dịch chuyển và quay………………………………………….………..18
12. Nhóm lệnh logic………………………………………………………………….….20
13. Nhóm lệnh xử lý chuỗi………………………………………………………….…..21
Bài tập lớn môn kiến trúc máy tính – Nhóm 1 Page4



Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

14. Các lệnh khác……………………………………………………………………….23

I. TỔ CHỨC LỆNH CỦA VI XỬ LÝ 8086 :
1. Dạng lệnh :
- Một lệnh của vi xử lý 86 có dạng tổng quát như sau :
<Mã gợi nhớ><Tốn hạng đích>,<Tốn hạng nguồn>
- Mã gợi nhớ giúp cho người sử dụng biết hoạt động của lệnh. Mã gợi nhớ thường là các
chữ tiếng anh viết tắt như : MOV là lệnh chuyển, ADD là lệnh cộng, AND là lệnh và luận
lý, JMP là lệnh nhảy . . .
- Tốn hạng đích giữ kết quả (nếu có u cầu) sau khi thi hành lệnh. Tốn hạng đích có
thể là thanh ghi hay bộ nhớ.
- Tốn hạng nguồn có thể là thanh ghi, bộ nhớ hay một số tức thời.
- Toán hạng thanh ghi là các thanh ghi của vi xử lý 86 gồm các thanh ghi tổng quát (8 bit
lẫn 16 bit) và các thanh ghi đoạn đã biết.
- Tốn hạng số tức thời có thể là số trong các hệ đếm khác nhau và được viết theo qui
định như sau :
. Số hệ 2 : ××××××××B (× là 1 bit nhị phân).
Ví dụ : 01101101B, 11111111B
. Số hệ 10 : ××××× , hay ×××××D (× là một số thuộc hệ 10).
Ví dụ : 65535, 1000
. Số hệ 16 : ××××H và bắt đầu bằng số ( là một số thuộc hệ 16).
Ví dụ : 1A59H, 0E05BH
- Tốn hạng bộ nhớ dùng trong tập lệnh vi xử lý 86 sử dụng phương pháp định địa chỉ
tổng hợp được gọi là địa chỉ hiệu dụng.

2. Địa chỉ hiệu dụng :

- Địa chỉ hiệu dụng là tổ hợp của 3 nhóm sau được đặt trong dấu ngoặc vng [ ]:
. Nhóm thanh ghi chỉ số : SI, DI
. Nhóm thanh ghi nền : BX, BP
Bài tập lớn môn kiến trúc máy tính – Nhóm 1 Page5


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

. Địa chỉ trực tiếp : số 16 bit
- Các thanh ghi trong cùng một nhóm khơng được xuất hiện trong cùng một địa chỉ hiệu
dụng.
- Ví dụ :
- Địa chỉ hiệu dụng hợp lệ :
[1000h], [SI], [DI], [BX], [BP]
[SI+BX], [SI+BP], [DI+BX], [DI+BP], [SI+1000h], [DI+100h], [BX+1], [BP+1]
[SI][BX][1000h], [SI+ BP+1000h], [DI+BX][1000h], [DI+1000h][BP]
- Địa chỉ hiệu dụng không hợp lệ :
[70000], [AX], [SI+DI+1000h], [BX][BP]
- Địa chỉ hiệu dụng chính là thành phần offset của địa chỉ luận lý bộ nhớ.
- Segment của địa chỉ hiệu dụng được mặc định như sau :
- Nếu khơng sử dụng BP trong địa chỉ hiệu dụng thì mặc định theo thanh ghi DS.
- Nếu có BP trong địa chỉ hiệu dụng thì mặc định theo thanh ghi SS.
- Các hoạt động thực hiện trên bộ nhớ thông qua địa chỉ hiệu dụng chia ra làm 2 trường
hợp : hoạt động 8 bit và hoạt động 16 bit.
- Hoạt động bộ nhớ 8 bit làm việc trên 1 byte bộ nhớ ngay vị trí chỉ ra bởi địa chỉ hiệu
dụng.
- Hoạt động bộ nhớ 16 bit sẽ làm việc trên 2 byte bộ nhớ có địa chỉ kế tiếp nhau và nội
dung của chúng được ghép lại thành dữ liệu 16 bit theo qui tắc "byte cao địa chỉ cao, byte

thấp địa chỉ thấp" như trong hình sau :

- Để thuận tiện trong vấn đề giải thích lệnh, ta qui ước thêm cách diễn tả sau :
- Dữ liệu 8 bit của bộ nhớ : [địa chỉ ]
- Dữ liệu 16 bit của bộ nhớ : [địa chỉ +1,địa chỉ]
Bài tập lớn mơn kiến trúc máy tính – Nhóm 1 Page6


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

- Để xác định rõ hoạt động của bộ nhớ, ta phải dùng thêm toán tử PTR như sau :
- Hoạt động 8 bit : BYTE PTR [1000h] là tham khảo 1 byte bộ nhớ có địa chỉ 1000h
- Hoạt động 16 bit : WORD PTR [1000h] là tham khảo đến 2 byte bộ nhớliên tiếp 1000h
và 1001h

II. CẤU TRÚC BÊN TRONG CỦA VI XỬ LÝ 8086
1. Sơ đồ khối :
- Các phép toán xử lý bên trong CPU là phép toán thực hiện trên số nhị phân 8 và 16 bit.
- Tuyến địa chỉ có 20 đường nên có thể quản lý lên đến 1 MB bộ nhớ (tầm địa chỉ từ
00000h đến FFFFFh).

Sơ đồ khối tập lênh 8086
Cho phép sử dụng hệ thống ngắt quãng và cơ chế DMA (Direct Memory Access).
- Sơ đồ khối vi xử lý 8086 gồm hai phần chính : khối giao tiếp Bus (BIU:Bus interface
unit) và khối thực thi (EU:Execution unit).
- Khối BIU chịu trách nhiệm lấy lệnh và giao tiếp ra bên ngoài để điều khiển bộ nhớ và
xuất nhập.
Bài tập lớn môn kiến trúc máy tính – Nhóm 1 Page7



Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

- Khối EU có nhiệm vụ thi hành lệnh, định thì, kiểm tra các tín hiệu trạng thái, các tín
hiệu yêu cầu ngắt quãng, cơ chế DMA, tín hiệu RESET, tín hiệu READY.
- Các lệnh trong bộ nhớ được khối BIU lấy vào liên tục và cất trong đi lệnh (có chiều
dài 6 byte đối với 8086). Sau đó khối EU lấy lệnh từ đuôi lệnh ra để giải mã và thi hành.
- Hoạt động của hai khối BIU và EU diễn ra độc lập với nhau nên quá trình lấy lệnh và
thi hành lệnh được vi xử lý thực hiện đồng thời theo cơ cấu đường ống (pipeline). Điều
này tuy không làm tăng tốc độ xử lý của CPU (giới hạn bởi tần số xung đồng bộ) nhưng
làm giảm bớt thời gian thi hành của cả chương trình.
- Hình sau minh họa về sự phân phối thời gian cho hai quá trình lấy lệnh và thi hành lệnh
của CPU bình thường và của CPU dùng cơ cấu đường ống.

- Tuyến địa chỉ dữ liệu dùng chung AD15 ÷ AD0 cần có tín hiệu điều khiển ALE để phân
biệt lúc nào là địa chỉ lúc nào là dữ liệu. Chỉ khi ALE = 1, tín hiệu trên tuyến chung được
xem là địa chỉ. Trường hợp còn lại xem là tuyến dữ liệu.
- Thường thì phải nhờ một mạch cài địa chỉ và một mạch đệm 2 chiều để tách tuyến
chung ra thành hai tuyến phân biệt

Bài tập lớn môn kiến trúc máy tính – Nhóm 1 Page8


Trường ĐH Công Nghiệp Hà Nội

2. Bộ thanh ghi :
2.1 Bộ thanh ghi đa dụng :

- Gồm 8 thanh ghi 16 bit.
- Các thanh ghi AX, BX, CX, DX có thể dùng
phân nửa như các thanh ghi 8 bit AH, AL, BH,
BL, CH, CL, DH, DL.
- Thanh ghi AH là nửa cao của thanh ghi AX.
Thanh ghi AL là nửa thấp của thanh ghi AX.
Chẳng hạn nếu AX= 1234h thì AH=12h và
AL=34h.
- AX là thanh ghi bộ tích lũy 16 bit (ACC).
- AL là thanh ghi bộ tích lũy 8 bit.
- BX là thanh ghi nền (base register).
- CX là thanh ghi bộ đếm (counter).
- DX là thanh ghi dữ liệu (data).
- SI là thanh ghi chỉ số nguồn (source index).
- DI là thanh ghi chỉ số đích (destination index).
- BP là thanh ghi con trỏ nền (base pointer).
- SP là thanh ghi con trỏ chồng (stack pointer).
2.2 Bộ thanh đoạn và con trỏ lệnh :
- Gồm 4 thanh ghi đoạn 16 bit dùng để quản lý bộ
nhớ theo phương pháp phân đoạn.
Bài tập lớn mơn kiến trúc máy tính – Nhóm 1 Page9

Lớp: CĐ CNTT1 – K15


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

- CS là thanh ghi đoạn chương trình (code segment).

- DS là thanh ghi đoạn dữ liệu (data segment).
- SS là thanh ghi đoạn chồng (stack segment).
- ES là thanh ghi đoạn mở rộng (extra segment).
- IP là thanh ghi con trỏ lệnh (instruction pointer).
2.3 Thanh ghi trạng thái :

- SF là cờ dấu (sign flag).
- CF là cờ nhớ (carry flag).
- ZF là cờ không (zero flag).
- OF là cờ tràn (overflow flag).
- AF là cờ trung gian (auxiliary flag) hay còn gọi là cờ nhớ nửa (half-carry flag).
AF = 0 khi khơng có sự tràn về dung lượng 4 bit.
AF = 1 khi có sự tràn về dung lượng 4 bit.
Ví dụ : phép tốn 00001001 + 00000111 = 00010000 sẽ lập cờ AF lên 1.
- Cờ AF thường được dùng trong các phép toán BCD (là các số dùng hệ nhị phân 4
bit để biểu diễn số thập phân từ 0 ÷ 9).
- PF là cờ kiểm tra chẳn lẻ (parity flag).
PF = 1 nếu số bit 1 của kết quả là số chẳn.
PF = 0 nếu số bit 1 của kết quả là số lẻ.
Ví dụ : sau khi thực hiện (00000101 AND 00000101) thì PF = 1.
- DF là cờ định hướng (direction flag).
DF = 0 : định hướng giảm địa chỉ cho các lệnh xử lý chuỗi.
DF = 1 : định hướng tăng địa chỉ cho các lệnh xử lý chuỗi.
- IF là cờ ngắt quãng (interrupt enable flag).
IF = 0 : cấm ngắt cứng INTR.
IF = 1 : cho phép ngắt cứng INTR.
Bài tập lớn mơn kiến trúc máy tính – Nhóm 1 Page10


Trường ĐH Công Nghiệp Hà Nội


Lớp: CĐ CNTT1 – K15

- TF là cờ bẫy (trap flag). Dùng để chạy từng bước khi cần kiểm tra hoạt động của CPU.

III. CÁC LỆNH THƯỜNG DÙNG CỦA CPU 8086
1. Giới thiệu
Bộ xử lý 8086 có tập lệnh gồm 111 lệnh, chiều dài của lệnh từ 1 byte đến vàibyte.
Tập lệnh của bộ xử lý Intel ngày càng có nhiều lệnh mạnh và phức tạp. Bộ xử lý Intel
80386 có 206 lệnh, các lệnh có chiều dài từ 1 đến 15 byte, một số lệnh cần 1000 chu kỳ
xung nhịp để thực hiện.
Sau đây chúng ta chỉ đề cập một số lệnh thường dùng của CPU 8086. Tập lệnh đầy đủ
của bộ xử lý 8086 được nêu ở phụ lục. Tập lệnh của bộ xử lý 80386 và Pentium khơng đề
cập trong giáo trình này vì quá phức tạp.
Chúng ta dùng các qui ước sau:
- Reg (register): Thanh ghi.
- Reg8, Reg16: Thanh ghi 8 bit, 16 bit.
- Mem (memory): Ô nhớ.
- Mem8, Mem16: Ô nhớ 8 bit, 16 bit.
- Immed (immediate): Tức thì.
- Immed8, Immed16: Tốn hạng tức thì 8 bit, 16 bit.
- Segreg (segment register): Thanh ghi đoạn.
2. Nhóm di chuyển số liệu
- MOV (move): Di chuyển.
MOV đích, nguồn Lệnh này di chuyển số liệu từ nguồn sang đích. Nguồn có thể là Reg,
Mem, Immed; đích có thể là Reg, Mem.
- PUSH (push): đẩy vào.
PUSH nguồn
Nguồn có thể là Reg16, Mem16.
Lệnh PUSH là giảm con trỏ ngăn xếp SP xuống 2 đơn vị.

- POP (pop: lấy, di chuyển): lấy dữ liệu ra từ ngăn xếp.
POP đích
Đích có thể là Reg16, Mem16.
Bài tập lớn mơn kiến trúc máy tính – Nhóm 1 Page11


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

Lệnh POP là tăng con trỏ ngăn xếp SP xuống 2 đơn vị.
Ví dụ: POP BX
Lệnh trên thực hiện chuyển nội dung 2 byte ô nhớ mà SP trỏ tới để đưa vào BX, byte có
địa chỉ thấp đưa vào BL, byte có địa chỉ cao đưa vào BH, đồng thời con trỏ SP tăng 2 đơn
vị.
Ghi chú: Qua 2 lệnh PUSH và POP, ta thấy ngăn xếp ô nhớ đi từ ơ nhớ có địachỉ cao,
đến ơ nhớ có địa chỉ thấp, nghĩa là số liệu đưa vào ngăn xếp trước thì địa chỉcao, số liệu
đưa và ngăn xếp sau thì ở địa chỉ thấp hơn.
3. Nhóm lệnh chuyển địa chỉ
- LEA (load effective address): nạp địa chỉ hiệu dụng.
LEA Reg16, Mem16
Chuyển độ dời của ô nhớ Mem16 vào thang ghi Reg16.
Ví dụ: LEA DX, StringVar
Lệnh trên thực hiện chuyển độ dời của biến StringVar vào thanh ghi DX. Ta cũng có thể
viết (MASM): MOV DX, offset StringVar tương đương lệnh trên.
4. Nhóm lệnh chuyển cờ hiệu (thanh ghi trạng thái)
- PUSHF (push flag): lưu giữ cờ.
PUSHF (khơng có đối)
Đây là lệnh lưu giữ thanh ghi cờ vào ngăn xếp.
- POPF (pop flag): lấy cờ ra.

POPF (khơng có đối)
Ví dụ: Để đưa nội dung của thanh ghi cờ vào thanh ghi AX ta làm như sau:
PUSHF
POP AX
Đây là lệnh lấy 2 byte từ ngăn xếp đưa vào thanh ghi cờ.
5. Nhóm lệnh vào ra ngoại vi
- IN (in: vào): lấy số liệu từ ngoại vi.
IN AL, địa chỉ cổng 8bit
Đây là lệnh đưa số liệu lưu giữ ở ô nhớ đệm ngã ra của cổng vào thanhghi AL.
Bài tập lớn mơn kiến trúc máy tính – Nhóm 1 Page12


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

Nếu địa chỉ của cổng là 16bit thì phải đưa địa chỉ của cổng này vào thanh ghi DX trước
khi sử dụng lệnh IN.
Ví dụ:
IN AL, 3FH ;3FH là địa chỉ của cổng 8bit.
MOV DX, 3F8H ;3F8H là địa chỉ cổng 16 bit.
IN AL, DX
- OUT (out: ra): đưa số liệu ra ngoại vi.
OUT địa chỉ cổng 8bit, AL
MOV DX, địa chỉ cổng 16 bit.
OUT DX, AL
6. Nhóm lệnh điều khiển
- JMP (jump: nhảy): đây là lệnh nhảy vô điều kiện đến một địa chỉkhác.
- JMP đích
Nhảy đến địa chỉ được đánh dấu bằng một nhãn hay một con số ám chỉđộ dời. Nhãn nằm

trong đoạn CS hiện tại.
Tuỳ theo khoảng cách của đích đến lệnh JMP mà ta có 3 kiểu lệnh này.
JMP near đích
Lệnh này (cịn được viết: JMP đích) nhảy đến đoạn nằm trong CS hiện
tại.
JMP short đích
Dùng để nhảy đến địa chỉ trong khoảng –128 đến +127 tính từ lệnh
JMP.
JMP far đích
Dùng để nhảy ra khỏi đoạn CS hiện tại.
- Lệnh nhảy có điều kiện: Lệnh này kiểm tra điều kiện trước khi nhảy.
Nếu điều kiện đúng thì nhảy tới đích, ngược lại thi hành lệnh kế đó mộtcách bình thường.
- JA (jump if above: nhảy nếu lớn hơn). Nếu 2 cờ CF=ZF=0 thì nhảy đếnđích.
- JB (jump if below: nhảy nếu nhỏ hơn). Nếu cờ CF=1 thì nhảy đến đích.
Bài tập lớn mơn kiến trúc máy tính – Nhóm 1 Page13


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

- JZ (jump if zero: nhảy nếu bằng 0). Nếu cờ ZF=1 (phép tốn trước đóbằng 0 hoặc so
sánh bằng nhau) thì nhảy.
- JNZ (jump if not zero: nhảy nếu khác 0). Nếu cờ ZF=0 (phép tốntrước đó khác 0 hoặc
so sánh khác nhau) thì nhảy.
7. Nhóm lệnh so sánh
- Lệnh CMP
- CMP trái, phải
Nếu trái > phải thì ZF = 0 và CF =0
Nếu trái = phải thì ZF = 1 và CF =0

Nếu trái < phải thì ZF = 0 và CF =1
Ví dụ:
MOV AX, 1000H
CMP AX, 200H
JZ NHANDEN ; nhãn đến


NHANDEN:
ADD AX, BX
8. Nhóm lệnh vịng lặp
- LOOP (loop: nhảy vòng): Lệnh này làm giảm thanh ghi CX xuống 1và nhảy tới một
nhãn (trong vòng –128 đến 127) nếu CX khác 0.
Ví dụ:
MOV AH, 02H
MOV DL, 48
MOV CX, 10 ; lặp 10 lần
BATDAU:
INT 21H
INC DL
LOOP BATDAU
Bài tập lớn mơn kiến trúc máy tính – Nhóm 1 Page14


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15



- LOOPZ (loop if zero: nhảy nếu bằng 0)

Nhảy vòng nếu cờ ZF =1.
- LOOPNZ (loop if not zero: nhảy nếu khác 0)
Nhảy vịng nếu cờ ZF =0.
9. Nhóm lệnh gọi chương trình con
- CALL (call: gọi): lệnh gọi chương trình con.
CALL Nhản (hoặc tên chương trình con)
Lệnh gọi chương trình con là một lệnh đặc biệt vì trước khi nhảy tới nhãn thì CPU tự
động lưu địa chỉ trở về (là địa chỉ sau lệnh CALL) vào ngăn xếp.
- RET (return: trở về). Lệnh kết thúc chương trình con.
Khi gặp lệnh này thì CPU 8086 lấy địa chỉ trở về ở ngăn xếp để tiếp tục thi hành lệnh ở
chương trình chính.
Ví dụ: Chương trình sau sử dụng Macro, Procedure.
INCHU Macro
mov ah,02
mov dl, 'A'
int 21h
ENDM
dulieu segment
thongbao db 'hello!$'
dulieu ends
malenh1 segment
P2 Proc far
mov ah,02
mov dl, 'C'
int 21h
Bài tập lớn môn kiến trúc máy tính – Nhóm 1 Page15


Trường ĐH Công Nghiệp Hà Nội


Lớp: CĐ CNTT1 – K15

ret
P2 Endp
malenh1 ends
malenh2 segment
malenh group malenh1, malenh2
assume cs: malenh, ds: dulieu
batdau: mov ax, dulieu
mov ds, ax ;khoi dong
lea dx, thongbao ; in thong bao nhap chuoi
mov ah, 09h
int 21h
inchu ;goi macro
call pinchu ;goi ctrinh con
call p2 ;goi ctrinh con
mov ah, 4ch
int 21h
PINCHU Proc near
mov ah,02
mov dl, 'B'
int 21h
ret
PINCHU Endp
malenh2 ends
end batdau
10. Nhóm lệnh tính tốn số học
- ADD (add: cộng): cộng 2 số nguyên, lấy nguồn cộng vào đích và kếtquả lưu ở đích.
ADD đích, nguồn
Bài tập lớn mơn kiến trúc máy tính – Nhóm 1 Page16



Trường ĐH Cơng Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

Đích là Reg, Mem; nguồn là Reg, Mem hoặc Immed.
Ví dụ:
MOV AL, 02
ADD AL, 06
(Sau 2 lệnh này AL = 08 tức là AL = 02+06)
- INC (increment: tăng)
INC đích
Đích là Reg, Mem. Lệnh này tăng nội dung của đích lên 1 đơn vị.
Ví dụ:
MOV AL, 02
INC AL ;Sau 2 lệnh này AL = 3.
- SUB (subtract: trừ ra): lấy đích trừ nguồn và kết quả lưu ở đích.
SUB đích, nguồn
Đích là Reg, Mem; nguồn là Reg, Mem hoặc Immed.
Ví dụ:
MOV AL, 09
SUB AL, 06
(Sau 2 lệnh này AL = 03 tức là AL = 09-06)
- DEC (decrement: giảm)
DEC đích
Đích là Reg, Mem. Lệnh này giảm nội dung của đích xuống 1 đơn vị.
Ví dụ:
MOV AL, 02
DEC AL ;Sau 2 lệnh này AL = 1.

- MUL (multiplication: phép nhân): nhân số không dấu.
MUL nguồn
Nguồn là Reg, Mem. Lệnh này lấy thanh ghi tích luỹ (AX) nhân chonguồn.
Nếu nguồn 8bit thì số này được nhân AL và kết quả đặt trong AX.
Bài tập lớn mơn kiến trúc máy tính – Nhóm 1 Page17


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

Nếu nguồn là 16 bit, số này được nhân với AX và kết quả để trong
DX:AX (DX:AX là một số 32 bit, 16 bit cao trong DX và 16 bit thấp trong AX).
Ví dụ:
MOV AL, 9
MOV BL, 2
MUL BL
(Sau 3 lệnh này AL có giá trị bằng 18).
- DIV (division: phép chia): chia số không dấu.
DIV nguồn
Nguồn là Reg, Mem. Lệnh này lấy thanh ghi tích lũy (AX) chia cho nguồn.
Nếu nguồn 8bit thì lấy AX chia cho nguồn, kết quả đặt trong AL và sốdư đặt trong AH.
Nếu nguồn là 16 bit thì lấy DX:AX chia cho nguồn. Thương số đặt trong AX, số dư đặt
trong DX.
Ví dụ:
MOV AX, 9520
MOV BL, 100
DIV BL
(Sau 3 lệnh này AL = 95 và AH = 20 vì 9520 : 100 = 95 và dư 20).
11. Nhóm lệnh dịch chuyển và quay

- SHL (logical shift left): dịch trái logic.
SHL đích, 1 ; dịch trái tốn hạng đích 1 bit (dịch từ 2 bit trở lên
phải đặt số lần dịch trong CL).
SHL đích, CL ; dịch trái toán hạng số bit bằng nội dung của CL.

Trong hình trên, giả sử tốn hạng đích là 8bit thì lệnh SHL đích, 1 làm bít thứ 7 dịch sang
bit CF (cờ), bít 6 chuyển sang bit7, bít5 sang bit6,… bit0 qua bit1 và số 0 vào bit0.
- SHR (logical shift right): dịch phải logic.
Bài tập lớn môn kiến trúc máy tính – Nhóm 1 Page18


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

Lệnh này giống như SHL nhưng bây giờ dịch phải

Trong hình trên, giả sử tốn hạng đích là 8bit thì lệnh SHR đích, 1 làm 0 vào bít7, bit7
sang bít 6,… bit0 dịch sang bit CF (cờ).
- SAL (shift arithmetic left): dịch trái số học.
Giống như lệnh SHL nhưng bit0 được giữ nguyên

- SAR (shift arithmetic right): dịch phải số học.
Giống như lệnh SHL nhưng bit cao nhất được giữ nguyên.

- ROL (rotate left): quay vịng sang trái.
ROL đích, 1 ; quay vịng sang trái tốn hạng đích 1 bit (quay vòng sang trái từ 2 bit trở
lên phải đặt số lần dịch trong CL).
ROL đích, CL ; dịch trái tốn hạng số bit bằng nội dung của CL.


- ROR (rotate right): quay vòng sang phải (giống như quay vòng sang trái nhưng bây giờ
sang phải).
ROR đích, 1
ROL đích, CL
- RCL (rotate through carry left): quay vòng qua bit số giữ sang trái, giống như lệnh ROL
nhưng có sự tham gia của bit số giữ.

Bài tập lớn môn kiến trúc máy tính – Nhóm 1 Page19


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

- RCR (rotate through carry right): quay vòng qua bit số giữ sang phải, giống như lệnh
RCL nhưng sang phải.
12. Nhóm lệnh logic
- AND (and: và): lệnh này lấy từng bit của tốn hạng đích and với từng bit của tốn hạng
nguồn, kết quả lưu ở đích.
AND đích, nguồn
Đích là Reg, Mem; nguồn là Reg, Mem hoặc Immed.
Ví dụ:
MOV AL, 01010101B
AND AL, 00001111B
(Sau 2 lệnh này AL = 00000101B)
- OR (or: hoặc): lệnh này lấy từng bit của tốn hạng đích or với từng bit của toán hạng
nguồn, kết quả lưu ở đích.
OR đích, nguồn
Đích là Reg, Mem; nguồn là Reg, Mem hoặc Immed.
Ví dụ:

MOV AL, 01010101B
OR AL, 00001111B
(Sau 2 lệnh này AL = 01011111B)
- XOR (xor: hoặc loại): lệnh này lấy từng bit của tốn hạng đích xor với từng bit của tốn
hạng nguồn, kết quả lưu ở đích.
XOR đích, nguồn
Đích là Reg, Mem; nguồn là Reg, Mem hoặc Immed.
Ví dụ:
MOV AL, 01010101B
XOR AL, 00001111B
Bài tập lớn môn kiến trúc máy tính – Nhóm 1 Page20


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

(Sau 2 lệnh này AL = 01011010B)
- NOT (not: đảo): lệnh này lấy đảo từng bit của tốn hạng đích.
NOT đích
Đích là Reg, Mem.
Ví dụ:
MOV AL, 01010101B
NOT AL
(Sau 2 lệnh này AL = 10101010B)
- TEST (test: trắc nghiệm): lệnh này giống như lệnh AND nhưng không lưu giữ kết quả
mà chỉ ảnh hưởng đến các cờ.
TEST đích, nguồn
13. Nhóm lệnh xử lý chuỗi
- MOVSB (move string byte): di chuyển chuỗi từng byte một.

- MOVSW (move string word): di chuyển chuỗi từng 16 bit.
- CMPSB (compare string byte): so sánh chuỗi từng byte một.
- CMPSW (compare string word): so sánh chuỗi từng 16 bit.
- SCASB (scan string byte): quét chuỗi từng byte một. Giáo trình Assembler
- SCASW (scan string word): quét chuỗi từng 16 bit.
- LODSB (load string byte): nạp chuỗi từng byte một.
- LODSW (load string word): nạp chuỗi từng 16 bit.
- STOSB (store string byte): lưu chuỗi từng byte một.
- STOSW (store string word): lưu chuỗi từng 16 bit.
Cách dùng các lệnh giống nhau và thường phải qua các bước sau:
Bước 1: Xác định chiều xử lý chuỗi.
DF = 0: chuỗi xử lý theo chiều địa chỉ tăng.
DF = 1: chuỗi xử lý theo chiều địa chỉ giảm.
Bước 2: Số lượng phần tử cần xử lý được nạp vào thanh ghi đếm CX.
Bước 3: Đưa địa chỉ của chuỗi vào đúng vị trí.
Bài tập lớn mơn kiến trúc máy tính – Nhóm 1 Page21


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

Địa chỉ chuỗi nguồn đưa vào DS:SI.
Địa chỉ chuỗi đích đưa vào ES:DI.
Bước 4: Chọn một vịng lặp thích hợp REP, REPE, REPNE.
Lệnh REP (repeat: lặp lại): lặp lại lệnh theo sau nó đến khi CX=0.
Lệnh REPE (repeat if equal: lặp lại nếu bằng nhau): lặp lại lệnh theo sau nó nếu
ZF=1.
Lệnh REPNE (repeat if not equal: lặp lại nếu không bằng nhau): lặp lại lệnh theo
sau nó nếu ZF=0.

Bước 5: Đặt lệnh xử lý chuỗi thích hợp.
Ví dụ 1: Chuyển 100 byte từ ơ nhớ nguồn đến ơ nhớ đích.
CLD ;DF=0, SI và DI tự động tăng 1 sau mỗi lần lặp,
;lệnh này được giới thiệu phần dưới.
LEA SI, nguồn
LEA DI, đích
MOV CX, 50
REP MOVSW ; Tự động chuyển 100 byte.
Ví dụ 2: So sánh 10 byte của 2 vùng ô nhớ trong DS.
CLD ;DF=0, muốn DF=1 ta dùng lệnh STD.
PUSH DS
PUSH ES
MOV SI, 7000H
MOV DI, F000H
MOV CX, 10
REPE CMPSB
JNZ NOTEQ ;NOTEQ là một nhãn chương trình sẽ nhảy
;tới nếu xuất hiện 2 byte khơng giống nhau.
Ví dụ 3: Tìm chữ 'A' trong chuỗi 100 ký tự.
Bài tập lớn môn kiến trúc máy tính – Nhóm 1 Page22


Trường ĐH Công Nghiệp Hà Nội

Lớp: CĐ CNTT1 – K15

CLD ;DF=0, muốn DF=1 ta dùng lệnh STD.
MOV CX, 100 Trang 15
LEA DI, chuỗi
MOV AL, 'A'

REPNE SCASB ;so sánh mỗi byte của chuỗi với ký tự 'A'.
JCXZ NOTE ;NOTE là một nhãn chương trình sẽ nhảy
;tới nếu khơng tìm thấy 'A'.
;(jump if CX equal zero)
14. Các lệnh khác
- CLC (clear carry flag): xóa cờ zero - CF.
- CLD (clear direction flag): xóa cờ hướng - DF.
- CLD (clear interrupt flag): xóa cờ ngắt - IF.
- CMC (complement carry flag): đổi ngược cờ CF.
- HLT (halt): dừng, CPU ngưng hoạt động.
- INT (interrupt): gọi ngắt.
- IRET (return from interrupt): trở về chương trình chính từ chương trình phục vụ ngắt.
- LOCK: khố bus hệ thống.
- NOP (no operation): khơng có tác vụ.
- WAIT: đợi cho đến khi có xung ở chân TEST của CPU 8086.

Bài tập lớn mơn kiến trúc máy tính – Nhóm 1 Page23



×