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!