Le symbole $
Fait partie de la section Fondamentaux du Journey Assembly de Coddy — leçon 29 sur 45.
Lorsque vous affichez une chaîne de caractères en utilisant l'appel système write (Chapitre 5), vous devez indiquer au processeur le nombre d'octets à afficher.
Vous pourriez compter les caractères manuellement :
message db 'Hello', 0x0a ; 6 octets (H e l l o saut de ligne)
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 <strong>$lt;/strong>
$ est le compteur d'emplacement — il représente l'adresse mémoire actuelle où le prochain octet sera placé.
Exemple 1 : Chaîne simple
section .data
message db 'Hello', 0x0a
msgLen equ $ - messageComment ça 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. Elle crée une constante — un nom qui représente une valeur.
Exemple 2 : Plusieurs chaînes
section .data
first db 'Hi', 0x0a
len1 equ $ - first ; len1 = 3 ('H','i', saut de ligne)
second db 'Hello', 0x0a
len2 equ $ - second ; len2 = 6 ('H','e','l','l','o', saut de ligne)
Chaque chaîne a sa propre longueur calculée automatiquement. Le $ se réinitialise pour chaque calcul car il se réfère toujours à la position actuelle juste après chaque chaîne.
Défi
FacileCréez une chaîne de caractères appelée city avec la valeur 'Paris' suivie d'un saut de ligne (0x0a). Ensuite, créez une constante appelée cityLen qui calcule automatiquement la longueur en utilisant $ - 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-64