Le symbole $
Fait partie de la section Fondamentaux du Journey Assembly de Coddy. Leçon 29 sur 45.
Lorsque vous affichez une chaîne à l’aide de l’appel système write (chapitre 5), vous devez indiquer au processeur combien d’octets afficher.
Vous pourriez compter les caractères manuellement :
message db 'Hello', 0x0a ; 6 octets (H e l l o newline)
mov rdx, 6 ; Comptage manuelMais le comptage manuel est lent et sujet aux erreurs. Si vous modifiez la chaîne, vous devez recompter et mettre à jour le nombre.
La solution : calcul automatique de la longueur à l’aide de $
$ est le compteur d’emplacement. Il représente l’adresse mémoire actuelle où l’octet suivant sera placé.
Exemple 1 : chaîne simple
section .data
message db 'Hello', 0x0a
msgLen equ $ - messageComment cela fonctionne :
messageest l’adresse de départ (exemple : 1000)- Après avoir stocké 6 octets,
$devient 1006 $ - message= 1006 − 1000 = 6 (la longueur)
Remarque : equ signifie equate. Il crée une constante : un nom qui représente une valeur.
Exemple 2 : chaînes multiples
section .data
first db 'Hi', 0x0a
len1 equ $ - first ; len1 = 3 ('H','i', nouvelle ligne)
second db 'Hello', 0x0a
len2 equ $ - second ; len2 = 6 ('H','e','l','l','o', nouvelle ligne)Chaque chaîne possède sa propre longueur, calculée automatiquement. Le $ est réinitialisé pour chaque calcul, car il fait toujours référence à la position actuelle juste après chaque chaîne.
Défi
FacileCréez une chaîne appelée city avec la valeur 'Paris' suivie d’un retour à la ligne (0x0a). Créez ensuite une constante appelée cityLen qui calcule automatiquement la longueur à l’aide de $ - city.
Essayez vous-même
%include "data.asm"
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, city
mov rdx, cityLen
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