8086指令系统总结

我们对8086 CPU的指令系统进行一下总结,详细应用请参考指令手册。

8086CPU提供以下几类指令

1.数据传送指令

例子如下表所示(表中只是列出了常用的指令,并非全部,下同),这些指令实现寄存器和内存,寄存器和寄存器之间单个数据传送。

指令解释
movmove,移动指令,两个操作对象
push将操作对象表示的数据入栈(stack)
pop将操作对象表示的数据出栈(stack)
pushfpush flag 将标志寄存器的值压栈
popfpop flag 从栈中弹出数据,送入标志寄存器中
xchg两个寄存器,寄存器和内存变量之间内容的交换指令

2.算术运算指令

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

指令解释
add算术加
sub算术减
adc带进位加法指令,它利用CF位上记录的进位值
sbb带借位减法指令,它利用CF位上记录的借位值
inc累加1指令
dec减1指令
cmp比较指令,功能相当于减法指令,但不保存结果,将对标志寄存器产生影响
imul有符号数乘法,与 mul 指令不同,imul 会保留乘积的符号
idiv有符号数除法,与 div指令不同,idiv会保留相除的符号
aaaAAA ( 加法后的 ASCII 调整 ) 指令调整 ADD 或 ADC 指令的二进制运算结果。设两个 ASCII 数字相加,其二进制结果存放在 AL 中,则 AAA 将 AL 转换为两个非压缩十进制数字存入 AH 和 AL。一旦成为非压缩格式,通过将 AH 和 AL 与 30h 进 OR 运算,很容易就能把它们转换为 ASCII 码

3.逻辑指令

指令进行逻辑运算,除了not指令外,他们的执行效果都将影响标志寄存器的相关标志位。

指令解释
and按位“与”
or按位“或”
not指令触发(翻转)操作数中的所有位。其结果被称为反码
xor按位“异或”
test在两个操作数的对应位之间进行 AND 操作, AND 指令唯一不同的地方是,TEST 指令不修改目标操作数
shl逻辑左移指令(left),最低位用0补充
shr逻辑右移指令(right),最高位用0补充
sal算数左移指令,在执行时将操作数看成带符号数进行移位
sar算数右移指令,在执行时将操作数看成带符号数进行移位
rol循环左移
ror循环右移
rcl带进位循环左移指令把每一位都向左移,进位标志位复制到 LSB,而 MSB 复制到进位标志位
rcr带进位循环右移指令把每一位都向右移,进位标志位复制到 MSB,而 LSB 复制到进位标志位

4.转移指令

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

(1) 无条件转移指令

指令解释
jmp无条件转移指令

(2) 条件转移指令

指令解释
jcxz如果(cx)=0,转移到标号处执行,都是短转移
je等于(equal)则转移
je不等于(not equal)则转移
jb低于(below)则转移
jnb不低于(not below)则转移
ja高于(above)则转移
jna不高于(not above)则转移

(3) 循环指令

指令解释
loop循环指令,所有的循环指令都是短转移

(3) 过程指令

指令解释
call将当前的CS和IP入栈,然后转移(不能实现短转移)
ret用栈中的数据,修改IP的内容,从而实现近转移
retf用栈中的数据,修改CS和IP中的内容,从而实现远转移

(4) 中断指令

指令解释
int利用中断类型码,引发中断过程
iret当使用iret指令返回到相同保护级别的任务时,iret会从堆栈弹出代码段选择子及指令指针分别到CS与IP寄存器,并弹出标志寄存器内容到EFLAGS寄存器

5.处理机控制指令

这些指令是对标志寄存器或其他处理机状态进行设置。

指令解释
cld将标志寄存器的 df 位置0
std将标志寄存器的 df 位置1
cli禁止中断发生, 即屏蔽中断,IF=0
sti允许中断产生,IF=1
nop无操作
clcCF = 0
cmcCF取反
stcCF = 1
hlt它会暂停中央处理单元(CPU),直到触发下一个外部中断为止
wait用来等待指令的指令
esc当8086遇到带有两个寄存器操作数的ESC指令时,它将执行一次nop。当处理器遇到带有存储操作数的ESC指令时,将从存储操作数指示的地址开始执行读取周期,并丢弃结果
lock被修饰的汇编指令成为“原子的”; 与被修饰的汇编指令一起提供内存屏障效果

6.串处理指令

这些指令对内存中的批量数据进行处理。若要使用这些指令方便地进行批量数据的处理,则需要和rep,repe,repn等前缀指令配合使用。

指令解释
movsb将数据从 ESI 指向的内存位置复制到 EDI 指向的内存位置, 字节为单位
movsw同上,字为单位
movsd同上,双字为单位
cmpsCMPS指令比较两个字符串
scas用于搜索一个特定的字符或字符串中的字符集
lods指令规定源操作数为(DS:SI),目的操作数隐含为AL(字节)或AX(字)寄存器
stos将AL/AX/EAX的值存储到[EDI]指定的内存单元
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值