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
Ahora lo ensamblaremos y lo enlazaremos con sus librerias para que nos quede un ejecutable.
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.
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