Menu
Coddy logo textTech

Descrittore di file (rdi)

Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 36 di 45.

Nella lezione precedente, hai usato mov rdi, 1 come parte della syscall write. Quel numero 1 è chiamato descrittore di file.

Un descrittore di file è un numero che indica al sistema operativo dove inviare i dati.

I tre descrittori di file standard in Linux:

Descrittore di fileNomeDove vanno i dati
0stdinInput da tastiera (leggi i dati dall’utente)
1stdoutOutput sullo schermo (output normale del programma)
2stderrOutput sullo schermo (messaggi di errore)

Perché ci sono due output per lo schermo?

L'output normale (stdout) e l'output degli errori (stderr) vengono inviati allo stesso schermo, ma sono trattati separatamente. Questo ti permette di:

  • Reindirizzare l'output normale a un file continuando a vedere gli errori sullo schermo
  • Visualizzare gli errori anche quando l'output normale è nascosto

Per stampare in questo corso:

Userai sempre il descrittore di file 1 (stdout) per stampare i messaggi. Per ora non ti serve stderr.

Esempio:

mov rdi, 1      ; invia l'output a stdout (lo schermo)

Cosa succede se usi il descrittore di file sbagliato?

Se usiRisultato
0 (stdin)La syscall di scrittura si aspetta un input, non un output: non andrà a buon fine o non farà nulla
2 (stderr)Funziona come stdout (stampa sullo schermo), ma è destinato agli errori
Qualsiasi altro numeroIl kernel non lo riconosce: la syscall non va a buon fine
challenge icon

Sfida

Ti viene data una stringa chiamata message con il valore 'OK' seguito da un carattere di nuova riga. Scrivi la riga di codice che imposta il descrittore di file per stampare sullo schermo (stdout). Scrivi solo l'istruzione mov per rdi.

Provalo tu

section .data
    message db 'OK', 0x0a
    msgLen equ $ - message

section .text
    global _start

_start:
    ; Lo studente imposta qui il descrittore di file
    %include "solution.asm"
    
    mov rax, 1
    ; rdi dovrebbe essere già stato impostato dallo studente
    mov rsi, message
    mov rdx, msgLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Playground Assembly