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 file descriptor.
Un file descriptor est un nombre qui indique au système d’exploitation où envoyer les données.
Les trois descripteurs de fichiers standard sous Linux :
| Descripteur de fichier | Nom | Destination des données |
|---|---|---|
| 0 | stdin | Entrée clavier (lire les données de l’utilisateur) |
| 1 | stdout | Sortie écran (sortie normale du programme) |
| 2 | stderr | Sortie écran (messages d’erreur) |
Pourquoi deux sorties pour screen ?
La sortie normale (stdout) et la sortie d’erreur (stderr) vont vers le même screen, 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 le screen
- Afficher les erreurs même lorsque la sortie normale est masquée
Pour l’affichage dans ce cours :
Tu utiliseras toujours le descripteur de fichier 1 (stdout) pour afficher des messages. Tu n’as 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 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 afficher à 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 WriteEntraînez-vous par vous-même : Playground Assembly