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 imprimirO que acontece se o comprimento estiver errado?
| Se você definir | Resultado |
|---|---|
| Muito curto | Apenas parte da string é exibida |
| Muito longo | O sistema operacional continua lendo além da sua string, entrando em memória inválida: pode exibir caracteres aleatórios ou travar |
| Zero | Nada é 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
syscallDesafio
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
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-64Pratique por conta própria: Playground de Assembly