¿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.


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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.