El símbolo $
Parte de la sección Fundamentos del Journey de Assembly de Coddy — lección 29 de 45.
Cuando imprimes una cadena usando la llamada al sistema write (Capítulo 5), necesitas decirle a la CPU cuántos bytes imprimir.
Podrías contar los caracteres manualmente:
message db 'Hello', 0x0a ; 6 bytes (H e l l o salto de línea)
mov rdx, 6 ; Conteo manualPero el conteo manual es lento y propenso a errores. Si cambias la cadena, debes volver a contar y actualizar el número.
La solución: cálculo automático de la longitud usando <strong>$lt;/strong>
$ es el contador de ubicación — representa la dirección de memoria actual donde se colocará el siguiente byte.
Ejemplo 1: Cadena simple
section .data
message db 'Hello', 0x0a
msgLen equ $ - messageCómo funciona:
messagees la dirección de inicio (ejemplo: 1000)- Después de almacenar 6 bytes,
$se convierte en 1006 $ - message= 1006 − 1000 = 6 (la longitud)
Nota: equ significa equate. Crea una constante: un nombre que representa un valor.
Ejemplo 2: Múltiples cadenas
section .data
first db 'Hi', 0x0a
len1 equ $ - first ; len1 = 3 ('H','i', salto de línea)
second db 'Hello', 0x0a
len2 equ $ - second ; len2 = 6 ('H','e','l','l','o', salto de línea)
Cada cadena tiene su propia longitud calculada automáticamente. El $ se reinicia para cada cálculo porque siempre se refiere a la posición actual justo después de cada cadena.
Desafío
FácilCrea una cadena llamada city con el valor 'Paris' seguida de una nueva línea (0x0a). Luego crea una constante llamada cityLen que calcule automáticamente la longitud usando $ - city.
Pruébalo tú mismo
%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
syscallEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1La máquina
¿Qué es la CPU?MemoriaRegistros vs. MemoriaCómo funcionan las instruccionesPatrón de dos archivosLa arquitectura x86-64