
- 8085 微處理器
- 微處理器 - 8085 架構
- 8085 引腳配置
- 定址方式和中斷
- 8085 指令集
- 多處理器配置
- 配置概述
- 8087 數值資料處理器
- I/O 介面
- I/O 介面概述
- 8279 可程式設計鍵盤
- 8257 DMA 控制器
- 微處理器有用資源
- 微處理器 - 快速指南
- 微處理器 - 有用資源
- 微處理器 - 討論
微處理器 - 8086 指令集
8086 微處理器支援 8 種類型的指令:
- 資料傳送指令
- 算術指令
- 位操作指令
- 字串指令
- 程式執行轉移指令(分支和迴圈指令)
- 處理器控制指令
- 迭代控制指令
- 中斷指令
現在讓我們詳細討論這些指令集。
資料傳送指令
這些指令用於將資料從源運算元傳輸到目標運算元。以下是此組下的指令列表:
傳輸字的指令
MOV - 用於將位元組或字從提供的源複製到提供的目標。
PUSH - 用於將一個字壓入堆疊頂部。
POP - 用於將堆疊頂部的字彈出到提供的地址。
PUSHA - 用於將所有暫存器壓入堆疊。
POPA - 用於將堆疊中的字彈出到所有暫存器。
XCHG - 用於交換兩個位置的資料。
XLAT - 用於使用記憶體中的錶轉換 AL 中的位元組。
輸入和輸出埠傳輸指令
IN - 用於將提供的埠中的位元組或字讀入累加器。
OUT - 用於將累加器中的位元組或字傳送到提供的埠。
傳輸地址的指令
LEA - 用於將運算元的地址載入到提供的暫存器中。
LDS - 用於從記憶體載入 DS 暫存器和其他提供的暫存器。
LES - 用於從記憶體載入 ES 暫存器和其他提供的暫存器。
傳輸標誌暫存器的指令
LAHF - 用於將標誌暫存器的低位元組載入到 AH 中。
SAHF - 用於將 AH 暫存器儲存到標誌暫存器的低位元組。
PUSHF - 用於將標誌暫存器複製到堆疊頂部。
POPF - 用於將堆疊頂部的字複製到標誌暫存器。
算術指令
這些指令用於執行算術運算,如加法、減法、乘法、除法等。
以下是此組下的指令列表:
執行加法的指令
ADD - 用於將提供的位元組加到位元組/字加到字。
ADC - 用於帶進位的加法。
INC - 用於將提供的位元組/字加 1。
AAA - 用於在加法後調整 ASCII 碼。
DAA - 用於在加法/減法運算後調整十進位制數。
執行減法的指令
SUB - 用於從位元組減去位元組/從字減去字。
SBB - 用於執行帶借位的減法。
DEC - 用於將提供的位元組/字減 1。
NEG - 用於對提供的位元組/字的每一位取反並加 1/求 2 的補碼。
CMP - 用於比較 2 個提供的位元組/字。
AAS - 用於在減法後調整 ASCII 碼。
DAS - 用於在減法後調整十進位制數。
執行乘法的指令
MUL - 用於將無符號位元組乘以位元組/將無符號字乘以字。
IMUL - 用於將有符號位元組乘以位元組/將有符號字乘以字。
AAM - 用於在乘法後調整 ASCII 碼。
執行除法的指令
DIV - 用於將無符號字除以位元組或將無符號雙字除以字。
IDIV - 用於將有符號字除以位元組或將有符號雙字除以字。
AAD - 用於在除法後調整 ASCII 碼。
CBW - 用於用低位元組的符號位的副本填充字的高位元組。
CWD - 用於用低字的符號位填充雙字的高字。
位操作指令
這些指令用於執行涉及資料位的操作,即邏輯、移位等操作。
以下是此組下的指令列表:
執行邏輯運算的指令
NOT - 用於反轉位元組或字的每一位。
AND - 用於將位元組/字中的每一位與另一個位元組/字中的對應位相加。
OR - 用於將位元組/字中的每一位與另一個位元組/字中的對應位相乘。
XOR - 用於對位元組/字中的每一位與另一個位元組/字中的對應位執行異或運算。
TEST - 用於將運算元相加以更新標誌,而不影響運算元。
執行移位運算的指令
SHL/SAL - 用於將位元組/字的位向左移動並將零 (S) 放入 LSB 中。
SHR - 用於將位元組/字的位向右移動並將零 (S) 放入 MSB 中。
SAR - 用於將位元組/字的位向右移動並將舊的 MSB 複製到新的 MSB 中。
執行旋轉運算的指令
ROL - 用於將位元組/字的位向左旋轉,即 MSB 到 LSB 和到進位標誌 [CF]。
ROR - 用於將位元組/字的位向右旋轉,即 LSB 到 MSB 和到進位標誌 [CF]。
RCR - 用於將位元組/字的位向右旋轉,即 LSB 到 CF 和 CF 到 MSB。
RCL - 用於將位元組/字的位向左旋轉,即 MSB 到 CF 和 CF 到 LSB。
字串指令
字串是一組位元組/字,它們的記憶體總是按順序分配。
以下是此組下的指令列表:
REP - 用於重複給定的指令,直到 CX ≠ 0。
REPE/REPZ - 用於重複給定的指令,直到 CX = 0 或零標誌 ZF = 1。
REPNE/REPNZ - 用於重複給定的指令,直到 CX = 0 或零標誌 ZF = 1。
MOVS/MOVSB/MOVSW - 用於將位元組/字從一個字串移動到另一個字串。
COMS/COMPSB/COMPSW - 用於比較兩個字串的位元組/字。
INS/INSB/INSW - 用作從 I/O 埠到提供的記憶體位置的輸入字串/位元組/字。
OUTS/OUTSB/OUTSW - 用作從提供的記憶體位置到 I/O 埠的輸出字串/位元組/字。
SCAS/SCASB/SCASW - 用於掃描字串並將其位元組與 AL 中的位元組或字串字與 AX 中的字進行比較。
LODS/LODSB/LODSW - 用於將字串位元組儲存到 AL 中或將字串字儲存到 AX 中。
程式執行轉移指令(分支和迴圈指令)
這些指令用於在執行過程中轉移/分支指令。它包括以下指令:
在執行過程中無條件轉移指令的指令:
CALL - 用於呼叫過程並將它們的返回地址儲存到堆疊。
RET - 用於從過程返回到主程式。
JMP - 用於跳轉到提供的地址以繼續執行下一條指令。
在執行過程中根據某些條件轉移指令的指令:
JA/JNBE - 如果滿足高於/不低於/等於指令,則跳轉。
JAE/JNB - 如果滿足高於/不低於指令,則跳轉。
JBE/JNA - 如果滿足低於/等於/不高於指令,則跳轉。
JC - 如果進位標誌 CF = 1,則跳轉。
JE/JZ - 如果等於/零標誌 ZF = 1,則跳轉。
JG/JNLE - 如果滿足大於/不小於/等於指令,則跳轉。
JGE/JNL - 如果滿足大於等於/不小於指令,則跳轉。
JL/JNGE - 如果滿足小於/不大於/等於指令,則跳轉。
JLE/JNG - 如果滿足小於等於/不高於指令,則跳轉。
JNC - 如果沒有進位標誌 (CF = 0),則跳轉。
JNE/JNZ - 如果不等於/零標誌 ZF = 0,則跳轉。
JNO - 如果沒有溢位標誌 OF = 0,則跳轉。
JNP/JPO - 如果沒有奇偶校驗/奇偶校驗奇數 PF = 0,則跳轉。
JNS - 如果沒有符號 SF = 0,則跳轉。
JO - 如果溢位標誌 OF = 1,則跳轉。
JP/JPE - 如果奇偶校驗/奇偶校驗偶數 PF = 1,則跳轉。
JS - 如果符號標誌 SF = 1,則跳轉。
處理器控制指令
這些指令用於透過設定/重置標誌值來控制處理器的動作。
以下是此組下的指令:
STC - 用於將進位標誌 CF 設定為 1。
CLC - 用於清除/重置進位標誌 CF 為 0。
CMC − 用於將進位標誌 CF 置為其補碼。
STD − 用於將方向標誌 DF 設定為 1
CLD − 用於清除/重置方向標誌 DF 為 0
STI − 用於將中斷允許標誌設定為 1,即啟用 INTR 輸入。
CLI − 用於將中斷允許標誌清除為 0,即停用 INTR 輸入。
迭代控制指令
這些指令用於執行給定指令多次。以下是此組下的指令列表:
LOOP − 用於迴圈執行一組指令,直到條件滿足,即 CX = 0
LOOPE/LOOPZ − 用於迴圈執行一組指令,直到滿足 ZF = 1 & CX = 0
LOOPNE/LOOPNZ − 用於迴圈執行一組指令,直到滿足 ZF = 0 & CX = 0
JCXZ − 如果 CX = 0,則跳轉到提供的地址
中斷指令
這些指令用於在程式執行期間呼叫中斷。
INT − 用於在執行期間中斷程式並呼叫指定的服務。
INTO − 如果 OF = 1,則用於在執行期間中斷程式
IRET − 用於從中斷服務返回到主程式