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 où envoyer les données.
Les trois descripteurs de fichiers standards sous Linux :
| Descripteur de fichier | Nom | Destination des données |
|---|---|---|
| 0 | stdin | Entrée clavier (lecture des données de l'utilisateur) |
| 1 | stdout | Sortie écran (sortie normale du programme) |
| 2 | stderr | Sortie é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 utilisez | Ré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 nombre | Le noyau ne le reconnaît pas — l'appel système échoue |
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
syscallCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1La Machine
Qu'est-ce qu'un CPULa mémoireRegistres vs MémoireFonctionnement des instructionsLe modèle à deux fichiersL'architecture x86-643Première instruction - MOV
Qu'est-ce que MOV ?MOV ImmédiatMOV de Registre à RegistreMOV de la Mémoire vers un RegistreMOV d'un Registre vers la MémoireLEA - Charger l'adresseMOV avec différentes taillesPratique : Échanger des registresRécapitulatif : Défi MOV6Appel système Write
Appel système Write (1)Descripteur de fichier (rdi)Adresse du buffer (rsi)Nombre d'octets (rdx)Assembler le toutAfficher deux chaînesL'importance du saut de ligneRécapitulatif : Configuration de Write