8086CPU指令系统总结

表格中只列出部分,如果要详细了解8086指令系统中的各个指令的用法,可以查看有关的指令手册。或者使用汇编金手指软件。

指令总结

  • 1.数据传送指令
  • 2.算数运算指令
    • 标志寄存器
  • 3.逻辑指令
  • 4.转移指令
  • 5.处理机控制指令
    • 串操作指令
  • 6.串处理指令

1.数据传送指令

数据传送指令功能
mov传送指令,但不能用于设置CS、IP中的内容 (要修改可以用jmp)
push入栈(以字为单位进行),执行指令时CPU从SS和SP中得到栈顶的地址
pop出栈
pushf将标志寄存器的值入栈(可用来修改标志寄存器的值)
popf从栈中弹出数据,送入标志寄存器中
xch交换数据

这些指令实现寄存器和内存、寄存器和寄存器之间的单个数据传送

2.算数运算指令

算数运算指令功能
add两数相加(不带进位)
sub两数相减 (不带借位)
adc带进位的加法
sbb带借位的减法
inc令目标数自加 1
dec令目标数自减 1
cmp比较指令,执行从目的操作数中减去源操作数的隐含减法操作,并且不修改任何操作数(仅修改标志寄存器)
imul有符号乘法(mul 无符号乘法)
idiv有符号出发 (div 无符号出发)
aaa用于非压缩BCD码加法调整

这些指令实现寄存器和内存中的数据的算数运算。它们的执行结果影响标志寄存器的sf、zf、of、cf、pf、af位

标志寄存器

标志寄存器功能
sf符号标志位,如果结果为负则为 1
zf零标志位,如果结果为0 则为1
of溢出位(仅对有符号数运算),如果溢出则为 1
cf进位标志位,记录结果的最高有效位想更高位的进位值,或从更高位的借位值
pf奇偶标志位, 如果所有bit位中1的个数为偶数 ,则为1
af辅助进位标志,运算过程中看最后四位,不论长度为多少,最后四位向前有进位或者借位,则为1

3.逻辑指令

逻辑指令功能
and按位逻辑与
or按位逻辑或
not反码指令,翻转操作数的所有位
xor异或
test进行逻辑与操作,不过不改变操作数,只改变标志寄存器
shl逻辑左移(无符号),低位0填充
shr逻辑右移
sal算数左移
sar算数右移
rol循环左移
ror循环右移
rcl带进位的循环左移
rcr带进位的循环右移

除了 not 指令外,它们的执行结果都影响标志寄存器的相关标志位。

4.转移指令

可以修改IP ,或同时修改CS和IP的指令统称为转移指令。转移指令分为以下几类

1)无条件转移指令: jmp

2)条件转移指令

条件转移指令功能
jcxz如果(cx )== 0 则转到标号处执行
je等于则跳转 (如果(zf)== 1 则跳转
jb小于则跳转
ja大于则跳转
jnb不小于则跳转
jna不大于则跳转

有条件跳转都为短转移,IP的修改范围都为-128~127

3) 循环指令 : loop

4)过程

过程功能
call调用其他函数(过程),并将数据入栈
ret从其他函数(过程)返回,用栈中的数据修改IP(近转移)
retf从其他函数(过程)返回,用栈中的数据修改CS、IP(远转移)

5)中断

中断功能
int向CPU发送一个中断指令,引发一个n号中断过程
iret用于从中断过程返回

5.处理机控制指令

这些指令对标志寄存器或其他处理机状态进行设置(如CPU状态)

处理机控制指令功能
cld复位方向标志(DF = 0);在串操作指令使用之前,通常应先设置方向标志,以决定SI/DI是增量还是减量
std置位方向标志(DF = 1)
cli复位中断标志,禁止可屏蔽中断(IF = 0),即CPU可以不响应这个中断
sti置位中断标志,允许可屏蔽中断(IF = 1),即CPU可以相应这个中断
nop空操作指令,该指令不执行任何操作,但占用一个字节存储单元,空耗一个指令周期。常用于程序调试
clc复位进位标志(CF = 0 )
cmc对进位标志求反(CF = ~CF)
stc置位进位标志(CF = 1 )
hlt暂停指令,使CPU进入暂停状态,这时CPU不进行任何操作。当CPU发生复位或来自外部的中断时,CPU脱离暂停状态。
wait等待指令,当芯片引线TEST为高电平时使CPU进入等待状态,CPU并不作任何操作。TEST为低电平有效时,CPU脱离等待状态,继续执行WAIT指令后面的指令
esc交权指令,把浮点指令交给浮点处理器执行
lock封锁前缀指令,可放在任何指令前,作用是将总线封锁,使别的控制器不能控制总线。该指令执行完后,封锁解除

串操作指令

在内存一个存储区域连续存放着若干个字节(或字)数据,这样一组数据称为“数据串”(高级语言视为数组)。若每个数据是一个字节,称“字节串”;若是字,则称“字串”。串操作指令可以用来实现内存区域的数据串操作。

串操作指令共有五种(MOVS、STOS、LODS、CMPS、SCAS),其基本操作各不相同,但有以下共同特点:
(1)源数据串在数据段,以寄存器SI作为地址指针。
目的数据串在附加段,以寄存器DI作为地址指针。
(2)每次操作后,地址指针SI、DI自动修改,修改的方向取决于方向标志DF。
DF=1DF= 0,地址指针增量(即字节操作加1,字操作加2)。
(3)串操作指令与重复前缀结合,可进行多次重复操作。
(4)串操作指令都具有3种指令格式:(以串传送指令MOVS为例)
MOVS dest,src ;由操作数说明是字节或字操作
MOVSB ;字节操作
MOVSW ;字操作
参考文章1
参考文章2

6.串处理指令

这些指令对内存中的批量数据进行处理

串处理指令功能
movsb字符串传送指令,这条指令按字节传送数据。通过SI和DI这两个寄存器控制字符串的源地址和目标地址
movsw与movsb一样,只不过这是按字为单位传送数据
cmps串比较,数据默认为无符号数
scas串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.
lods装入串.把源串中的元素(字或字节)逐一装入al或ax中.( lodsb 传送字符.lodsw 传送字. lodsd 传送双字. )
stos保存串,是lods的逆过程.

若要使用这些指令方便地进行批量处理的处理,则需要rep、repe、repne等前缀指令配合使用。

rep的作用是根据cx的值,重复执行后面的传送指令(类似于loop)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部