8086指令分类
1.数据传送类指令
-
通用传送类指令
MOV DST,SRC;将SRC中的内容传送到DST中
注意事项:
- 立即数不能传送到段寄存器
- 存储单元不能传送到存储单元
- 段寄存器不能传送到段寄存器
- CS不能做目的寄存器
- DST和SRC的类型要一致
-
取有效地址指令
LEA REG16,MEM;将MEM的偏移地址传送到一个16位寄存器中
-
取地址指针指令
LDS,REG16,MEM;将存储器MEM中的低16位传给一个16位的寄存器,高16位传给DS LES,REG16,MEM;将存储器MEM中的低16位传给一个16位的寄存器,高16位传给ES
-
标志传送类指令
LAFH;将PSW寄存器的低8位传送给AH SAHF;将AH中的内容传送到PSW寄存器的低8位中
-
数据交换指令
XCHG DST,SRC;将SRC中的内容和DST中的内容进行交换
-
堆栈操作指令
PUSH SRC;将SRC压入堆栈 PUSHF;将PSW寄存器中的内容压入堆栈 POP DST;从栈顶出栈传送到DST POPF;从栈顶出栈送到PSW寄存器中
2.算数运算类指令
-
加减法指令
ADD DST,SRC;不带进位的加法 ADC DST,SRC;带进位的加法 SUB DST,SRC;不带进位的减法 SBB DST,SRC;带进位的减法 NEG DST;取负指令
-
比较指令
CMP DST,SRC;将DST中的内容减去SRC中的内容,用来改变PSW寄存器中的状态标志位,不会将计算结果进行保存
-
增量减量指令
INC DST;DST中的内容自动加一 DEC DST;DST中的内容自动减一
-
乘法指令
MUL SRC;无符号数乘法 IMUL SRC;有符号数乘法 当SRC为字节类型时,将AL中的内容乘以SRC中的内容,结果放在AX中 当SRC为字类型时,将AX中的内容乘以SRC中的内容,结果的高16位放在DX中,低16位放在AX中
-
除法指令
DIV SRC;无符号数处除法 IDIV SRC;有符号数除法 当SRC为字节时,将AX中的内容除以SRC中的内容,商放在AL中,余数放在AH中 当SRC为字类型时,将DX和AX联合构成的32位除以SRC中的16位,商放在AX,余数放在DX
-
符号扩展指令
CBW;将AL中的符号扩展到AH中,形成一个字AX CWD;将AX中的符号扩展到DX中,形成双字(DX:AX)
-
BCD数运算调整指令
AAA;加法分离BCD码调整指令 DAA;加法组合BCD码调整指令 AAS;减法分离BCD码调整指令 DAS;减法组合BCD码调整指令 AAM;乘法分离BCD码调整指令 AAD;除法分离BCD码调整指令
3.逻辑运算类指令
AND DST,SRC;与操作
OR DST,SRC;或操作
NOT,DST;非操作
XOR DST,SRC;异或操作
TEST DST,SRC;逻辑测试指令,与操作,不保存与后的结果,只改变PSW中的状态标志位
4.移位类指令
-
逻辑移位
SHR DST,CNT;逻辑右移 SHL DST,CNT;逻辑左移
-
算数移位
SAR DST,CNT;算数右移 SAL DST,CNT;算数左移
-
循环移位
ROR DST,CNT;循环右移 ROL DST,CNT;循环左移 RCR DST,CNT;带进位位的循环右移· RCL DST,CNT;带进位位的循环左移
5.标志位操作指令
指令格式 | 功能 |
---|---|
CLC | CF清零 |
STC | CF置位(置为1) |
CMC | CF取反 |
CLD | DF清零 |
STD | DF置位(置为1) |
CLI | IF清零,关闭中断 |
STI | IF置位,打开中断 |
6.转移指令
-
无条件转移指令
JMP LABEL;转移到标号为LABEL处 JMP REG16;转移到寄存器中的值指定的位置 JMP MEM;转移到存储器中的值指定的位置
-
有条件转移指令
指令格式 转移条件 JC CF=1 JNC CF=0 JE/JZ ZF=1 JNE/JNZ ZF=0 JS SF=1 JNS SF=0 JO OF=1 JNO OF=0 JP PF=1 JNP PF=0
7.循环控制指令
LOOP LABEL;CX不等于0时转
LOOPZ/LOOPE LABEL;CX不等于0且ZF=1时转
LOOPNZ/LOOPNE LABEL;CX不等于1且ZF=0时转
JCXZ LABEL;CX等于0
8.子程序调用与返回指令
CALL LABEL;调用入口地址标号为LABEL的子程序
CALL OPR;调用子程序,其入口地址为OPR中的内容
RET;子程序的返回,完成IP出栈,将sp的内容传送给IP
RETF;完成IP出栈,cs出栈
RET n;完成RET功能后,将sp指针向下再移动n次
9.中断调用返回指令
INT n;调用第n号中断
IRET;从中断服务子程序返回主程序
10.字符串操作指令
-
字符串传送指令
MOVSB;字节传送 MOVSW;字传送 MOVS DST,SRC;并不是完成SRC到DST的传送,而是用于确定操作类型 ;当同为字节型时,相当于MOVSB;当同为字型时,相当于MOVSW 源操作数和目的操作数的寻址方式均为隐含寻址 源操作数的地址是DS:SI,目的操作数的地址是ES:DI
-
重复前缀
1.当cx不等于0时重复执行,相当于LOOP REP MOVSB REP MOVSW 2.当cx不等于0且zf等于1时重复执行,相当于LOOPZ/LOOPE REPZ/REPE 3.当cx不等于0且zf等于0时重复执行,相当于LOOPNZ/LOOPNE REPNZ/REPNE
-
字符串比较指令
CMPSB; CMPSW; CMPS DST,SRC; 与CMP指令类似,计算的结果并不保存,只是用于设置PSW中的标志位
-
字符串扫描指令
SCASB; SCASW; SCAS DST,SRC; 源操作数的地址是AL(或AX),目的操作数的地址是ES:DI
-
字符串装入指令
LODSB; LODSW; LODS DST,SRC; 将源字符串装入AL(或AX)中
-
字符串存储指令
STOSB; STOSW; STOS DST,SRC; 将AL(或AX)中的内容存储到目的字符串中
11.输入输出指令
IN DST,SRC;表示CPU从端口读取数据
OUT DST,SRC;表示CPU将数据送给I/O端口