8086/8088指令系统

爱⌒轻易说出口 提交于 2020-03-02 02:31:17

一、传送指令
1、数据传送指令move
mov sreg/reg/mem,sreg/reg/mem/imm;sreg/reg/mem=sreg/reg/mem/imm
2、数据交换指令exchange
xchg reg/mem,reg/mem;reg/mem<-->reg/mem
3、地址传送指令address
lea    reg,mem;reg=ea(mem);传送有效地址(load effective address)
lds reg,mem;reg=mem;ds=mem+2;传送指令到DS(load pointer into ds)
les reg,mem;reg=mem;ds=mem+2;传送指令到DS(load pointer into es)
二、堆栈指令stack
push sreg/reg/mem;sp-=2;[ss:sp]=sreg/reg/mem;入栈
pop    sreg/reg/mem;sreg/reg/mem=[ss:sp],sp+=2;出栈,不能使用CS,必须为字操作数
pushf;[ss:sp]=flags;标志入栈,改变tf的技术
popf;flags=[ss:sp];标志出栈
三、标志指令flags
lahf;ah=flags低8位;标志载入ah(load ah with flags),不含控制标志和溢出标志    
sahf;flags低8位=ah;存储ah到flag(store ah into flags)
clc;cf=0;清除进位标志(clear carry flag),常作为过程返回值
stc;cf=1;设置进位标志(set carry flag)
cmc;cf=~cf;反转进位标志(complement carry flag)
cld;df=0;清除方向标志(clear direction flag),地址递增,一般用于串处理指令
std;df=1;设置方向标志(set direction flag),地址递减
cli;if=0;清除中断标志(clear interrupt flag),禁止可屏蔽中断
sti;if=1;设置中断标示(set interrupt flag),允许可屏蔽中断
四、算术指令
add reg/mem,reg/mem/imm;reg/mem+=reg/mem/imm;加法(addition)
adc reg/mem,reg/mem/imm;reg/mem+=reg/mem/imm+cf;带进位加法(add with carry)
inc    reg/mem;reg/mem+=1;增量(increment)
sub reg/mem,reg/mem/imm;reg/mem-=reg/mem/imm;减法(subtraction)
sbb reg/mem,reg/mem/imm;reg/mem-=reg/mem/imm+cf;带借位加法(subtract with borrow)
dec    reg/mem;reg/mem-=1;减量(decrement)
neg    reg/mem;reg/mem=-reg/mem;取补(negate),即求相反数,最小负值取补结果不变
cmp reg/mem,reg/mem/imm;reg/mem-reg/mem/imm,设置状态标志;比较(compare)
mul/imul reg/mem;ax=al*reg/mem(字节);(dx,ax)=ax*reg/mem(字),无符号或有符号乘法(multiply or signed multiply)
div/idiv reg/mem;al=ax/reg/mem,ah=ax%reg/mem(字节);ax=(dx,ax)/reg/mem,dx=(dx,ax)%reg/mem(字),无符号或有符号除法(division or signed division)
cbw;ax<-al,字节转换为字(convert byte to word),常用于有符号数乘除,无符号扩展用xor
cwd;(dx,ax)<-ax,字转换为双字(convert word to double word)
五、逻辑指令
not    reg/mem;reg/mem=~reg/mem,按位取反
and    reg/mem,reg/mem/imm;reg/mem&=reg/mem/imm,按位与
or    reg/mem,reg/mem/imm;reg/mem|=reg/mem/imm,按位或
xor    reg/mem,reg/mem/imm;reg/mem^=reg/mem/imm,按位异或
test reg/mem,reg/mem/imm;reg/mem&reg/mem/imm,设置状态标志,测试
六、移位指令
sal/shl reg/mem,cl/1;reg/mem<<cl/1;算术或逻辑左移(shift arithmetic/logic left)
sar/shr reg/mem,cl/1;reg/mem>>cl/1;算术或逻辑右移(shift arithmetic/logic right)
rol/ror reg/mem,cl/1;reg/mem@>cl/1;循环左移或右移(rotate left/right)
rcl/rcr reg/mem,cl/1;reg/mem&>cl/1;带进位循环左移或右移(rotate left/right through cf)
七、转移指令
1、无条件转移指令
jmp [short]    lable;无条件段内直接短/近转移,使用8位或16位位移
jmp word mem;无条件段内间接转移
jmp far segment:offset;无条件段间直接远转转移
jmp dword mem;无条件段间间接转移
2、条件转移指令
jz/jnz/js/jns/jp/jnp/jpe/jpo/jc/jnc/jo/jno lable;根据标志位使用8位位移
ja/jna/jb/jnb/je/jne/jae/jbe/jnbe/jnae label;无符号比较转移
jl/jnl/jg/jng/jle/jge/jnle/jnge/je/jne lable;有符号比较转移
jcxz lable;cx为0转移
3、循环指令
loop label;dec cx,jncxz lable;计数循环
loope/loopz lable;dec cx jz lable;带条件循环
loopne/loopnz lable;;dec cx jnz lable;带条件循环

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!