Menu
Coddy logo textTech

Contagem de Bytes (rdx)

Parte da seção Fundamentos do Journey de Assembly da Coddy — lição 38 de 45.

Você informou ao SO onde imprimir (rdi) e o que imprimir (rsi). Agora você precisa informar a ele quantos bytes imprimir.

O registrador para a contagem de bytes é rdx.

Por que o SO precisa do comprimento?

O SO não sabe onde sua string termina. Sem um comprimento, ele continuaria lendo a memória para sempre. O comprimento diz ao SO exatamente quando parar.

Exemplo:

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

section .text
    mov rdx, msgLen      ; rdx = número de bytes para imprimir

O que acontece se o comprimento estiver incorreto?

Se você definirResultado
Curto demaisApenas parte da string é impressa
Longo demaisO SO continua lendo além da sua string na memória de lixo — pode imprimir caracteres aleatórios ou travar
ZeroNada é impresso

Calculando o comprimento automaticamente:

Você já aprendeu o padrão $ - label no Capítulo 3:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg    ; msgLen = 6 (Hello + quebra de linha)

Isso garante que o comprimento esteja sempre correto, mesmo se você alterar a string.

Exemplo completo:

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

section .text
    mov rax, 1           ; syscall write
    mov rdi, 1           ; stdout
    mov rsi, msg         ; endereço da string
    mov rdx, msgLen      ; número de bytes
    syscall
challenge icon

Desafio

Você recebeu uma string chamada color com o valor 'Red' seguida por uma nova linha. Uma constante chamada colorLen já foi definida usando $ - color.

Escreva a linha de código que define rdx como o comprimento da string usando a constante colorLen.

Escreva apenas a instrução mov para rdx.

Experimente você mesmo

section .text
    global _start

_start:
    ; O código do estudante executa primeiro (define rdx)
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    mov rsi, color
    ; rdx já contém o comprimento (do código do estudante)
    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