8086处理器的指令系统包括六种类型:
- 数据传送指令
- 算术运算指令
- 逻辑运算指令
- 串操作指令
- 控制转移指令
- 处理器控制指令
1.数据传送指令
指令 | 作用 |
---|---|
MOV | 传送 |
PUSH、POP | 堆栈操作 |
XCHG | 交换 |
IN、OUT | 外设输入输出 |
XLAT | 转换/换码/翻译 |
LEA(Load Effective Address)、LDS、LES | 地址传送 |
PUSHF/POPF、LAHF/SAHF | 标志传送 |
2.算术运算指令
指令 | 作用 |
---|---|
ADD、ADC、AAA、DAA | 加法 |
INC | +1 |
SUB、SBB、AAS、DAS | 减法 |
DEC | -1 |
CMP | 比较 |
NEG | 求补(按位取反+1) |
MUL、IMUL、AAM | 乘法 |
DIV、IDIV、AAD | 除法 |
CBW、CWD、CDQ | 累加器有符号扩展 |
MOVZX | 无符号扩展 |
MOVSX | 无符号扩展 |
3.逻辑运算指令(位操作)
指令 | 作用 |
---|---|
NOT | 求反 |
AND | 与运算 |
OR | 或运算 |
XOR | 异或运算 |
TEST | 位测试,同AND,不修改操作数 |
SHL、SHR、SAL、SAR | 逻辑、算术移位 |
ROL、ROR、RCL、RCR | 循环移位、带进位循环移位 |
-
SHL(Shift Left):逻辑左移 SHR:逻辑右移
-
SAL(Shift Arithmetic Left):算术左移 SAR:算术右移
-
RCL带进位循环移位时,左移一位将MSB赋值给进位标志位CF,将CF赋值给LSB;RCR同理。
-
而ROL循环左移时,将MSB同时赋值给CF和LSB;ROR同理。
4.串指令操作
指令 | 作用 |
---|---|
MOVSx | 串传送(拷贝) |
CMPSx | 串比较 |
SCASx | 串扫描(搜索某元素) |
LODSx | 取字符串 |
STOSx | 存字符串 |
操作时需要使用的寄存器:SI(源变址寄存器)、DI(目的变址寄存器)、CX(计数器)、DF(FLAGS 方向标志)。
5.控制转移指令
指令 | 作用 |
---|---|
CALL、RET | 子程序调用、返回 |
JMP | 无条件转移指令(跳转) |
JZ/JNZ/JE/JNE(零转移/相等跳转)、JC/JNC(进位转移)、JO/JNO(溢出转移)、JS/JNS(根据符号位跳转)、JP/JNP/JPE/JNPE(根据奇偶标志跳转) | 按标志位转移 |
JA(above大于跳转)、JAE(大于等于)、JB(below小于)、JBE(小于等于) | 无符号数比较转移 |
JG(greater)、JGE、JL(less)、JLE | 有符号数比较转移 |
LOOP | 循环(依赖CX) |
LOOPE(equal)、LOOPNE | 条件循环 |
JCXZ | CX=0跳转 |
INT n (interrupt) | 中断调用 |
IRET | 中断返回 |
INTO(interrupt overflow) | 溢出中断指令 |
6.处理器控制指令
指令 | 作用 |
---|---|
CLC | CF=0 |
CMC | CF取反 |
STC | CF=1 |
STD | DF=1 |
CLD | DF=0 |
STI | IF=1 |
CLI | IF=0 |
HLT | 处理机暂停 |
WAIT | 等待状态 |
ESC | 将数据传送给FPU |
LOCK | 保证总线的控制 |
NOP | 无操作,用于延时 |