目录一、数据移动赋值 / 取地址 / 参数传递二、算术与逻辑运算三、比较与分支if / while / for四、函数调用与返回五、栈与局部变量六、内存与字符串操作七、并发与原子八、SIMD了解即可九、虚函数与多态十、常见 C 结构 → 汇编对照表十一、总结非AI生成觉得有用就请您帮忙点赞转发收藏吧您的鼓励是我创作的动力多谢看官。由于能力水平有限文中的错误或不严谨的地方在所难免还请批评指正。一、数据移动赋值 / 取地址 / 参数传递汇编指令作用C 源码关联说明mov reg, reg寄存器间复制x y;mov reg, imm立即数赋值x 10;mov reg, [addr]读内存x *p;x a;局部变量也在内存mov [addr], reg写内存*p x;a x;lea reg, [addr]加载地址p x;不访问内存常用于算术movzx reg, mem零扩展int x unsigned_char;无符号扩展movsx reg, mem符号扩展int x signed_char;有符号扩展push reg压栈函数调用保存现场pop reg弹栈恢复现场二、算术与逻辑运算汇编指令作用C 源码关联说明add dst, src加法x y;sub dst, src减法x - y;inc reg自增x;dec reg自减--x;imul dst, src乘法x * y;有符号idiv reg除法x / y;极慢neg reg取负x -x;and dst, src按位与x y;or dst, src按位或x y;xor dst, src按位异或x ^ y;xor eax,eax→ 清零not reg按位取反x ~x;shl reg, imm左移x n;shr reg, imm逻辑右移x n;无符号sar reg, imm算术右移x n;有符号三、比较与分支if / while / for汇编指令作用C 源码关联说明cmp a, b比较if (a b)设置标志位test a, a测试是否为 0if (!x)if (ptr)常用je label相等跳转if (a b)Jump if Equaljne label不等跳转if (a ! b)jg label大于跳转if (a b)jge label≥if (a b)jl label小于if (a b)jle label≤if (a b)jmp label无条件跳转goto/while(true)loop label循环do{}while(--rcx)已过时四、函数调用与返回汇编指令作用C 源码关联说明call func调用函数foo();压返回地址ret函数返回return;enter建立栈帧函数序言现代编译器少用leave销毁栈帧函数尾声mov rsp,rbp; pop rbppush rbp保存基址函数开头pop rbp恢复基址函数结尾参数传递System V ABI寄存器C 参数rdi第 1 个rsi第 2 个rdx第 3 个rcx第 4 个r8第 5 个r9第 6 个五、栈与局部变量汇编指令作用C 源码关联说明sub rsp, N分配栈空间int a,b,c;add rsp, N释放栈空间函数返回mov [rbp-4], eax写局部变量x a;mov eax, [rbp-4]读局部变量a x;六、内存与字符串操作汇编指令作用C 源码关联说明movsb字节拷贝memcpymovsq8 字节拷贝memcpyrep movsb重复拷贝memcpystosb填充字节memsetrep stosb重复填充memset七、并发与原子汇编指令作用C 源码关联说明lock add [mem], reg原子加std::atomic::fetch_addlock cmpxchgCAScompare_exchange_weak自旋锁核心mfence内存屏障std::atomic_thread_fencesfence写屏障std::atomic_signal_fencelfence读屏障八、SIMD了解即可汇编前缀作用C 关联movdqu xmm0, [mem]128bit 加载std::simdpaddd xmm0, xmm1向量加mulps xmm0, xmm1单精度乘九、虚函数与多态汇编片段C 含义mov rax, [rbx]取 vptrcall [rax 8]调用第 2 个虚函数十、常见 C 结构 → 汇编对照表C 代码典型汇编int x 1;mov dword ptr [rbp-4], 1x y;mov eax, [rbp-8]; mov [rbp-4], eaxreturn x;mov eax, [rbp-4]; retif (x) f();test eax,eax; jz .Lskip; call fwhile (i--) {}dec eax; jnz .loopnew T()call operator new; call T::Tdelete p;call T::~T; call operator delete十一、总结C 程序员的汇编目标不是“会写”而是看得懂call / mov / jmp能从汇编判断有没有多余拷贝能理解虚函数、inline、atomic 的成本例如从汇编层面理解函数调用函数调用时调用者按 ABI 把参数放入寄存器并压返回地址被调用者建立栈帧、执行逻辑、将返回值放入rax最后通过ret返回栈帧由rbp/rsp维护但优化后可能被省略
C++程序员要懂的一点汇编指令
发布时间:2026/7/17 2:55:11
目录一、数据移动赋值 / 取地址 / 参数传递二、算术与逻辑运算三、比较与分支if / while / for四、函数调用与返回五、栈与局部变量六、内存与字符串操作七、并发与原子八、SIMD了解即可九、虚函数与多态十、常见 C 结构 → 汇编对照表十一、总结非AI生成觉得有用就请您帮忙点赞转发收藏吧您的鼓励是我创作的动力多谢看官。由于能力水平有限文中的错误或不严谨的地方在所难免还请批评指正。一、数据移动赋值 / 取地址 / 参数传递汇编指令作用C 源码关联说明mov reg, reg寄存器间复制x y;mov reg, imm立即数赋值x 10;mov reg, [addr]读内存x *p;x a;局部变量也在内存mov [addr], reg写内存*p x;a x;lea reg, [addr]加载地址p x;不访问内存常用于算术movzx reg, mem零扩展int x unsigned_char;无符号扩展movsx reg, mem符号扩展int x signed_char;有符号扩展push reg压栈函数调用保存现场pop reg弹栈恢复现场二、算术与逻辑运算汇编指令作用C 源码关联说明add dst, src加法x y;sub dst, src减法x - y;inc reg自增x;dec reg自减--x;imul dst, src乘法x * y;有符号idiv reg除法x / y;极慢neg reg取负x -x;and dst, src按位与x y;or dst, src按位或x y;xor dst, src按位异或x ^ y;xor eax,eax→ 清零not reg按位取反x ~x;shl reg, imm左移x n;shr reg, imm逻辑右移x n;无符号sar reg, imm算术右移x n;有符号三、比较与分支if / while / for汇编指令作用C 源码关联说明cmp a, b比较if (a b)设置标志位test a, a测试是否为 0if (!x)if (ptr)常用je label相等跳转if (a b)Jump if Equaljne label不等跳转if (a ! b)jg label大于跳转if (a b)jge label≥if (a b)jl label小于if (a b)jle label≤if (a b)jmp label无条件跳转goto/while(true)loop label循环do{}while(--rcx)已过时四、函数调用与返回汇编指令作用C 源码关联说明call func调用函数foo();压返回地址ret函数返回return;enter建立栈帧函数序言现代编译器少用leave销毁栈帧函数尾声mov rsp,rbp; pop rbppush rbp保存基址函数开头pop rbp恢复基址函数结尾参数传递System V ABI寄存器C 参数rdi第 1 个rsi第 2 个rdx第 3 个rcx第 4 个r8第 5 个r9第 6 个五、栈与局部变量汇编指令作用C 源码关联说明sub rsp, N分配栈空间int a,b,c;add rsp, N释放栈空间函数返回mov [rbp-4], eax写局部变量x a;mov eax, [rbp-4]读局部变量a x;六、内存与字符串操作汇编指令作用C 源码关联说明movsb字节拷贝memcpymovsq8 字节拷贝memcpyrep movsb重复拷贝memcpystosb填充字节memsetrep stosb重复填充memset七、并发与原子汇编指令作用C 源码关联说明lock add [mem], reg原子加std::atomic::fetch_addlock cmpxchgCAScompare_exchange_weak自旋锁核心mfence内存屏障std::atomic_thread_fencesfence写屏障std::atomic_signal_fencelfence读屏障八、SIMD了解即可汇编前缀作用C 关联movdqu xmm0, [mem]128bit 加载std::simdpaddd xmm0, xmm1向量加mulps xmm0, xmm1单精度乘九、虚函数与多态汇编片段C 含义mov rax, [rbx]取 vptrcall [rax 8]调用第 2 个虚函数十、常见 C 结构 → 汇编对照表C 代码典型汇编int x 1;mov dword ptr [rbp-4], 1x y;mov eax, [rbp-8]; mov [rbp-4], eaxreturn x;mov eax, [rbp-4]; retif (x) f();test eax,eax; jz .Lskip; call fwhile (i--) {}dec eax; jnz .loopnew T()call operator new; call T::Tdelete p;call T::~T; call operator delete十一、总结C 程序员的汇编目标不是“会写”而是看得懂call / mov / jmp能从汇编判断有没有多余拷贝能理解虚函数、inline、atomic 的成本例如从汇编层面理解函数调用函数调用时调用者按 ABI 把参数放入寄存器并压返回地址被调用者建立栈帧、执行逻辑、将返回值放入rax最后通过ret返回栈帧由rbp/rsp维护但优化后可能被省略