Descriptor de archivo (rdi)
Parte de la sección Fundamentos del Journey de Assembly de Coddy — lección 36 de 45.
En la lección anterior, usaste mov rdi, 1 como parte de la syscall write. Ese número 1 se llama descriptor de archivo.
Un descriptor de archivo es un número que le indica al sistema operativo dónde enviar los datos.
Los tres descriptores de archivo estándar en Linux:
| Descriptor de archivo | Nombre | A dónde van los datos |
|---|---|---|
| 0 | stdin | Entrada de teclado (leer datos del usuario) |
| 1 | stdout | Salida de pantalla (salida normal del programa) |
| 2 | stderr | Salida de pantalla (mensajes de error) |
¿Por qué tener dos salidas para la pantalla?
La salida normal (stdout) y la salida de errores (stderr) van a la misma pantalla, pero se tratan por separado. Esto le permite:
- Redirigir la salida normal a un archivo mientras sigue viendo los errores en la pantalla
- Mostrar errores incluso cuando la salida normal está oculta
Para imprimir en este curso:
Siempre usarás el descriptor de archivo 1 (stdout) para imprimir mensajes. Aún no necesitas stderr.
Ejemplo:
mov rdi, 1 ; enviar salida a stdout (la pantalla)¿Qué sucede si usas el descriptor de archivo incorrecto?
| Si usas | Resultado |
|---|---|
| 0 (stdin) | La syscall write espera entrada, no salida — fallará o no hará nada |
| 2 (stderr) | Funciona como stdout (imprime en pantalla), pero está destinado a errores |
| Cualquier otro número | El kernel no lo reconoce — la syscall falla |
Desafío
Se te proporciona una cadena llamada message con el valor 'OK' seguida de un salto de línea. Escribe la línea de código que establece el descriptor de archivo para imprimir en la pantalla (stdout). Solo escribe la instrucción mov para rdi.
Pruébalo tú mismo
section .data
message db 'OK', 0x0a
msgLen equ $ - message
section .text
global _start
_start:
; El estudiante establece el descriptor de archivo aquí
%include "solution.asm"
mov rax, 1
; rdi ya debería estar establecido por el estudiante
mov rsi, message
mov rdx, msgLen
syscall
mov rax, 60
mov rdi, 0
syscallEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1La máquina
¿Qué es la CPU?MemoriaRegistros vs. MemoriaCómo funcionan las instruccionesPatrón de dos archivosLa arquitectura x86-643Primera instrucción - MOV
¿Qué es MOV?MOV InmediatoMOV de Registro a RegistroMOV de Memoria a RegistroMOV de Registro a MemoriaLEA - Cargar direcciónMOV con diferentes tamañosPráctica: Intercambiar registrosResumen: Desafío MOV6Syscall Write
Syscall Write (1)Descriptor de archivo (rdi)Dirección del buffer (rsi)Cantidad de bytes (rdx)Integrando todoImprimiendo dos cadenasEl salto de línea importaResumen: Configuración de Write