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), debes indicar a la CPU cuántos bytes imprimir.
Podrías contar los caracteres manualmente:
message db 'Hello', 0x0a ; 6 bytes (H e l l o nueva línea)
mov rdx, 6 ; Conteo manualPero contar de forma Manual es lento y propenso a errores. Si cambias el string, debes volver a contar y actualizar el número.
La solución: cálculo automático de la longitud usando <strong>$</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 inicial (ejemplo: 1000)- Después de almacenar 6 bytes,
$se convierte en 1006 $ - message= 1006 − 1000 = 6 (la length)
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', nueva línea)
second db 'Hello', 0x0a
len2 equ $ - second ; len2 = 6 ('H','e','l','l','o', nueva línea)
Cada string tiene su propia longitud calculada automáticamente. El $ se reinicia para cada cálculo porque siempre hace referencia a la posición actual justo después de cada string.
Desafío
FácilCrea una cadena llamada city con el valor 'Paris' seguida de un salto de línea (0x0a). Después, 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-64Practica por tu cuenta: Playground de Assembly