Ensamblador, entrada y salida
Recuerda que Linux es un sistema operativo de 32 bits, por lo que es un sistema protegido y no nos permite acceder directamente a la BIOS y a otros elementos del hardware. Pero contamos con los servicios del núcleo de Linux, accesibles a través de la interrupción 80h.
Antes de comenzar debemos conocer los servicios o los números de las constantes de las llamadas al sistema. Podemos encontrar todos los servicios en el archivo unistd.h, unistd_32.h, unistd_64.h (Dependiendo de la arquitectura del procesador).

Por el momento solo usaremos los servicios para leer, escribir y salir.
Los parámetros para las funciones read y write son:
- eax Aquí ingresamos el valor del servicio que utilizemos (03h para leer y 04h para escribir).
- ebx Identificador del hardware a utilizar (0 Teclado, 1 Monitor).
- ecx Indica el Área donde se mostraran los caracteres.
- edx Longitud de caracteres.
Ahora podemos escribir nuestro código:
; nasm -f elf Servicios.S ; gcc Servicios.o -o Servicios ; Constantes de los servicios de Linux %define __NR_exit 1 %define __NR_read 3 %define __NR_write 4 ; Main global main ; Datos con valor inicial section .data Mensaje db 'Escribe tu nombre:', 10, 0 Saludo db 'Hola ', 0 ; Datos sin valor inicial section .bss Nombre resb 128 ; Código section .text main: ; Mostramos el mensaje inicial mov eax, __NR_write mov ebx, 1 mov ecx, Mensaje mov edx, 19 int 80h ; Leemos lo que el usuario escribe mov eax, __NR_read mov ebx, 0 mov ecx, Nombre mov edx, 128 int 80h ; Guardamos en número de caracteres introducidos push eax ; Saludamos al usuario mov eax, __NR_write mov ebx, 1 mov ecx, Saludo mov edx, 5 int 80h mov eax, __NR_write mov ebx, 1 mov ecx, Nombre pop edx int 80h ; Finalizamos el programa mov eax, __NR_exit xor ebx, ebx int 80h
Compilemos y ejecutemos nuestro programa
$ nasm -f elf Servicios.S $ gcc Servicios.o -o Servicios $ ./Servicios Escribe tu nombre: Luis Alberto Hola Luis Alberto

