目录
一、数据移动(赋值 / 取地址 / 参数传递)
二、算术与逻辑运算
三、比较与分支(if / while / for)
四、函数调用与返回
五、栈与局部变量
六、内存与字符串操作
七、并发与原子
八、SIMD(了解即可)
九、虚函数与多态
十、常见 C++ 结构 → 汇编对照表
十一、总结
非AI生成,觉得有用,就请您帮忙点赞转发收藏吧,您的鼓励是我创作的动力,多谢看官。
由于能力水平有限,文中的错误或不严谨的地方在所难免,还请批评指正。
一、数据移动(赋值 / 取地址 / 参数传递)
汇编指令 | 作用 | C++ 源码关联 | 说明 |
|---|---|---|---|
| 寄存器间复制 |
| |
| 立即数赋值 |
| |
| 读内存 |
| 局部变量也在内存 |
| 写内存 |
| |
| 加载地址 |
| 不访问内存,常用于算术 |
| 零扩展 |
| 无符号扩展 |
| 符号扩展 |
| 有符号扩展 |
| 压栈 | 函数调用保存现场 | |
| 弹栈 | 恢复现场 |
二、算术与逻辑运算
汇编指令 | 作用 | C++ 源码关联 | 说明 |
|---|---|---|---|
| 加法 |
| |
| 减法 |
| |
| 自增 |
| |
| 自减 |
| |
| 乘法 |
| 有符号 |
| 除法 |
| 极慢 |
| 取负 |
| |
| 按位与 |
| |
| 按位或 | `x | = y;` |
| 按位异或 |
|
|
| 按位取反 |
| |
| 左移 |
| |
| 逻辑右移 |
| |
| 算术右移 |
|
三、比较与分支(if / while / for)
汇编指令 | 作用 | C++ 源码关联 | 说明 |
|---|---|---|---|
| 比较 |
| 设置标志位 |
| 测试是否为 0 |
| 常用 |
| 相等跳转 |
| Jump if Equal |
| 不等跳转 |
| |
| 大于跳转 |
| |
| ≥ |
| |
| 小于 |
| |
| ≤ |
| |
| 无条件跳转 |
| |
| 循环 |
| 已过时 |
四、函数调用与返回
汇编指令 | 作用 | C++ 源码关联 | 说明 |
|---|---|---|---|
| 调用函数 |
| 压返回地址 |
| 函数返回 |
| |
| 建立栈帧 | 函数序言 | 现代编译器少用 |
| 销毁栈帧 | 函数尾声 |
|
| 保存基址 | 函数开头 | |
| 恢复基址 | 函数结尾 |
参数传递(System V ABI)
寄存器 | C++ 参数 |
|---|---|
| 第 1 个 |
| 第 2 个 |
| 第 3 个 |
| 第 4 个 |
| 第 5 个 |
| 第 6 个 |
五、栈与局部变量
汇编指令 | 作用 | C++ 源码关联 | 说明 |
|---|---|---|---|
| 分配栈空间 |
| |
| 释放栈空间 | 函数返回 | |
| 写局部变量 |
| |
| 读局部变量 |
|
六、内存与字符串操作
汇编指令 | 作用 | C++ 源码关联 | 说明 |
|---|---|---|---|
| 字节拷贝 |
| |
| 8 字节拷贝 |
| |
| 重复拷贝 |
| |
| 填充字节 |
| |
| 重复填充 |
|
七、并发与原子
汇编指令 | 作用 | C++ 源码关联 | 说明 |
|---|---|---|---|
| 原子加 |
| |
| CAS |
| 自旋锁核心 |
| 内存屏障 |
| |
| 写屏障 |
| |
| 读屏障 |
八、SIMD(了解即可)
汇编前缀 | 作用 | C++ 关联 |
|---|---|---|
| 128bit 加载 |
|
| 向量加 | |
| 单精度乘 |
九、虚函数与多态
汇编片段 | C++ 含义 |
|---|---|
| 取 vptr |
| 调用第 2 个虚函数 |
十、常见 C++ 结构 → 汇编对照表
C++ 代码 | 典型汇编 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
十一、总结
C++ 程序员的汇编目标不是“会写”,而是:
看得懂
call / mov / jmp能从汇编判断有没有多余拷贝
能理解虚函数、inline、atomic 的成本
例如从汇编层面理解函数调用:函数调用时,调用者按 ABI 把参数放入寄存器并压返回地址;
被调用者建立栈帧、执行逻辑、将返回值放入rax,最后通过ret返回;
栈帧由rbp/rsp维护,但优化后可能被省略