
- 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 - 用于用低字的符号位填充双字的高字。
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
位操作指令
这些指令用于执行涉及数据位的操作,即逻辑、移位等操作。
以下是此组下的指令列表:
执行逻辑运算的指令
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 − 用于从中断服务返回到主程序