Like Share Discussion Bookmark Smile

J.J. Huang   2019-07-03   x86組合語言   瀏覽次數:

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