web-dev-qa-db-ja.com

アセンブリファイル:.a .s .asmの違い

MIPSシミュレータ「QTSpim」では、3種類のファイルが受け入れられます。

  • .a
  • .s
  • .asm

それらのファイルタイプの間に違いはありますか?ある場合、違いは何ですか?

19
Nicolas Brauch

Unix/Linuxシステムの場合:

  • .aは、静的ライブラリの通常の拡張機能です(別名ar(1)で作成された複数の.oファイルのアーカイブ)。動的ライブラリ、つまり共有オブジェクトは.soを使用します。
  • .sは、asmコンパイラの出力に使用されます。 (gcc -S foo.cは、デフォルトのファイル名がfoo.sのasm出力を生成します)
  • .Sは、手書きのasmソースファイルに使用されます。 gcc -c foo.Sは、Cプリプロセッサーを介してそれを実行します(そのため、#include<>#if#define、およびCスタイルのコメントを使用できます。)asm/unistd.hなどの一部のCヘッダーは、#definesのみを持っているため、_Sに含めて、__NR_writeシステムのような定義を取得できます。たとえば、電話番号。

X86には、2つの異なるバージョンのasm構文があります。AT&T(gccのようなUnixコンパイラーによって使用されます)とIntel/NASM(MASMとNASM自体のような2つの方言があります)。

.Sは、Cプリプロセッサ機能を使用するかどうかに関係なく、GNU as構文のasmに適しています。

X86では、.asmはIntel-syntax NASM/YASM、またはMASMのソースコードに関連付けられることがよくあります。 x86以外では、プラットフォーム固有のアセンブラーによってアセンブルされる可能性のあるasmソースファイルには、おそらく GNU as

glibcソースツリーはすべてのasmソースファイルに対して.Sを使用します


Gccの背景を持つ人々はMIPS asmを.Sまたは.sファイルに入れるかもしれませんが、NASM/YASM経験(またはWindows)の経験がある人は.asmを選ぶかもしれません。

誤って.sで上書きしてしまう可能性があるため、gcc -S foo.cファイルは使用しないことをお勧めします。

22
Peter Cordes