汇编文件:.a .s .asm 之间的区别
Assembly Files: Difference between .a .s .asm
在 MIPS 模拟器中 "QTSpim",接受三种类型的文件:
.a
.s
.asm
这些文件类型之间有区别吗?如果有,区别是什么?
在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
只有 #define
s,因此可以包含在 .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
.
意外覆盖
在 MIPS 模拟器中 "QTSpim",接受三种类型的文件:
.a
.s
.asm
这些文件类型之间有区别吗?如果有,区别是什么?
在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
只有#define
s,因此可以包含在 .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
.
glibc source tree uses .S
for all asm source files.
具有 gcc 背景的人可能会将他们的 MIPS 汇编放入 .S
或 .s
文件中,而具有更多 NASM/YASM 经验(或 Windows)的人可能会去.asm
.
我建议不要使用 .s
文件,因为很容易被 gcc -S foo.c
.