8.1. 汇编源程序 .s 文件和 .S 文件
第02章介绍GCC编译过程时已经说明,汇编器的作用是把汇编源程序转换为处理器可执行的机器指令,并封装成目标文件。汇编源程序常见扩展名有两种:.s 和 .S。二者区别在于:.s 文件通常只包含与CPU架构相关的汇编指令、与汇编器相关的汇编器指令以及注释等内容,第02章中GCC编译流程产生的中间文件就包括 .s 文件;.S 文件通常是程序员直接编写的汇编源文件,除 .s 文件内容外,还可以包含C语言宏定义和预处理命令(以“#”开头的语句)等。这些预处理内容不能由汇编器直接处理,需要先由GCC工具(具体为 cc1)完成预处理,再交给汇编器。.S 文件预处理后的输出就是 .s 文件。对GCC编译器来说,使用 .S 文件相当于跳过了从 .c 文件到 .i 文件的过程,可直接对 .S 文件进行编译并生成对应 .s 文件。图7-1展示了 .S 文件和 .s 文件在GCC编译流程中的位置。