Menu
Coddy logo textTech

Descripteur de fichier (rdi)

Fait partie de la section Fondamentaux du Journey Assembly de Coddy — leçon 36 sur 45.

Dans la leçon précédente, vous avez utilisé mov rdi, 1 dans le cadre de l'appel système write. Ce nombre 1 est appelé un descripteur de fichier.

Un descripteur de fichier est un nombre qui indique au système d'exploitation envoyer les données.

Les trois descripteurs de fichiers standards sous Linux :

Descripteur de fichierNomDestination des données
0stdinEntrée clavier (lecture des données de l'utilisateur)
1stdoutSortie écran (sortie normale du programme)
2stderrSortie écran (messages d'erreur)

Pourquoi avoir deux sorties pour l'écran ?

La sortie normale (stdout) et la sortie d'erreur (stderr) vont sur le même écran, mais elles sont traitées séparément. Cela vous permet de :

  • Rediriger la sortie normale vers un fichier tout en continuant à voir les erreurs sur l'écran
  • Afficher les erreurs même lorsque la sortie normale est masquée

Pour l'affichage dans ce cours :

Vous utiliserez toujours le descripteur de fichier 1 (stdout) pour afficher des messages. Vous n'avez pas encore besoin de stderr.

Exemple :

mov rdi, 1      ; envoyer la sortie vers stdout (l'écran)

Que se passe-t-il si vous utilisez le mauvais descripteur de fichier ?

Si vous utilisezRésultat
0 (stdin)L'appel système write attend une entrée, pas une sortie — il échouera ou ne fera rien
2 (stderr)Fonctionne comme stdout (affiche à l'écran), mais est destiné aux erreurs
Tout autre nombreLe noyau ne le reconnaît pas — l'appel système échoue
challenge icon

Défi

On vous donne une chaîne de caractères appelée message avec la valeur 'OK' suivie d'un saut de ligne. Écrivez la ligne de code qui définit le descripteur de fichier pour imprimer à l'écran (stdout). Écrivez uniquement l'instruction mov pour rdi.

Essayez vous-même

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

section .text
    global _start

_start:
    ; L'étudiant définit le descripteur de fichier ici
    %include "solution.asm"
    
    mov rax, 1
    ; rdi devrait déjà être défini par l'étudiant
    mov rsi, message
    mov rdx, msgLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux