Menu
Coddy logo textTech

Nombre d'octets (rdx)

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

Vous avez indiqué au système d'exploitation où imprimer (rdi) et quoi imprimer (rsi). Maintenant, vous devez lui indiquer combien d'octets imprimer.

Le registre pour le nombre d'octets est rdx.

Pourquoi l'OS a-t-il besoin de la longueur ?

L'OS ne sait pas où votre chaîne de caractères se termine. Sans longueur, il continuerait à lire la mémoire indéfiniment. La longueur indique à l'OS exactement quand s'arrêter.

Exemple :

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

section .text
    mov rdx, msgLen      ; rdx = nombre d'octets à imprimer

Que se passe-t-il si la longueur est incorrecte ?

Si vous définissezRésultat
Trop courteSeule une partie de la chaîne s'affiche
Trop longueLe système d'exploitation continue de lire au-delà de votre chaîne dans la mémoire résiduelle — cela peut afficher des caractères aléatoires ou provoquer un plantage
ZéroRien ne s'affiche

Calcul automatique de la longueur :

Vous avez déjà appris le modèle $ - label au Chapitre 3 :

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg    ; msgLen = 6 (Hello + saut de ligne)

Cela garantit que la longueur est toujours correcte, même si vous modifiez la chaîne.

Exemple complet :

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

section .text
    mov rax, 1           ; appel système write
    mov rdi, 1           ; sortie standard (stdout)
    mov rsi, msg         ; adresse de la chaîne
    mov rdx, msgLen      ; nombre d'octets
    syscall
challenge icon

Défi

On vous donne une chaîne de caractères appelée color avec la valeur 'Red' suivie d'un saut de ligne. Une constante appelée colorLen a déjà été définie en utilisant $ - color.

Écrivez la ligne de code qui définit rdx à la longueur de la chaîne en utilisant la constante colorLen.

Écrivez uniquement l'instruction mov pour rdx.

Essayez vous-même

section .text
    global _start

_start:
    ; Le code de l'étudiant s'exécute en premier (définit rdx)
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    mov rsi, color
    ; rdx contient déjà la longueur (provenant du code de l'étudiant)
    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