在MIPS模拟器“QTSpim”中,接受三种类型的文件:
.a
.s
.asm
这些文件类型之间是否有区别,如果是,那有什么区别?
答案 0 :(得分:21)
在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标头,例如{{1} }只有asm/unistd.h
s,因此可以包含在.S中,以获取#define
系统调用号等定义。在x86中,有两种不同版本的asm语法:AT&amp; T(由Unix编译器如gcc使用)和Intel / NASM(有几种方言,如MASM与NASM本身)。
无论您是否使用任何C预处理器功能, __NR_write
都适用于GNU .S
语法中的asm。
在x86中,as
更常与英特尔语法NASM / YASM或MASM源代码相关联。在x86之外,如果使用different directives than GNU as
,它可能是特定于平台的汇编程序可以汇编的asm源文件的一个很好的选择。
glibc source tree uses .S
for all asm source files。
具有gcc背景的人可能会将他们的MIPS asm放入.asm
或.S
个文件中,而具有更多NASM / YASM经验(或Windows)的人可能会使用.s
。< / p>
我建议不要使用.asm
文件,因为使用.s
很容易意外覆盖。