跳转到内容
新建笔记

汇编语言与编译执行流程

汇编语言使用助记符、寄存器、标签及汇编器指令来描述目标程序。机器指令、汇编器伪指令和宏不是同一层次;一行汇编不一定对应恰好一条机器指令。阅读时先确定 ISA、执行模式、ABI 与工具链。

用途能解决的问题应保留的边界
性能分析与优化查看实际访存、分支、向量化和调用开销手写汇编不自动更快,应先测量并比较编译器优化结果
操作系统与驱动理解异常入口、上下文切换、屏障及特权操作必须符合特定架构和系统接口
嵌入式开发理解启动、栈、向量与编译器生成的外设访问芯片外围初始化与链接布局也影响运行
二进制分析从机器码理解已有程序的控制流与数据访问反汇编通常无法恢复原变量名、类型和全部源码意图
学习计算机原理联系高级语言、ABI 与实际指令不要把某一编译器版本的输出当成唯一翻译形式

文件扩展名不是平台规则

跳转到“文件扩展名不是平台规则”
环境与工具示例汇编输入常见目标与最终产物需要注意
Windows,MASM常见 .asm.obj,链接后常为 .exe 或 .dllMASM 是汇编器;没有一个通用必需的 .link 源文件
GNU 工具链,常见于 Linux 与交叉开发常见 .s;由编译器驱动预处理的汇编常用 .S常见 .o,再生成可执行文件、共享库或固件.ld 常用作 GNU 链接脚本扩展名,但不表示所有构建都要手写脚本
macOS,Clang 工具链常见 .s 或 .S,语法和指令取决于目标架构常见 Mach-O .o 与最终程序不能把 GNU .ld 脚本或 ELF 指令原样当作 macOS 的统一规则

其他汇编器也可能使用 .asm,扩展名不是其唯一识别标准。最终文件格式由目标平台及工具配置决定,不只由文件名决定。

  1. 编写或由编译器生成汇编文本,必要时先做预处理。
  2. 汇编器生成机器码、符号和重定位等目标文件信息。
  3. 链接器结合其他目标文件、库和链接配置,形成最终映像;部分符号也可能留给运行时处理。
  4. 有操作系统时,由加载器及所需的动态链接器建立执行环境并进入程序;裸机系统则由启动、引导和既定存储布局完成相应工作。
  5. 处理器执行机器指令。代码能完成汇编,并不能单独证明链接、ABI、内存布局和运行结果都正确。