x86組合語言 - 第三章 | 基本指令集
這邊要介紹一下組合語言的基本指令,基本上看過有個印象稍微了解。
資料搬移指令 (Data transfer instructions)
- mov  
- movsz  
- movzx  
- xchg  
整數運算指令
加法
- add:加
- adc:加 (含進位)
- inc:加1
減法
- sub:減
- sbb:減 (含借位)
- dec:減1
乘法
- mul:乘 (無號數)
- imul:乘 (有號數)
除法
- div:除 (無號數)
- idiv:除 (有號數)
邏輯運算指令
- and
- or
- xor
- not
位元位移指令
程式流程控制
跳越指令
無條件跳越
- jmp
無號數運算(比較)後使用的條件跳越指令
| 指令 | 意義 | 示意 | 條件 | 
|---|---|---|---|
| je | 若等於則跳越 | x = y | ZF=1 | 
| jne | 若不等於則跳越 | x≠y | ZF=0 | 
| ja jnbe | 若高於則跳越 若不低於則跳越 | x > y | CF=0且ZF=0 | 
| jae jnb | 若高於或等於則跳越 若不低於或等於則跳越 | x≧y | CF=0 | 
| jb jnae | 若低於則跳越 若不高於或等於則跳越 | x < y | CF=1 | 
| jbe jna | 若低於或等於則跳越 若不高於則跳越 | x≦y | CF=1或ZF=1 | 
有號數運算(比較)後使用的條件跳越指令
| 指令 | 意義 | 示意 | 條件 | 
|---|---|---|---|
| je | 若等於則跳越 | x = y | ZF=1 | 
| jne | 若不等於則跳越 | x≠y | ZF=0 | 
| jg jnle | 若大於則跳越 若不低於或等於則跳越 | x > y | ZF=0且SF=OF | 
| jge jnl | 若高於於或等於則跳越 若不低於則跳越 | x≧y | SF=OF | 
| jl jngl | 若低於則跳越 若不大於或等於則跳越 | x < y | SF≠OF | 
| jle jng | 若低於或等於則跳越 若不大於則跳越 | x≦y | ZF=1或SF≠OF | 
依旗號狀態判斷的條件跳越指令
| 指令 | 意義 | 條件 | 
|---|---|---|
| jc | 若進位則跳越 | CF=1 | 
| jnc | 若無進位則跳越 | CF=0 | 
| js | 若為負數則跳越 | SF=1 | 
| jns | 若為正數則跳越 | SF=0 | 
| jz | 若等於0則跳越 | ZF=1 | 
| jnz | 若不等於0則跳越 | ZF=0 | 
| jp | 若同位則跳越 | PF=1 | 
| jnp | 若沒有同位則跳越 | PF=0 | 
| jpe | 若偶同位則跳越 | PF=1 | 
| jpo | 若奇同位則跳越 | PF=0 | 
| jo | 若溢位則跳越 | OF=1 | 
| jno | 若沒有溢位則跳越 | OF=0 | 
迴圈控制指令
- loop
- loope
- loopz
- loopne
- loopnz
副程式指令
- call:呼叫副程式使用
- ret:自副程式返回
中斷指令(Interrupt Instruction)
- int:進入中斷處理程式
- into
- iret:自中斷處理程式中返回
旗標控制相關指令
中斷標誌位
- cli : 清中斷允許
- sti : 置中斷允許
進位標誌位
- clc : 清進位標誌位
- stc : 置進位標誌位
- cmc : 進位標誌位取反
字串處理相關指令
無運算指令
- nop
註:以上參考了
X86匯編語言/基本指令集

 
		