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[editar]
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[editar]
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
mov eax,1
mov ebx,0
int 80h
En Gas
movl $0, %ebx
movl $1, %eax
intl $0x80
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
mov eax,3
mov ebx,0
mov ecx,oración
mov edx,100
int 80h
En Gas
movl $100, %edx
movl $oración, %ecx
movl $0, %ebx
movl $3, %eax
intl $0x80
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
mov eax,4
mov ebx,1
mov ecx,oración
mov edx,100
int 80h
En Gas
movl $100, %edx
movl $oración, %ecx
movl $1, %ebx
movl $4, %eax
intl $0x80
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
mov eax,5
mov ebx,”pepito.txt”,0
mov ecx,1
mov edx,0
int 80h
En Gas
movl $0, %edx
movl $1, %ecx
movl $”pepito.txt”, %ebx
movl $5, %eax
intl $0x80
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
mov eax,13h
mov ebx, descriptor
mov ecx,0
mov edx,0
int 80h
En Gas
movl $0, %edx
movl $0, %ecx
movl $descriptor, %ebx
movl $0x13, %eax
intl $0x80
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.
Referencias[editar]
Unix Assembly Language Programming (En inglés) Archivado el 17 de febrero de 2020 en Wayback Machine.
Véase también[editar]
Linux System Call Table (En inglés) Archivado el 4 de octubre de 2012 en Wayback Machine.