当前位置:课程学习>>第二章>>知识讲解>>视频课堂>>知识点四
8086指令众多,对于每条指令我们都关心指令的格式、对操作数的要求、运行指令对寄存器、内存、标志位的影响。
指令的一般格式是: 操作符 操作数,操作数
操作数可能是0个、1个、2个。
单操作数的指令,操作数是寄存器或内存单元。
双操作数的指令,操作数是立即数、寄存器或内存单元,数据移动或影响的方向如下图所示。8086不支持由内存直接到内存的操作。
通常,指令中如果列出两个操作数,则指令的执行过程是:目标操作数←源操作数。
如 mov ax, 7856
源操作数是 7856,目录操作数是 AX,即 AX←7856。
指令中如果仅列出一个操作数,则另一个操作数为隐含操作数,由操作码决定。
如 DEC AL
其功能为 (dest) ←(dest) – 1,即AL中值减1的结果再存入AL中。
例 数据传送指令
以下视频是对上述代码的讲解,介绍了数据传送指令的功能、机器码与指令的对应、寻址方式。
[录屏\02 8086寻址方式与指令系统_2.2.3-指令系统.mp4]
8086指令系统包括六大类指令:
1.数据传送指令
2.算术运算指令
3.逻辑运算和移位指令
4.串操作指令
5.转移指令
6.处理器控制指令
以下依次介绍。
1. 数据传送指令
数据传送指令是将数据或地址传送到寄存器、存储单元或I/O端口中。
除了POPF和SAHF指令外,其他的数据传送指令的执行结果都不影响标志位。
数据传送指令分类:
通用数据传送指令
传送指令
MOV 目标操作数,源操作数
数据交换指令
XCHG 目标操作数,源操作数
堆栈操作指令
PUSH 源操作数
POP 目标操作数
累加器专用传送指令
换码指令
XLAT
XLAT 表格首地址
输入/输出指令
IN AL,端口地址
IN AX,端口地址
IN AL,DX
IN AX,DX
OUT 端口地址,AL
OUT 端口地址,AX
OUT DX,AL
OUT DX,AX
地址传送指令
LEA r16,mem
LDS r16,m32
LES r16,m32
标志传送指令
LAHF
SAHF
PUSHF
POPF
数据类型转换指令
CBW
CWD
2.算术运算指令
加法
不带进位的加法指令
ADD dest,src
带进位的加法指令
ADC dest,src
加1指令
INC dest
减法
不带进位减法指令
SUB dest,src
带进位减法指令
SBB dest,src
减1指令
DEC dest
比较指令
CMP dest,src
求补指令
NEG dest
乘法
无符号数乘法指令
MUL src
符号乘法指令
IMUL src
除法
无符号除法指令
DIV src
符号除法指令
IDIV src
十进制调整指令
压缩BCD码的加法调整指令
DAA
压缩BCD数减法调整指令
DAS
非压缩的BCD码的加法调整指令
AAA
非压缩的BCD码的减法调整指令(ASCII码的减法调整指令)
AAS
非压缩的BCD码的乘法调整指令(ASCII码的乘法调整指令)
AAM
非压缩的BCD码的除法调整指令(ASCII码的除法调整指令)
AAD
3.位运算指令,逻辑运算指令
逻辑运算指令
逻辑非(NOT)
NOT dest
逻辑与(AND)
AND dest,src
逻辑测试(TEST)
TEST dest,src
逻辑或(OR)
OR dest,src
逻辑异或(XOR)指令
XOR dest,src
位运算指令,移位指令
逻辑左移指令
SHL dest,CNT
逻辑右移指令
SHR dest,CNT
算术左移指令
SAL dest,CNT
算术右移指令
SAR dest,CNT
位运算指令,循环移位指令
不带进位位循环左移指令
ROL dest,CNT
不带进位位循环右移指令
ROR dest,CNT
带进位位循环左移指令
RCL dest,CNT
带进位位循环右移指令
RCR dest,CNT
4.串操作指令,基本串操作指令
串传送指令
MOVS dest,src
MOVSB
MOVSW
串装入指令
LODS src
LODSB
LODSW
串送存指令
STOS dest
STOSB
STOSW
串比较指令
CMPS src,dest
CMPSB
CMPSW
串扫描指令
SCAS dest
SCASB
SCASW
串操作指令,重复前缀指令
无条件重复前缀指令
REP
相等重复前缀指令
REPE
REPZ
不相等重复前缀REPNE或REPNZ
REPNE
REPNZ
5.控制转移指令
无条件转移指令
段内直接转移指令
JMP 标号
JMP 立即数
段内间接转移指令
JMP 寄存器
JMP 存储单元
段间直接转移
JMP FAR PTR标号
段间间接转移
JMP DWORD PTR 存储单元
条件转移指令
条件转移指令,根据单个标志位的状态判断的转移指令
条件转移指令,根据两个无符号数的比较结果判断的转移指令
条件转移指令,根据两个带符号数的比较结果判断的转移指令
条件转移指令,若CX为0则转移的转移指令
JCXZ 目标地址
循环控制指令
循环指令
LOOP 目标地址
相等循环指令
LOOPZ/LOOPE 目标地址
不相等循环指令
LOOPNZ/LOONE 目标地址
过程调用与返回指令
段内直接调用指令
CALL 过程名
段内间接调用指令
CALL 寄存器
段间直接调用指令
CALL FAR PTR 过程名
段间间接调用指令
CALL DWORD PTR 存储单元地址
无参数段内返回
RET
有参数段内返回
RET n
无参数段间返回
RET
有参数段间返回
RET n
中断指令
中断指令
INT n
溢出中断指令
INTO
中断返回指令
IRET
6.处理器控制指令
标志位操作指令s
外部同步指令
处理器暂停指令
HLT
处理器等待指令WAIT
WAIT
处理器交权指令ESC
ESC
封锁总线指令LOCK
LOCK 其他指令
空操作指令NOP
NOP