web-dev-qa-db-fra.com

Fichiers d'assemblage: différence entre .a .s .asm

Dans le simulateur MIPS "QTSpim", trois types de fichiers sont acceptés:

  • .a
  • .s
  • .asm

Y a-t-il une différence entre ces types de fichiers et si oui, quelle est la différence?

19
Nicolas Brauch

Dans les systèmes Unix/Linux:

  • .a Est l'extension habituelle pour les bibliothèques statiques (alias Archives de plusieurs fichiers .o, Faites avec ar(1)). Les bibliothèques dynamiques, alias objets partagés, utilisent .so.
  • .s Est utilisé pour la sortie du compilateur asm. (gcc -S foo.c Produit une sortie asm, avec un nom de fichier par défaut de foo.s)
  • .S Est utilisé pour les fichiers source asm écrits à la main . gcc -c foo.S L'exécute via le préprocesseur C (vous pouvez donc utiliser #include<>, #if, #define Et les commentaires de style C.) Certains en-têtes C, comme asm/unistd.h N'a que #define Et peut donc être inclus dans un .S pour obtenir des définitions comme __NR_write Les numéros d'appel système, par exemple.

Dans x86, il existe deux versions distinctes de la syntaxe asm: AT&T (utilisé par les compilateurs Unix comme gcc) et Intel/NASM (avec quelques dialectes, comme MASM vs NASM lui-même).

.S Convient à asm dans la syntaxe GNU as, que vous utilisiez ou non des fonctionnalités du préprocesseur C).

En x86, .asm Est plus souvent associé au code source NASM/YASM, ou MASM, de syntaxe Intel. En dehors de x86, c'est probablement un bon choix pour les fichiers source asm qui pourraient être assemblés par l'assembleur spécifique à la plate-forme, s'il utilise directives différentes de GNU as .

l'arborescence source de la glibc utilise .S Pour tous les fichiers source asm .


Les personnes ayant une expérience gcc peuvent mettre leur asm MIPS dans des fichiers .S Ou .s, Tandis que les personnes ayant plus d'expérience NASM/YASM (ou Windows), peuvent opter pour .asm.

Je recommanderais contre les fichiers .s, Car il est facile de remplacer accidentellement avec gcc -S foo.c.

22
Peter Cordes