NASM
Primeramente Nasm es un ensamblador libre para la arquitectura x86. Podemos encontrarlo para diversos sistemas operativos como Linux o Windows. Un ensamblador permite ensamblar código en lenguaje ensamblador. (sic)
Desgraciadamente, ensamblador significa dos cosas:
- El lenguaje ensamblador que permite programar en lenguaje de maquina utilizando instrucciones mnemónicas
- El programa que va a transformar el código en lenguaje de maquina para que pueda ser comprendido directamente por el procesador.
Las características de mi equipo son:
Como se observa la instalación la he hecho para ubuntu 12.04 con arquitectura de 64 bits. La instalación está dada por consola con el comando:
$ sudo apt-get install nasm build-essential
Colocamos la constraseña y esperamos a que se instale el compilador. Terminado esto está instalado NASM.
CREANDO HOLA MUNDO EN ENSAMBLADOR
No es necesario un editor específico para crear un fichero fuente destinado a Nasm. Eventualmente podríamos utilizar un editor que soporte la coloración sintáctica del ensamblador pero que yo sepa no existe uno que soporte la sintaxis de Nasm. Por lo tanto, podemos elegir entre gedit, sublime, kwrite, xemacs etc...
Al guardar el siguiente código fuente se lo debe hacer con la extensión .nasm. En mi caso se llama prueba.nasm y ha sido grabado en el escritorio.
; "Hello World!" in 32 bit Linux NASM
; adapted from http://asm.sourceforge.net/intro/hello.html by Mark Loiseau
; referenced in http://blog.markloiseau.com/2012/04/hello-world-NASM-Linux
global _start ; global entry point export for ld
section .text
_start:
; sys_write(stdout, message, length)
mov eax, 4 ; sys_write syscall
mov ebx, 1 ; stdout
mov ecx, message ; message address
mov edx, length ; message string length
int 80h
; sys_exit(return_code)
mov eax, 1 ; sys_exit syscall
mov ebx, 0 ; return 0 (success)
int 80h
section .data
message: db 'Hello, world!',0x0A ; message and newline
length: equ $-message ; NASM definition pseudo-instruction
COMPILANDO EL PROGRAMA ENSAMBLADOR EN CÓDIGO MÁQUINA
Dependiendo de la arquitectura del SO se deben ejecutar los siguientes comandos:
Sistema de 64 bits:
$ nasm -f elf64 -o prueba.o prueba.nasm
Sistema de 32 bits:
$ nasm -f elf -o prueba.o prueba.nasm
$ nasm -f elf -o prueba.o prueba.nasm
Esto traducirá el programa conjunto en x86 código de máquina que su procesador pueda entender. NASM soporta una variedad de arquitecturas. Se puede ver la lista escribiendo
$ nasm -hf
Por desgracia, el código máquina prima no se puede ejecutar por sí mismo. Tiene que ser presentado en el sistema operativo en un formato normalizado con unas pocas piezas o metadatos relevantes. Linux utiliza el formato de ejecutables y enlazables (ELF) para ejecutables. Para ejecutar el código compilado, tenemos que vincularlo a un binario ELF.
VINCULAR EL CÓDIGO DE LA MÁQUINA EN UN BINARIO ELF
El siguiente comando utilizará ld, el enlazador dinámico y cargador, conectar nuestro código máquina compilado NASM en un binario ELF.
$ ld -o hello32 hello32.o
EJECUTANDO EL ARCHIVO EJECUTABLE
El binario ELF recién vinculado se puede ejecutar como cualquier otro programa:
$ ./hello32
Hello World!
A continuación dejo unas capturas de pantalla para observar el proceso descrito.
Hola hermano, estoy trabajando de lleno en el lenguaje de bajo nivel. Me ayuda mucho tu post. Gracias.
ResponderEliminarQue no es copilar, es Ensambar
ResponderEliminarque tal amigo y como ago el hola mundo con una macro en ensamblador
ResponderEliminarGracias!!!
ResponderEliminarHola, no se puede localizar el paquete nasm, ayuda
ResponderEliminar¡Puta Madre!
ResponderEliminarPor favor....
¿Dónde coño de su puta madre está ese puto enlace para descargar el puto programa NASM?
¡Qué mama güevadas, que no dejan el maldito puto enlace para descargar esa mierda!
Gracias y me disculpo por las molestias
hahahaha, solo tenes que correr el comando que esta arriba hahahaha
EliminarQue agresivo joer
ResponderEliminar