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 à imprimerQue se passe-t-il si la longueur est incorrecte ?
| Si vous définissez | Résultat |
|---|---|
| Trop courte | Seule une partie de la chaîne est affichée |
| Trop longue | Le 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éro | Rien 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
syscallDé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
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-64Entraînez-vous par vous-même : Playground Assembly