汇编文件:.a .s .asm之间的差异

时间:2015-12-04 22:33:06

标签: file assembly mips file-type

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

  • .a
  • .s
  • .asm

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

1 个答案:

答案 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很容易意外覆盖。