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匯編語言/基本指令集