Comment puis-je compiler et exécuter l'assembly dans Ubuntu 18.04?


16

J'ai récemment voulu apprendre l'assemblage, j'ai donc appris un peu. Je l'ai mis dans nano et l'ai enregistré en tant que terrain de jeu.asm. Maintenant, je me demande, comment puis-je le compiler et l'exécuter? J'ai déjà cherché partout et je ne peux toujours pas le trouver. Je suis vraiment curieux et il est inutile d'apprendre une langue si vous ne pouvez même pas l'utiliser.


4
Agréable de lire une telle question à l'époque des cadres de taille gigaoctet pour toutes sortes de problèmes :-)
PerlDuck

4
Prenez note qu'il existe deux "saveurs" d'assemblage principales qui ont une syntaxe différente: AT&T (gas) et Intel (nasm). Avant de choisir un assembleur, vous devez décider quelle syntaxe vous souhaitez apprendre et utiliser. Voir un tableau de comparaison détaillé ici . Si vous n'êtes toujours pas sûr, optez pour Intel / nasm.
undercat applaudit Monica

2
Vous pouvez utiliser gcc qui devrait être installé sur une machine Ubuntu standard par défaut. L'extension du nom de fichier est .set la commande à compiler devrait êtregcc myprog.s
FedonKadifeli

Quelqu'un veut fermer cette question sur la façon de compiler un programme en langage assembleur dans Ubuntu comme hors sujet. 😢 Pourquoi devrait-il être fermé hors sujet? Il s'agit des packages des référentiels Ubuntu par défaut et de la compilation du code assembleur dans Ubuntu, pas de la façon d'écrire le code assembleur.
karel

Réponses:


17

Dans toutes les versions d'Ubuntu actuellement prises en charge, ouvrez le terminal et tapez:

sudo apt install as31 nasm  

as31 : assembleur Intel 8031/8051
Il s'agit d'unassembleur Intel 8031/8051rapide, simple et facile à utiliser.

nasm : assembleur x86 à usage général
Netwide Assembler. NASM produira actuellement des fichiers binaires plats, a.out, COFF et ELF Unix, et des fichiers objet Microsoft 16 bits DOS et Win32.

Il s'agit du code d'un programme en langage assembleur qui imprime Hello world.

section     .text
global      _start 
_start: 
    mov     edx,len   
    mov     ecx,msg   
    mov     ebx,1   
    mov     eax,4   
    int     0x80   
    mov     eax,1  
    int     0x80   
section     .data
msg     db  'Hello world',0xa  
len     equ $ - msg   

Si vous utilisez NASM dans Ubuntu 18.04, les commandes pour compiler et exécuter un fichier .asm nommé hello.asm sont:

nasm -f elf64 hello.asm # assemble the program  
ld -s -o hello hello.o # link the object file nasm produced into an executable file  
./hello # hello is an executable file

1
Pourquoi le as31package serait-il nécessaire? D'après la question et la description du paquet, il ne semble pas que cela servirait un but.
kasperd

4
@kasperd as31n'est en fait pas nécessaire. Inspiré par la question, j'ai googlé un Hello World en assembleur, installé uniquement nasmet cela a fonctionné. :-) Je pense que Karel vient de le mentionner comme alternative.
PerlDuck

1
as31 est une alternative si vous souhaitez également apprendre l'assemblage avec as31.
karel

2
@kasperd: l'OP n'a pas spécifié pour quelle ISA il écrit, ni pour quelle syntaxe d'assembly il utilise, il est donc logique d'inclure autant d'options que possible.
Jörg W Mittag

1
Cette réponse gagnerait à diviser la commande d'installation en nasm, et une autre pour 8051 assembleur + émulateur (il semble y en avoir au moins un). Étant donné que le but est d'apprendre l'assemblage, exécuter l'émulateur pour une architecture (r) simple que x86 pourrait avoir beaucoup de sens.
hyde

2

Ubuntu est livré avec comme (l'assembleur portable GNU)

as file.s -o file.out
ld file.out -e main -o file
./file

-o: Indique où envoyer la sortie
-e: Indique au symbole de début ld

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.