Bộ vi xử lý - Bộ hướng dẫn 8086
Bộ vi xử lý 8086 hỗ trợ 8 loại lệnh -
- Hướng dẫn chuyển dữ liệu
- Hướng dẫn số học
- Hướng dẫn thao tác bit
- Hướng dẫn chuỗi
- Hướng dẫn chuyển thực thi chương trình (Hướng dẫn nhánh & vòng lặp)
- Hướng dẫn kiểm soát bộ xử lý
- Hướng dẫn kiểm soát lặp lại
- Hướng dẫn ngắt
Bây giờ chúng ta hãy thảo luận chi tiết về các bộ hướng dẫn này.
Hướng dẫn chuyển dữ liệu
Các lệnh này được sử dụng để chuyển dữ liệu từ toán hạng nguồn sang toán hạng đích. Sau đây là danh sách các hướng dẫn trong nhóm này:
Hướng dẫn chuyển một từ
MOV - Được sử dụng để sao chép byte hoặc từ từ nguồn được cung cấp đến đích được cung cấp.
PPUSH - Được sử dụng để đặt một từ ở đầu ngăn xếp.
POP - Được sử dụng để lấy một từ từ trên cùng của ngăn xếp đến vị trí được cung cấp.
PUSHA - Dùng để đưa tất cả các thanh ghi vào ngăn xếp.
POPA - Dùng để lấy từ từ ngăn xếp đến tất cả các thanh ghi.
XCHG - Được sử dụng để trao đổi dữ liệu từ hai vị trí.
XLAT - Được sử dụng để dịch một byte trong AL bằng cách sử dụng một bảng trong bộ nhớ.
Hướng dẫn chuyển cổng đầu vào và đầu ra
IN - Được sử dụng để đọc một byte hoặc từ từ cổng được cung cấp đến bộ tích lũy.
OUT - Được sử dụng để gửi một byte hoặc từ từ bộ tích lũy đến cổng được cung cấp.
Hướng dẫn chuyển địa chỉ
LEA - Dùng để nạp địa chỉ của toán hạng vào thanh ghi được cung cấp.
LDS - Được sử dụng để tải thanh ghi DS và thanh ghi được cung cấp khác từ bộ nhớ
LES - Dùng để nạp thanh ghi ES và thanh ghi được cung cấp khác từ bộ nhớ.
Hướng dẫn chuyển thanh ghi cờ
LAHF - Dùng để nạp AH với byte thấp của thanh ghi cờ.
SAHF - Dùng để lưu thanh ghi AH vào byte thấp của thanh ghi cờ.
PUSHF - Dùng để sao chép thanh ghi cờ ở đầu ngăn xếp.
POPF - Được sử dụng để sao chép một từ ở trên cùng của ngăn xếp vào thanh ghi cờ.
Hướng dẫn số học
Các hướng dẫn này được sử dụng để thực hiện các phép toán số học như cộng, trừ, nhân, chia, v.v.
Sau đây là danh sách các hướng dẫn trong nhóm này:
Hướng dẫn thực hiện phép cộng
ADD - Được sử dụng để thêm byte đã cung cấp thành byte / từ thành từng từ.
ADC - Dùng để thêm vào mang theo.
INC - Được sử dụng để tăng byte / từ được cung cấp lên 1.
AAA - Dùng để điều chỉnh ASCII sau khi thêm vào.
DAA - Dùng để điều chỉnh số thập phân sau phép tính cộng / trừ.
Hướng dẫn thực hiện phép trừ
SUB - Dùng để trừ byte khỏi byte / từ khỏi word.
SBB - Dùng để thực hiện phép trừ có mượn.
DEC - Được sử dụng để giảm byte / từ được cung cấp đi 1.
NPG - Được sử dụng để phủ định từng bit của byte / từ được cung cấp và thêm 1/2 phần bổ sung.
CMP - Dùng để so sánh 2 byte / từ được cung cấp.
AAS - Dùng để điều chỉnh mã ASCII sau khi trừ.
DAS - Dùng để điều chỉnh số thập phân sau phép trừ.
Hướng dẫn thực hiện phép nhân
MUL - Dùng để nhân byte không dấu với byte / từng từ.
IMUL - Dùng để nhân byte có dấu với byte / từng từ.
AAM - Dùng để điều chỉnh mã ASCII sau khi nhân.
Hướng dẫn thực hiện phép chia
DIV - Dùng để chia từ không dấu theo từng byte hoặc từ kép không dấu theo từng từ.
IDIV - Dùng để chia từ có dấu theo từng byte hoặc từng từ có dấu.
AAD - Dùng để điều chỉnh các mã ASCII sau khi phân chia.
CBW - Dùng để điền vào byte trên của từ với các bản sao của bit dấu của byte dưới.
CWD - Dùng để điền từ trên của từ kép với bit dấu của từ dưới.
Hướng dẫn thao tác bit
Các lệnh này được sử dụng để thực hiện các hoạt động có liên quan đến các bit dữ liệu, tức là các hoạt động như logic, shift, v.v.
Sau đây là danh sách các hướng dẫn trong nhóm này:
Hướng dẫn thực hiện thao tác logic
NOT - Dùng để đảo từng bit của byte hoặc từ.
AND - Được sử dụng để thêm từng bit trong một byte / từ với bit tương ứng trong byte / từ khác.
OR - Dùng để nhân từng bit trong một byte / từ với bit tương ứng trong byte / từ khác.
XOR - Được sử dụng để thực hiện phép toán Exclusive-OR trên từng bit trong byte / từ với bit tương ứng trong byte / từ khác.
TEST - Dùng để thêm toán hạng để cập nhật cờ, không ảnh hưởng đến toán hạng.
Hướng dẫn thực hiện các thao tác trong ca
SHL/SAL - Được sử dụng để dịch chuyển các bit của một byte / từ sang trái và đặt số không (S) trong LSB.
SHR - Được sử dụng để dịch chuyển các bit của một byte / từ về phía bên phải và đặt số không (S) trong MSB.
SAR - Được sử dụng để chuyển các bit của byte / từ về phía bên phải và sao chép MSB cũ vào MSB mới.
Hướng dẫn thực hiện các thao tác xoay
ROL - Được sử dụng để xoay các bit byte / word về phía bên trái, tức là MSB sang LSB và để Carry Flag [CF].
ROR - Được sử dụng để xoay các bit byte / word về phía bên phải, tức là LSB sang MSB và để Carry Flag [CF].
RCR - Được sử dụng để xoay các bit byte / word về phía bên phải, tức là LSB sang CF và CF sang MSB.
RCL - Dùng để xoay các bit byte / word về phía trái, tức là MSB sang CF và CF sang LSB.
Hướng dẫn chuỗi
Chuỗi là một nhóm các byte / từ và bộ nhớ của chúng luôn được cấp phát theo một thứ tự tuần tự.
Sau đây là danh sách các hướng dẫn trong nhóm này:
REP - Được sử dụng để lặp lại lệnh đã cho cho đến khi CX ≠ 0.
REPE/REPZ - Được sử dụng để lặp lại lệnh đã cho cho đến khi CX = 0 hoặc cờ không ZF = 1.
REPNE/REPNZ - Được sử dụng để lặp lại lệnh đã cho cho đến khi CX = 0 hoặc cờ không ZF = 1.
MOVS/MOVSB/MOVSW - Dùng để di chuyển byte / từ từ chuỗi này sang chuỗi khác.
COMS/COMPSB/COMPSW - Dùng để so sánh hai chuỗi byte / từ.
INS/INSB/INSW - Được sử dụng như một chuỗi / byte / từ đầu vào từ cổng I / O đến vị trí bộ nhớ được cung cấp.
OUTS/OUTSB/OUTSW - Được sử dụng như một chuỗi / byte / từ đầu ra từ vị trí bộ nhớ được cung cấp đến cổng I / O.
SCAS/SCASB/SCASW - Được sử dụng để quét một chuỗi và so sánh byte của nó với một byte trong AL hoặc từ chuỗi với một từ trong AX.
LODS/LODSB/LODSW - Dùng để lưu chuỗi byte thành AL hoặc chuỗi từ thành AX.
Hướng dẫn chuyển thực thi chương trình (Hướng dẫn nhánh và vòng lặp)
Các lệnh này được sử dụng để chuyển / rẽ nhánh các lệnh trong quá trình thực thi. Nó bao gồm các hướng dẫn sau:
Hướng dẫn chuyển lệnh trong khi thực hiện mà không có bất kỳ điều kiện nào -
CALL - Được sử dụng để gọi một thủ tục và lưu địa chỉ trả về của chúng vào ngăn xếp.
RET - Dùng để quay lại từ thủ tục về chương trình chính.
JMP - Được sử dụng để chuyển đến địa chỉ được cung cấp để chuyển sang hướng dẫn tiếp theo.
Hướng dẫn chuyển lệnh trong khi thực hiện với một số điều kiện -
JA/JNBE - Dùng để nhảy nếu lệnh trên / không dưới / bằng thỏa mãn.
JAE/JNB - Dùng để nhảy nếu lệnh trên / không dưới thỏa mãn.
JBE/JNA - Dùng để nhảy nếu lệnh dưới / bằng / không trên thỏa mãn.
JC - Dùng để nhảy nếu mang cờ CF = 1
JE/JZ - Dùng để nhảy nếu cờ bằng / không ZF = 1
JG/JNLE - Được sử dụng để nhảy nếu lệnh lớn hơn / không nhỏ hơn / bằng thỏa mãn.
JGE/JNL - Được sử dụng để nhảy nếu lớn hơn / bằng / không nhỏ hơn lệnh thỏa mãn.
JL/JNGE - Được sử dụng để nhảy nếu lệnh nhỏ hơn / không lớn hơn / bằng thỏa mãn.
JLE/JNG - Được sử dụng để nhảy nếu nhỏ hơn / bằng / nếu không lớn hơn lệnh thỏa mãn.
JNC - Dùng để nhảy nếu không có cờ mang (CF = 0)
JNE/JNZ - Dùng để nhảy nếu không cờ bằng / không ZF = 0
JNO - Dùng để nhảy nếu không có cờ tràn OF = 0
JNP/JPO - Dùng để nhảy nếu không chẵn lẻ / chẵn lẻ PF = 0
JNS - Dùng để nhảy nếu không ký SF = 0
JO - Dùng để nhảy nếu cờ tràn OF = 1
JP/JPE - Dùng để nhảy nếu parity / parity chẵn PF = 1
JS - Dùng để nhảy nếu cờ ký SF = 1
Hướng dẫn kiểm soát bộ xử lý
Các hướng dẫn này được sử dụng để điều khiển hành động của bộ xử lý bằng cách cài đặt / đặt lại các giá trị cờ.
Sau đây là các hướng dẫn trong nhóm này -
STC - Được sử dụng để đặt cờ mang CF thành 1
CLC - Dùng để xóa / đặt lại cờ mang CF về 0
CMC - Dùng để đặt bổ sung ở trạng thái mang cờ CF.
STD - Dùng để đặt cờ hướng DF thành 1
CLD - Dùng để xóa / đặt lại cờ hướng DF về 0
STI - Dùng để đặt cờ cho phép ngắt thành 1, tức là cho phép đầu vào INTR.
CLI - Dùng để xóa cờ cho phép ngắt về 0, tức là vô hiệu hóa đầu vào INTR.
Hướng dẫn kiểm soát lặp lại
Các lệnh này được sử dụng để thực hiện các lệnh đã cho với số lần. Sau đây là danh sách các hướng dẫn trong nhóm này:
LOOP - Dùng để lặp một nhóm lệnh cho đến khi thỏa mãn điều kiện, tức là CX = 0
LOOPE/LOOPZ - Được sử dụng để lặp một nhóm lệnh cho đến khi nó thỏa mãn ZF = 1 & CX = 0
LOOPNE/LOOPNZ - Được sử dụng để lặp một nhóm lệnh cho đến khi nó thỏa mãn ZF = 0 & CX = 0
JCXZ - Được sử dụng để chuyển đến địa chỉ đã cung cấp nếu CX = 0
Hướng dẫn ngắt
Các lệnh này được sử dụng để gọi ngắt trong quá trình thực thi chương trình.
INT - Dùng để ngắt chương trình trong quá trình thực thi và gọi dịch vụ được chỉ định.
INTO - Dùng để ngắt chương trình trong quá trình thực thi nếu OF = 1
IRET - Được sử dụng để quay lại từ dịch vụ ngắt về chương trình chính