32位汇编指令速查表(MASM / x86)
📦 一、数据传送指令(MOV、XCHG 等)
| 指令 | 功能说明 | 示例 | 
|---|---|---|
mov | 
数据传送 | mov eax, 100 | 
movzx | 
零扩展传送(无符号) | movzx eax, byte ptr [esi] | 
movsx | 
符号扩展传送(有符号) | movsx eax, byte ptr [esi] | 
xchg | 
交换两个操作数的值 | xchg eax, ebx | 
lea | 
取有效地址(地址计算) | lea eax, [ebx+4*esi] | 
offset | 
获取变量地址 | mov edx, offset msg | 
➕ 二、算术运算指令
| 指令 | 功能说明 | 示例 | 
|---|---|---|
add | 
加法 | add eax, 5 | 
sub | 
减法 | sub ebx, 2 | 
inc | 
加 1 | inc ecx | 
dec | 
减 1 | dec ecx | 
imul | 
整数乘法 | imul eax, ebx | 
idiv | 
有符号除法(注意 edx) | idiv ebx | 
neg | 
取负数(0 - eax) | neg eax | 
cdq | 
eax 扩展到 edx:eax | cdq(除法前) | 
🧮 三、逻辑与位运算
| 指令 | 功能说明 | 示例 | 
|---|---|---|
and | 
按位与 | and eax, 0Fh | 
or | 
按位或 | or eax, 10h | 
xor | 
按位异或 | xor eax, eax | 
not | 
按位取反 | not eax | 
shl | 
左移(×2) | shl eax, 1 | 
shr | 
右移(÷2) | shr eax, 1 | 
sar | 
算术右移 | sar eax, 1 | 
🔁 四、比较与跳转
| 比较+跳转指令 | 功能说明 | 示例 | 
|---|---|---|
cmp | 
比较两个数 | cmp eax, ebx | 
je / jz | 
相等(等于0)跳转 | je label | 
jne / jnz | 
不等 | jne label | 
jg / jge | 
大于/大于等于 | jg label | 
jl / jle | 
小于/小于等于 | jl label | 
ja | 
无符号大于 | ja label | 
jb | 
无符号小于 | jb label | 
jmp | 
无条件跳转 | jmp label | 
loop | 
ecx–,不为 0 跳 | loop label | 
⏬ 五、堆栈操作与子程序
| 指令 | 功能说明 | 示例 | 
|---|---|---|
push | 
压栈 | push eax | 
pop | 
出栈 | pop eax | 
call | 
调用子程序 | call printInt | 
ret | 
返回 | ret 4 | 
leave | 
恢复 ebp、esp 栈帧 | leave | 
📚 六、字符串处理指令(高阶用法)
| 指令 | 功能 | 要求设置寄存器 | 
|---|---|---|
movsb | 
拷贝字符串(字节) | esi, edi | 
stosd | 
存字符串到目的地 | edi | 
lodsb | 
加载字符串到 al | esi | 
scasb | 
比较字符串字节 | edi, al | 
💻 七、Irvine32 特殊指令(宏/函数)
| 指令 | 功能 | 
|---|---|
call writeint | 
输出整数 | 
call writestring | 
输出字符串 | 
call readint | 
读取整数到 eax | 
call crlf | 
输出换行符 | 
exit | 
程序退出(不能用 call) | 
👀 八、常用伪指令
| 伪指令 | 功能 | 
|---|---|
include | 
包含其他文件(如 Irvine32) | 
.data | 
数据段开始 | 
.code | 
代码段开始 | 
proc | 
开始一个过程(函数) | 
endp | 
结束一个过程 | 
end main | 
程序入口 | 
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Firefly!






