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 imprimirO que acontece se o comprimento estiver incorreto?
| Se você definir | Resultado |
|---|---|
| Curto demais | Apenas parte da string é impressa |
| Longo demais | O SO continua lendo além da sua string na memória de lixo — pode imprimir caracteres aleatórios ou travar |
| Zero | Nada é 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
syscallDesafio
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
syscallEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1A Máquina
O que é CPUMemóriaRegistradores vs MemóriaComo as instruções funcionamPadrão de Dois ArquivosA Arquitetura x86-64