当前位置:课程学习>>第二章>>知识讲解>>视频课堂>>知识点四


知识点四:指令系统




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

进入你问我答的学习