¿Cómo puedo compilar y ejecutar el ensamblaje en Ubuntu 18.04?

16

Hace poco que quería aprender ensamblaje, así que aprendí un poco. Puse esto en nano y lo guardé como playground.asm. Ahora me pregunto, ¿cómo lo compilo y lo ejecuto? Ya he buscado en todas partes y todavía no puedo encontrarlo. Tengo mucha curiosidad y no tiene sentido aprender un idioma si ni siquiera puedes usarlo.

Quemar
fuente
44
Es bueno leer tal pregunta en tiempos de marcos de tamaño gigabyte para todo tipo de problemas :-)
PerlDuck
44
Tenga en cuenta que hay dos "sabores" de ensamblaje principales que tienen una sintaxis diferente: AT&T (gas) e Intel (nasm). Antes de elegir un ensamblador, debe decidir qué sintaxis desea aprender y usar. Vea una tabla de comparación detallada aquí . Si aún no está seguro, vaya con Intel / nasm.
Undercat aplaude a Monica el
2
Puede usar gcc que debe instalarse en una máquina Ubuntu estándar de forma predeterminada. La extensión del nombre de archivo es .sy el comando para compilar debería sergcc myprog.s
FedonKadifeli,
Alguien quiere cerrar esta pregunta sobre cómo compilar un programa en lenguaje ensamblador en Ubuntu como fuera de tema. 😢 ¿Por qué debería estar cerrado como fuera de tema? Se trata de paquetes de los repositorios predeterminados de Ubuntu y de compilar código de ensamblaje en Ubuntu, no de cómo escribir código de ensamblaje.
karel

Respuestas:

17

En todas las versiones compatibles de Ubuntu, abra el terminal y escriba:

sudo apt install as31 nasm  

as31 : ensamblador Intel 8031/8051
Este es unensamblador Intel 8031/8051rápido, simple y fácil de usar.

nasm : ensamblador x86 de uso general
Netwide Assembler. NASM generará actualmente archivos binarios de formato plano, archivos de objeto a.out, COFF y ELF Unix, y archivos de objeto Microsoft de 16 bits DOS y Win32.

Este es el código para un programa en lenguaje ensamblador que 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 está utilizando NASM en Ubuntu 18.04, los comandos para compilar y ejecutar un archivo .asm llamado hello.asm son:

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
karel
fuente
1
¿Por qué se as31necesitaría el paquete? Según la pregunta y la descripción del paquete, no parece que sirva para un propósito.
kasperd
44
@kasperd En realidad as31no es necesario. Inspirado por la pregunta, busqué en Google un Hello World en ensamblador, solo lo instalé nasmy funcionó. :-) Creo que Karel acaba de mencionarlo como una alternativa.
PerlDuck
1
as31 es una alternativa si también quieres aprender a ensamblar con as31.
karel
2
@kasperd: el OP no especificó para qué ISA está escribiendo ni para qué sintaxis de ensamblado está usando, por lo que tiene sentido incluir tantas opciones como sea posible.
Jörg W Mittag
1
Esta respuesta se beneficiaría al dividir el comando de instalación en nasm, y otra para el ensamblador 8051 + emulador (parece que hay al menos uno). Dado que el objetivo es aprender el ensamblaje, ejecutar emulador para una arquitectura simple (r) que x86 podría tener mucho sentido.
hyde
2

Ubuntu viene como (el ensamblador portátil de GNU)

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

-o: Indica dónde enviar la salida
-e: Indica a ld el símbolo de inicio

thiagola92
fuente