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ù écrire (rdi) et quoi écrire (rsi). Vous devez maintenant lui indiquer combien d’octets écrire.

Le registre indiquant le nombre d’octets est rdx.

Pourquoi le système d’exploitation a-t-il besoin de la longueur ?

Le système d’exploitation ne sait pas où se termine votre chaîne. Sans longueur, il continuerait à lire la mémoire indéfiniment. La longueur indique précisément au système d’exploitation 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 est affichée
Trop longueLe système d’exploitation continue à lire au-delà de votre chaîne, dans une mémoire indéfinie : des caractères aléatoires peuvent s’afficher ou le programme peut planter
ZéroRien ne s’affiche

Calcul de la longueur automatiquement :

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 tu modifies 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
    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 appelée color avec la valeur 'Red' suivie d’un retour à la ligne. Une constante appelée colorLen a déjà été définie à l’aide de $ - color.

Écrivez la ligne de code qui définit rdx sur la longueur de la chaîne à l’aide de 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 (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

Entraînez-vous par vous-même : Playground Assembly