一、传送指令
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®/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;带条件循环
来源:oschina
链接:https://my.oschina.net/u/4272947/blog/3183108