Menu
Coddy logo textTech

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 manual

Pero 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 $ - message

Cómo funciona:

  • message es 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.

challenge icon

Desafío

Fácil

Crea 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
    syscall
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos