Подтвердить что ты не робот

Файлы сборки: разница между .a.s.asm

В симуляторе MIPS "QTSpim" принимаются три типа файлов:

  • .a
  • .s
  • .asm

Есть ли разница между этими файловыми типами, и если да, в чем разница?

4b9b3361

Ответ 1

В системах Unix/Linux:

  • .a - это обычное расширение для статических библиотек (aka Archives of multiple .o files, сделанное с помощью 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 подходит для asm в синтаксисе GNU as, независимо от того, используете ли вы какие-либо функции препроцессора C или нет.

В x86 .asm чаще всего ассоциируется с исходным кодом Intel-синтаксиса NASM/YASM или MASM. Вне x86 это, вероятно, хороший выбор для исходных файлов asm, которые могут быть собраны ассемблером для конкретной платформы, если он использует разные директивы, чем GNU as.

В дерево источников glibc использует .s для всех исходных файлов asm.


Люди с фоном gcc могут помещать свой MIMS asm в файлы .s или .s, тогда как люди с большим опытом NASM/YASM (или Windows) могут перейти на .asm.

Я бы рекомендовал против файлов .s, потому что их легко перезаписать с помощью gcc -S foo.c.