通用指令列表

下面主要是 16/32 位指令,除了个别指令在64位机器上没有以外,其他的基本可以运用于64位机器。

指令符号说明
符号 说明
r8 任意一个8位通用寄存器
r16 任意一个16位通用寄存器
r32 任意一个32位通用寄存器
reg 代表r8/r16/r32
seg 段寄存器CS/DS/ES/SS和FS/GS
m8 一个8位存储器操作数单元
m16 一个16位存储器操作数单元
m32 一个32位存储器操作数单元
mem 代表m8/m16/m32
i8 一个8位立即数
i16 一个16位立即数
i32 一个32位立即数
imm 代表i8/i16/i32
dest 目的操作数
src 源操作数
label 标号
16/32位基本指令的汇编格式
指令类型 指令汇编格式 指令功能简介
传送指令 MOV reg/mem,imm dest <- src
MOV reg/mem/seg,reg
MOV reg/seg,mem
MOV reg/mem,seg
交换指令 XCHG reg,reg/mem reg <- -> reg/mem
XCHG reg/mem,reg
转换指令 XLAT buffer AL <- DS:[(E)BX + AL]
XLAT 注:buffer表示代码表所在的缓存区
堆栈指令 PUSH reg/mem/seg 寄存器/存储器入栈
PUSH imm 立即数入栈
POP reg/seg/mem 出栈
PUSHA 保护所有r16
POPA 恢复所有r16
PUSHAD 保护所有r32
POPAD 恢复所有r32
标志位传送 LAHF AH <- FLAG低字节
SAHF FLAGS低字节 <- AH
PUSHF FLAGS入栈
POPF FLAGS出栈
PUSHFD EFLAGS入栈
POPFD EFLAGS出栈
地址传送 LEA r16/r32,mem r16/r32 <- 16/32位有效地址
LDS r16/r32,mem DS:r16/r32 <- 32/64位远指针
LES r16/r32,mem ES:r16/r32 <- 32/64位远指针
LFS r16/r32,mem FS:r16/r32 <- 32/64位远指针
LGS r16/r32,mem GS:r16/r32 <- 32/64位远指针
LSS r16/r32,mem SS:r16/r32 <- 32/64位远指针
输入输出 IN AL/AX/EAX,i8/DX AL/AX/EAX <- I/O端口 i8/[DX]
OUT i8/DX,AL/AX/EAX I/O端口 i8/[DX] <- AL/AX/EAX
加法运算 ADD reg,imm/reg/mem dest <- dest + src
ADD mem,imm/reg
ADC reg,imm/reg/mem dest <- dest + src + CF
ADC mem,imm/reg
INC reg/mem reg/mem <- reg/mem + 1
减法运算 SUB reg,imm/reg/mem dest <- dest - src
SUB mem,imm/reg
SBB reg,imm/reg/mem dest <- dest - src - CF
SBB mem,imm/reg
DEC reg/mem reg/mem <- reg/mem - 1
NEG reg/mem <- (0 - reg/mem)
CMP reg,imm/reg/mem dest <- src
CMP mem,imm/reg
乘法运算 MUL reg/mem 无符号数值乘法
IMUL reg/mem 有符号数值乘法
IMUL r16,r16/m16/i8/i16 r16 <- r16 x r16/m16/i8/i16
IMUL r16,r/m16,i8/i16 r16 <- r/m16 x i8/i16
IMUL r32,r32/m32/i8/i32 r32 <- r32 x r32/m32/i8/i32
IMUL r32,r/m32,i8/i32 r32 <- r32/m32 x i8/i32
DIV reg/mem 无符号数值除法
IDIV reg/mem 有符号数值除法
符号扩展 CBW 把AL符号扩展为AX
CWD 把AX符号扩展为DX.AX
CWDE 把AX符号扩展为EAX
CDQ 把EAX符号扩展为EDX.EAX
MOVSX r16,r8/m8 把 r8/m8 符号扩展并传送至r16
MOVSX r32,r8/m8/r16/m16 把 r8/m8/r16/m16 符号扩展并传送至r32
MOVZX r16,r8/m8 把 r8/m8 零位扩展并传送至 r16
MOVZX r32,r8/m8/r16/m16 把 r8/m8/r16/m16 零位扩展并传送至r32
十进制调整 DAA 将 AL 中的加和调整为压缩BCD码
DAS 将 AL 中的减差调整为压缩BCD码
AAA 将 AL 中的加和调整为非压缩BCD码
AAS 将 AL 中的减差调整为非压缩BCD码
AAM 将 AX 中的加和调整为非压缩BCD码
AAD 将 AX 中的非压缩BCD码扩展成二进制数
逻辑运算 AND reg,imm/reg/mem dest <- dest AND src
AND mem,imm/reg
OR reg,imm/reg/mem dest <- dest OR src
OR mem,imm/reg
XOR reg,imm/reg/mem dest <- dest XOR src
XOR mem,imm/reg
TEST reg,imm/reg/mem dest AND src
TEST mem,imm/reg
NOT reg/mem reg/mem <- NOT reg/mem
移位 SAL reg/mem,1/CL/i8 算术左移 1/CL/i8 指定的位数
SAR reg/mem,1/CL/i8 算术右移 1/CL/i8 指定的位数
SHL reg/mem,1/CL/i8 与 SAL 相同
SHR reg/mem,1/CL/i8 逻辑右移 1/CL/i8 指定的位数
循环移位 ROL reg/mem,1/CL/i8 循环左移 1/CL/i8 指定的位数
ROR reg/mem,1/CL/i8 循环右移 1/CL/i8 指定的位数
RCR reg/mem,1/CL/i8 带进位循环左移 1/CL/i8 指定的位数
RCR reg/mem,1/CL/i8 带进位循环右移 1/CL/i8 指定的位数
串操作 MOVS[B/W/D] 串传送
LODS[B/W/D] 串读取
STOS[B/W/D] 串储存
CMPS[B/W/D] 串比较
SCAS[B/W/D] 串扫描
INS[B/W/D] I/O 串输入
OUTS[B/W/D] I/O 串输出
REP 重复前缀
REPZ/REPE 相等重复前缀
REPNZ/REPNE 不相等重复前缀
转移 JMP label 无条件直接转移
JMP r16/r32/m16 无条件间接转移
JCC label 条件转移
JCXZ label CX 等于 0 转移
JECXZ label ECX 等于 0 转移
循环 LOOP label (E)CX <- (E)CX - 1;若(E)CX != 0,循环
LOOPZ/LOOPE label (E)CX <- (E)CX - 1;若 (E)CX != 0 且 ZF = 1,循环
LOOPNZ/LOOPNE label (E)CX <- (E)CX - 1;若 (E)CX != 0 且 ZF = 0,循环
子程序 CALL label 直接调用
CALL r16/m16 间接调用
RET 无参数返回
RET i16 有参数返回
中断 INT i8 中断调用
IRET 中断返回
INTO 溢出中断调用
高级语言支持 ENTER i16/i8 建立堆栈帧
LEAVE 释放堆栈帧
BOUND r16/r32,mem 边界检测
处理器指令 CLC CF <- 0
STC CF <- 1
CMC CF <- ~CF
CLD DF <- 0
STD DF <- 1
CLI IF <- 0
STI IF <- 1
NOP 空操作指令
WAIT 等待指令
HIL 停机指令
LOCK 封锁前缀
SEG 段超越前缀
新增 32位 指令的汇编格式
双精度移位 SHLD r16/r32/ m16/m32, r16/r32, i8/CL 将 r16/r32 的 i8/CL 位左移进入 r16/r32/ m16/m32
SHRD r16/r32/ m16/m32, r16/r32, i8/CL 将 r16/r32 的 i8/CL 位右移进入 r16/r32/ m16/m32
位扫描 BSF r16/r32, r16/r32/ m16/m32 向前扫描
BSR r16/r32, r16/r32/ m16/m32 向后扫描
位测试 BT r16/r32, i8/r16/r32 测试位
BTC r16/r32, i8/r16/r32 测试位求反
BTR r16/r32, i8/r16/r32 测试位复位
BTS r16/r32, i8/r16/r32 测试位置位
条件设置 SETcc r8/m8 条件成立, r8/m8 = 1; 否则,r8/m8 = 0
系统寄存器传送 MOV CRn/DRn/TRn, r32 装入系统寄存器
MOV r32, CRn/DRn/TRn 读取系统寄存器
多处理器 BSWAP r32 字节交换
XADD reg/mem,reg 交换加
CMPXCHG reg/mem, reg 比较交换
高速缓存 INVD 高速缓存无效
WBINVD 回写及高速缓存无效
INVLPG mem TLB 无效
Pentium 指令 CMPXCHG8B m64 8字节比较交换
CPUID 返回处理器的有关特征信息
RDTSC EDX.EAX <- 64位时间标记计数器值
RDMSR EDX.EAX <- 模型专用寄存器值
WRMSR 模型专用寄存器值 <- EDX.EAX
RSM 从系统管理方式返回
Pentium Pro 指令 CMOVcc r16/r32, r16/r32/ m16/m32 条件成立,r16/r32 <- r16/r32/ m16/m32
RDPMC EDX.EAX <- 40位性能监控计数器值
UD2 产生一个无效操作码异常