Menu
Coddy logo textTech

O Símbolo $

Parte da seção Fundamentos do Journey de Assembly da Coddy. Lição 29 de 45.

Quando você imprime uma string usando o syscall write (Capítulo 5), precisa informar à CPU quantos bytes imprimir.

Você poderia contar os caracteres manualmente:

message db 'Hello', 0x0a    ; 6 bytes (H e l l o nova linha)
mov rdx, 6                  ; Contagem manual

Mas a contagem Manual é lenta e propensa a erros. Se você alterar a string, deverá contar novamente e atualizar o número.

A solução: cálculo automático do comprimento usando <strong>$</strong>

$ é o contador de localização. Ele representa o endereço de memória atual onde o próximo byte será colocado.

Exemplo 1: string simples

section .data
    message db 'Hello', 0x0a
    msgLen equ $ - message

Como funciona:

  • message é o endereço inicial (exemplo: 1000)
  • Após armazenar 6 bytes, $ se torna 1006
  • $ - message = 1006 − 1000 = 6 (o comprimento)

Observação: equ significa equate. Ele cria uma constante: um nome que representa um valor.

Exemplo 2: Múltiplas strings

section .data
    first db 'Hi', 0x0a
    len1 equ $ - first      ; len1 = 3 ('H','i', nova linha)
    
    second db 'Hello', 0x0a
    len2 equ $ - second     ; len2 = 6 ('H','e','l','l','o', nova linha)

Cada string tem seu próprio comprimento calculado automaticamente. O $ é redefinido a cada cálculo porque sempre se refere à posição atual logo após cada string.

challenge icon

Desafio

Fácil

Crie uma string called city com o valor 'Paris' seguida por uma nova linha (0x0a). Em seguida, crie uma constant called cityLen que automaticamente calculates o length using $ - city.

Experimente você mesmo

%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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos

Pratique por conta própria: Playground de Assembly