当前位置: 首页 > news >正文

C++程序员要懂的一点汇编指令

目录

一、数据移动(赋值 / 取地址 / 参数传递)

二、算术与逻辑运算

三、比较与分支(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

测试是否为 0

if (!x)if (ptr)

常用

je label

相等跳转

if (a == b)

Jump if Equal

jne 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 rbp

push 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

字节拷贝

memcpy

movsq

8 字节拷贝

memcpy

rep movsb

重复拷贝

memcpy

stosb

填充字节

memset

rep stosb

重复填充

memset

七、并发与原子

汇编指令

作用

C++ 源码关联

说明

lock add [mem], reg

原子加

std::atomic::fetch_add

lock cmpxchg

CAS

compare_exchange_weak

自旋锁核心

mfence

内存屏障

std::atomic_thread_fence

sfence

写屏障

std::atomic_signal_fence

lfence

读屏障

八、SIMD(了解即可)

汇编前缀

作用

C++ 关联

movdqu xmm0, [mem]

128bit 加载

std::simd

paddd xmm0, xmm1

向量加

mulps xmm0, xmm1

单精度乘

九、虚函数与多态

汇编片段

C++ 含义

mov rax, [rbx]

取 vptr

call [rax + 8]

调用第 2 个虚函数

十、常见 C++ 结构 → 汇编对照表

C++ 代码

典型汇编

int x = 1;

mov dword ptr [rbp-4], 1

x = y;

mov eax, [rbp-8]; mov [rbp-4], eax

return x;

mov eax, [rbp-4]; ret

if (x) f();

test eax,eax; jz .Lskip; call f

while (i--) {}

dec eax; jnz .loop

new T()

call operator new; call T::T

delete p;

call T::~T; call operator delete

十一、总结

C++ 程序员的汇编目标不是“会写”,而是:

看得懂call / mov / jmp

能从汇编判断有没有多余拷贝

能理解虚函数、inline、atomic 的成本

例如从汇编层面理解函数调用:

函数调用时,调用者按 ABI 把参数放入寄存器并压返回地址;
被调用者建立栈帧、执行逻辑、将返回值放入rax,最后通过ret返回;
栈帧由rbp/rsp维护,但优化后可能被省略

http://www.jsqmd.com/news/1204047/

相关文章:

  • 深度操作系统20.2.3版本特性与优化解析
  • 断轴修复指南:从原理到实践,低强度场景修复方案详解
  • 同城代驾完整源码解析,司机端接单推送功能源码分享
  • 深入学习Linux: 命令行参数与环境变量详解
  • 人形机器人落地实战指南:工业、医疗、物流四大场景核心指标解析
  • 亲身探访上海雷达官方售后服务中心|最新地址和24小时售后电话(2026年7月最新) - 亨得利钟表维修中心
  • 魔方正阶速拧方法全解析:从层先法到CFOP进阶指南
  • Ubuntu安装搜狗输入法完整指南
  • 如何快速配置智能扫描工具:面向米哈游玩家的完整登录解决方案
  • 高性能游戏反作弊系统资源优化方案:SGuard限制器技术实现深度解析
  • 分布式 MultiKit 多端同步落地:离线冲突自定义合并完整业务实践
  • Windows电脑配置查看与硬件诊断全指南
  • AI Agent互联网能力实现与实战指南
  • 勒索病毒应急响应:断网后Windows/Linux服务器关键数据备份实战指南
  • 2026 年新消息:水城优秀的品检机直销厂家格局重塑与选型新思路,工厂质量危机?这台设备如何彻底改变检验流程 - 品质体验官
  • CS游戏C4爆炸机制更新:小鸡伤害判定与战术影响分析
  • Win10系统C盘爆满优化方案:WPS与Edge存储清理实战
  • 论文分析9:基于尺度特征交互改进的YOLOv8在低能见度环境下的船舶目标检测
  • 轨迹预测基座模型:从坐标拟合到时空认知的范式跃迁
  • Linux用户信息查看命令users/who/w详解与实战
  • 编码阶段优化C++程序性能的一些做法(仅供参考)
  • Claude Code与智谱CLI共存方案:命令隔离与配置分离实战
  • 终极指南:如何用Wand-Enhancer免费解锁WeMod完整体验
  • Linux包管理:DEB与RPM的离线安装全指南
  • macOS Sonoma 14.4导致iCloud Drive文件版本丢失问题解析
  • 基于Mavlink文件传输的嵌入式设备OTA固件升级方案详解
  • 2026 年更新:涟水口碑好的水下搜救打捞哪里找公司推荐几家,别再盲搜!水下搜救打捞的秘密通道曝光 - 企业推荐官【认证官方】
  • 亲身到店探访深圳美度官方售后服务中心|最新地址及售后电话(2026年7月最新) - 亨得利钟表维修中心
  • C++26 执行控制库:走向统一的异步编程模型
  • 埃塞俄比亚的名义雇主合法吗?主要有哪些法律合规措施?