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 sistema operacional onde imprimir (rdi) e o que imprimir (rsi). Agora você precisa informar quantos bytes imprimir.

O registrador para a contagem de bytes é rdx.

Por que o sistema operacional precisa do comprimento?

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

Exemplo:

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

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

O que acontece se o comprimento estiver errado?

Se você definirResultado
Muito curtoApenas parte da string é exibida
Muito longoO sistema operacional continua lendo além da sua string, entrando em memória inválida: pode exibir caracteres aleatórios ou travar
ZeroNada é exibido

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 + nova linha)

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

Exemplo completo:

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

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

Desafio

Você recebe uma string chamada color com o valor 'Red' seguido 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 somente a instrução mov para rdx.

Experimente você mesmo

section .text
    global _start

_start:
    ; O código do aluno roda primeiro (define rdx)
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    mov rsi, color
    ; rdx já tem o tamanho (do código do aluno)
    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