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 llamada al sistema write. Ese número 1 se denomina descriptor de archivo.
Un descriptor de archivo es un número que indica al sistema operativo dónde enviar los datos.
Los tres descriptores de archivo estándar en Linux:
| Descriptor de archivo | Nombre | Destino de los datos |
|---|---|---|
| 0 | stdin | Entrada del teclado (leer datos del usuario) |
| 1 | stdout | Salida en pantalla (salida normal del programa) |
| 2 | stderr | Salida en pantalla (mensajes de error) |
¿Por qué hay 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 te permite:
- Redirigir la salida normal a un archivo y seguir viendo los errores en la pantalla
- Mostrar los 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. Todavía no necesitas stderr.
Ejemplo:
mov rdi, 1 ; enviar la salida a stdout (la pantalla)¿Qué ocurre si usas el descriptor de archivo equivocado?
| Si usas | Resultado |
|---|---|
| 0 (stdin) | La llamada al sistema de escritura espera una entrada, no una salida: fallará o no hará nada |
| 2 (stderr) | Funciona como stdout (imprime en la pantalla), pero está destinado a los errores |
| Cualquier otro número | El núcleo no lo reconoce: la llamada al sistema falla |
Desafío
Se te proporciona una cadena llamada message con el valor 'OK' seguido de un salto de línea. Escribe la línea de código que configura el descriptor de archivo para imprimir en la pantalla (stdout). Escribe únicamente 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 WritePractica por tu cuenta: Playground de Assembly