Menu
Coddy logo textTech

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 archivoNombreA dónde van los datos
0stdinEntrada de teclado (leer datos del usuario)
1stdoutSalida de pantalla (salida normal del programa)
2stderrSalida 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 usasResultado
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úmeroEl kernel no lo reconoce — la syscall falla
challenge icon

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
    syscall
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos