汇编文件:.a .s .asm 之间的区别

Assembly Files: Difference between .a .s .asm

在 MIPS 模拟器中 "QTSpim",接受三种类型的文件:

这些文件类型之间有区别吗?如果有,区别是什么?

在Unix/Linux系统中:

  • .a 是静态库的常用扩展名(也称为多个 .o 文件的存档,由 ar(1) 制作)。动态库,又名共享对象,使用 .so.
  • .s 用于 asm 编译器输出。 (gcc -S foo.c 生成 asm 输出,默认文件名为 foo.s
  • .S用于手写asm源文件gcc -c foo.S 通过 C 预处理器运行它(因此您可以使用 #include<>#if#define 和 C 风格的注释。)一些 C 头文件,例如 asm/unistd.h 只有 #defines,因此可以包含在 .S 中以获得诸如 __NR_write 系统调用编号之类的定义。

在 x86 中,有两个不同版本的 asm 语法:AT&T(由 gcc 等 Unix 编译器使用)和 Intel/NASM(有几种方言,如 MASM 与 NASM 本身) .

.S 适用于 GNU as 语法中的 asm,无论您是否使用任何 C 预处理器功能。

在 x86 中,.asm 通常与英特尔语法 NASM/YASM 或 MASM 源代码相关联。在 x86 之外,如果它使用 different directives than GNU as.

,对于可以由特定于平台的汇编程序汇编的 asm 源文件,它可能是一个不错的选择

glibc source tree uses .S for all asm source files.


具有 gcc 背景的人可能会将他们的 MIPS 汇编放入 .S.s 文件中,而具有更多 NASM/YASM 经验(或 Windows)的人可能会去.asm.

我建议不要使用 .s 文件,因为很容易被 gcc -S foo.c.

意外覆盖