Menu
Coddy logo textTech

Appel système Write (1)

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

Vous savez déjà comment quitter un programme. Mais quitter silencieusement n'est pas très utile. Vous voulez que votre programme affiche une sortie afin que l'utilisateur puisse voir quelque chose.

Pour cela, vous avez besoin de l'appel système write.

Qu'est-ce que l'appel système write ?

L'appel système write indique au système d'exploitation d'afficher du texte à l'écran (ou d'écrire dans un fichier). C'est ainsi que votre programme produit une sortie.

Le numéro de syscall pour write est 1.

Comment fonctionne write :

Contrairement à l'appel système exit (qui ne nécessite qu'un seul argument), write nécessite trois arguments :

ArgumentRegistreCe qu'il faitExemple
Descripteur de fichierrdiOù écrire (1 = écran)mov rdi, 1
Adresse du tampon (buffer)rsiOù se trouve le texte en mémoiremov rsi, message
Nombre d'octetsrdxCombien d'octets à affichermov rdx, 13

L'appel système write en action :

mov rax, 1      ; numéro de l'appel système pour write
mov rdi, 1      ; descripteur de fichier 1 = stdout (écran)
mov rsi, msg    ; adresse de la chaîne à afficher
mov rdx, 13     ; nombre d'octets à afficher
syscall         ; demander à l'OS d'afficher

Pour afficher un message à l'écran, nous avons besoin de 5 lignes. D'abord, nous mettons le numéro de l'appel système 1 dans rax pour l'écriture. Ensuite, nous mettons 1 dans rdi pour dire au système d'exploitation d'afficher à l'écran.

Ensuite, nous plaçons l'adresse de la chaîne (msg) dans rsi. Après cela, nous plaçons le nombre d'octets (13) dans rdx. Enfin, nous exécutons syscall pour demander au système d'exploitation d'afficher.

Ce qui se passe lorsque vous exécutez write :

  1. Le CPU saute dans le noyau Linux
  2. Le noyau voit : « write syscall »
  3. Il lit rdi (où écrire), rsi (où se trouve le texte) et rdx (combien d'octets)
  1. Il affiche le texte à l'écran
  2. Il redonne le contrôle à votre programme

Assembler le tout avec une chaîne de caractères :

section .data
    msg db 'Hello', 0x0a    ; chaîne avec un saut de ligne

section .text
    global _start

_start:
    mov rax, 1              ; appel système write
    mov rdi, 1              ; stdout
    mov rsi, msg            ; adresse de la chaîne
    mov rdx, 6              ; longueur (Hello + saut de ligne = 6 octets)
    syscall

    mov rax, 60             ; appel système exit
    mov rdi, 0
    syscall

Ce programme affiche Hello puis s'arrête.

challenge icon

Défi

Écrivez un programme qui affiche le message "Hi" suivi d'un saut de ligne. Utilisez l'appel système write.

La chaîne est déjà définie pour vous dans le harnais de test. Vous avez seulement besoin d'écrire la configuration de l'appel système.

Essayez vous-même

section .data
    msg db 'Hi', 0x0a
    msgLen equ $ - msg

section .text
    global _start

_start:
    ; À FAIRE : Configurer et appeler l'appel système write pour afficher msg
    ; Utiliser rax=1, rdi=1, rsi=msg, rdx=msgLen

    ; Quitter le programme
    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