X86組合語言/基本指令集

维基教科书,自由的教学读本

跳转到: 导航, 搜索

首頁 > 電腦科學與技術書架 > X86組合語言 > 基本指令集


目录

[编辑] 資料搬移指令 (Data transfer instructions

[编辑] 整數運算指令

[编辑] 加法

  • add : 加
  • adc : 加 (含進位)
  • inc : 加1

[编辑] 減法

  • sub : 減
  • sbb : 減 (含借位)
  • dec : 減1

[编辑] 乘法

  • mul : 乘 (無號數)
  • imul : 乘 (有號數)

[编辑] 除法

  • div : 除 (無號數)
  • idiv : 除 (有號數)

[编辑] 邏輯運算指令

[编辑] 位元位移指令

[编辑] 程式流程控制

[编辑] 跳越指令

[编辑] 無條件跳越

[编辑] 無號數運算(比較)後使用的條件跳越指令

指令 意義 條件
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 CF=0且SF=OF
jge
jnl
若高於於或等於則跳越
若不低於則跳越
x≧y CF=OF
jl
jngl
若低於則跳越
若不大於或等於則跳越
x < y CF≠OF
jle
jng
若低於或等於則跳越
若不大於則跳越
x≦y CF=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

[编辑] 迴圈控制指令

[编辑] 副程式指令

  • call : 呼叫副程式使用
  • ret : 自副程式返回

[编辑] 插斷指令(Interrupt Instruction

  • int : 進入插斷處理程式
  • into
  • iret : 自插斷處理程式中返回

[编辑] 旗標控制相關指令

[编辑] 中断标志位

  • cli : 清中断允许
  • sti : 置中断允许

[编辑] 进位标志位

  • clc : 清进位标志位
  • stc : 置进位标志位
  • cmc : 进位标志位取反

[编辑] 字串處理相關指令

[编辑] 無運算指令


  • 以下暫存
    mov:這是組語裡面最常見的指令,將數值記入暫存器或是將A暫存器的內涵值移入B暫存器等等.
    範例語法:  mov 目的,來源        <==將來源值移入目的暫存器
                 mov DX,[zzz]       <==將zzz變數內涵移入DX暫存器
                 mov EAX,14h        <==移14h值移入EAX
    int:呼叫中斷來處理之前暫存器內涵值所對應的工作.例如Linux是int 0x80.
    add:加
     sub:減
     mul:乘
     div:除