Programando en Assembly [ Entrega 1 ]

En esta liga podemos ver teoria sobre el lenguaje Assembly.

Que necesitamos?
 - un ensamblador para pasar nuestro codigo Assembly a un formato objeto.
 - un enlazador que combine nuestros archivos objeto con las librerias necesarias.

En este caso utilizaremos assembly con sintaxis de Intel, ya que a mi parecer es un codigo muy limpio. Nuestro ensamblador sera NASM ya que es propio del uso de la sintaxis de Intel para 16 y 32 bits.
Nuestro enlazador por fortuna viene agregado como herramienta de GNU en sistemas con nucleo linux, su nombre es ld.

Como instalar NASM?
NASM esta en los repositorios de muchas distribuciones, solo se tiene que usar el comando del gestor de paquetes como ejemplo para debian/ubuntu:

              sudo apt-get install nasm

y como mencionamos el enlazador viene por default.

Ahora veamos un Hola escrito para lenguaje assembly utilizando sintaxis Intel




El codigo esta lleno de comentarios utiles para la comprension del programa.

Ahora lo ensamblaremos y lo enlazaremos con sus librerias para que nos quede un ejecutable.


 Lo pasamos a un archivo de tipo ELF ( Archivo Ejecutable y enlazable ) para depues  enlazarlo usando ld.


Ahora nos queda un ejecutable y solo tenemos que mandarlo llamar.

Asi se hace una impresion utilizando Assembly con sintaxis intel sobre linux.

Dejando en claro cada linea de este programa.

SECTION .data es una seccion del programa que especifica la memoria del segmento de datos. Solo los datos iniciados se deber definir en este segmento.
En este segmento utilizamos db para reservar bytes, usamos la etiqueta msg para  despues guardar caracteres " H "," o "," l "... y ademas le agregamos dos caracteres de escape ( 10 y 13 ) para estetica. Ademas utilizamos otra etiqueta llamada lon para guardarle un numero que comprende de la resta de la posicion actual del puntero menos la posicion inicial del puntero, si no fallo seria un 15.


SECTION .text en esta seccion se define la parte del codigo.
     MOV nos permite mover valores hacia los registros.
     INT hace la llamada a una interrupcion y en este caso usamos la 0x80 que nos permite decirle al kernel que ejecute una llamada al sistema dependiendo de acumulador.


Ahora veremos otro programa que apartir de un argumento crea un nuevo archivo, le escribe una linea de caracteres predefinida.
Despues reabre el archivo, toma lectura de una linea y la imprime en pantalla.


Aqui estan las hojas de referencia para assembly
Manual para uso de NASM
Aqui les dejo la tabla de las llamadas al sistema

Leave a Reply

Ever Medina. Con la tecnología de Blogger.