在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(由Unix编译器如gcc使用)和Intel/NASM(有几种方言,如MASM与NASM本身).
.S
适用于GNU as
语法中的asm ,无论您是否使用任何C预处理器功能.
在x86中,.asm
更常与英特尔语法NASM/YASM或MASM源代码相关联.在x86之外,如果它使用与GNU不同的指令as
,它可能是特定于平台的汇编程序可以汇编的asm源文件的一个很好的选择.
在glibc的源代码树中使用.S
的所有ASM源文件.
具有gcc背景的人可能将他们的MIPS asm放入文件.S
或.s
文件中,而具有更多NASM/YASM经验(或Windows)的人可能会选择.asm
.
我建议不要使用.s
文件,因为它很容易被覆盖gcc -S foo.c
.