1、傳送指令
一、數據傳送指令move
mov sreg/reg/mem,sreg/reg/mem/imm;sreg/reg/mem=sreg/reg/mem/imm
二、數據交換指令exchange
xchg reg/mem,reg/mem;reg/mem<-->reg/mem
三、地址傳送指令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)
2、堆棧指令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];標誌出棧
3、標誌指令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),容許可屏蔽中斷
4、算術指令
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)
5、邏輯指令
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,設置狀態標誌,測試
6、移位指令
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)
7、轉移指令
一、無條件轉移指令
jmp [short] lable;無條件段內直接短/近轉移,使用8位或16位位移
jmp word mem;無條件段內間接轉移
jmp far segment:offset;無條件段間直接遠轉轉移
jmp dword mem;無條件段間間接轉移
二、條件轉移指令
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轉移
三、循環指令
loop label;dec cx,jncxz lable;計數循環
loope/loopz lable;dec cx jz lable;帶條件循環
loopne/loopnz lable;;dec cx jnz lable;帶條件循環oop