domingo, 25 de julio de 2010

Hola Mundo en Ensamblador GNU Assembler (GAS)


Este post busca ayudar a dar los primeros pasos en el desarrollo de aplicaciones en lenguaje ensamblador, en entornos GNU Linux para el ejemplo se utiliza Debian Lenny, el ensamblador y enlazador de GNU contenidos en el paquete binutils (as, ld).




Básicamente los pasos que debemos seguir son los siguientes

instalar el paquete binutils, para esto en una consola iniciada en modo root.

apt-get install binutils

cuando la instalacion se completa correctamente, podemos ejecutar "as" y "ld" para ensamblar y linkar respectivamente.

el programa que vamos a crear, es el hola mundo, para esto vamos a utilizar las llamadas al sistema "write" y "exit" como se detalla en el código fuente a continuación

.text

.global _start

_start: 

    movl    $len, %edx
    movl     $msg, %ecx
    movl    $1, %ebx
    movl     $4, %eax

    int $0x80

    movl    $0, %ebx
    movl     $1, %eax
    
    int $0x80

.data 

    msg: .ascii "hola mundo!\n"

    len = 12

Descargar -> Codigo fuente

los pasos para ensamblar y linkar son los siguientes

1) Guardar como hola.asm

2) Escribir el comando: as -o hola.o hola.asm 


en este paso, el ensamblador toma el codigo fuente (hola.asm), y genera un archivo de codigo objeto (hola.o)

codigoFuente.asm     -> se ensambla para producir ->     codigoObjeto.o

3) Escribir el comando: ld -s -o hola hola.o


en este paso, ld enlaza nuestro codigo objeto, con las librerias necesarias para hacerlo un archivo ejecutable

codigoObjeto.o        -> se enlaza o se linkea para producir ->     ejecutable

4) Para ejecutar escribir: ./hola