# Int 80h

La instrucción int 80h es utilizada en lenguaje ensamblador x86 para provocar una interrupción de software e invocar los servicios de GNU/Linux. En Linux existen llamadas (system calls) que proveen funciones básicas para acceder al hardware: los discos, el teclado, el video, los puertos, etc. Estas funciones básicas se llaman servicios a programas o APIs (Application Programming Interface).

## Introducción

Existen aproximadamente 250 servicios que brinda esta interrupción. El número del servicio se pone en EAX y luego se ponen los demás parámetros en los restantes registros del microprocesador: EBX, ECX, EDX, ESI, EDI y EBP.

### Ejemplos

Servicio 1: salida del proceso actual y retorno al sistema que lo invocó. En EBX se coloca el modo de salida, generalmente ponemos 0 para indicar que la salida se produjo normalmente (es decir, no fue causada por un error).
En NASM
En Gas
Servicio 3: lectura (read). Los parámetros necesarios son:
    EBX: unidad de entrada (0: entrada estándar).
    ECX: Puntero a un área de memoria donde se dejarán los caracteres obtenidos.
    EDX: Número máximo de caracteres a leer.
En NASM
En Gas
Servicio 4: escritura (write). Los parámetros necesarios son:
    EBX: unidad de salida (1: salida estándar).
    ECX: Puntero a un área de memoria donde se encuentran los caracteres a mostrar.
    EDX: Número máximo de caracteres a mostrar.
En NASM
En Gas
Servicios para el trabajo con archivos
Servicio 5: apertura (open). Los parámetros necesarios son:
    EBX: la dirección de una cadena de caracteres terminada en nulo.
    ECX: Modo de acceso.
    EDX: permisos al archivo, si se abre creándolo.
Modos de acceso:
    O-RDONLY 0: El archivo se abre sólo para leer de él.
    O-WRONLY 1: El archivo se abre sólo para escribir en él.
    O-RDWR 2: El archivo se abre para lectura y escritura.
    O-CREAT 256: Crear el archivo en caso de que no exista.
    O-APPEND 2000h: El archivo se abre sólo para escritura al final, añadiendo información.
Permisos:
    S-IRUSR 400H: El archivo puede ser leído por el dueño.
    S-IWUSR 200h: El archivo puede ser escrito por el dueño.
    S-IROTH: El archivo puede ser leído por otros usuarios.
    S-IWOTH: El archivo puede ser escrito por otros usuarios .
En NASM
En Gas
Como alternativa para crear archivos se puede usar el servicio 8 (create).
Para lectura y escritura del archivo se utilizan los servicios 3 y 4 mencionados anteriormente, pero se les cambia el valor de EBX por la dirección del archivo a leer/escribir o el descriptor del mismo.
Para manipular el puntero en el archivo se utiliza el servicio 13h (lseek). Los parámetros necesarios son:
    EBX: Descriptor del archivo cuyo puntero va a manipularse
    ECX: Número de bytes a desplazarse desde el punto que es indicado como referencia.
    EDX: Punto de referencia para el desplazamiento. 0 inicio, 1 posición actual, 2 final
Ej: posicionarse al inicio del archivo
En NASM
En Gas
Después de trabajar con el archivo, éste se debe cerrar. Para eso existe el servicio 6 (close), para el cual basta poner en EBX el descriptor del archivo a cerrar.
Existen muchos más servicios, por ejemplo para el trabajo con el reloj del PC, para el trabajo con directorios, para eliminar procesos, etc.