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 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 archivoNombreDestino de los datos
0stdinEntrada del teclado (leer datos del usuario)
1stdoutSalida en pantalla (salida normal del programa)
2stderrSalida 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 usasResultado
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úmeroEl núcleo no lo reconoce: la llamada al sistema falla
challenge icon

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
    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

Practica por tu cuenta: Playground de Assembly