Strings com db
Parte da seção Fundamentos do Journey de Assembly da Coddy — lição 28 de 45.
Você já sabe que db define um único byte. Mas db também pode definir uma string — múltiplos bytes em sequência.
Sintaxe:
label db 'text here'Exemplo:
section .data
message db 'Hello'Isso cria 5 bytes na memória: 'H', 'e', 'l', 'l', 'o'
O que acontece na memória:
| Endereço | Byte | Valor ASCII |
|---|---|---|
| message | 'H' | 72 |
| message+1 | 'e' | 101 |
| message+2 | 'l' | 108 |
| message+3 | 'l' | 108 |
| message+4 | 'o' | 111 |
Adicionando uma nova linha:
Para imprimir uma string e mudar para a próxima linha, adicione 0x0a (caractere de nova linha):
section .data
message db 'Hello', 0x0aAgora a string tem 6 bytes: 'H','e','l','l','o', quebra de linha
Múltiplas strings:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0aPor que isso é importante:
Strings são os dados mais comuns que você usará em assembly. A syscall write (que você aprenderá no Capítulo 5) imprime strings lendo bytes da memória até atingir o comprimento que você fornecer.
Nota importante:
Strings são apenas bytes. A CPU não sabe ou se importa que 'H' seja uma letra. É apenas o número 72. A syscall write interpreta esses números como caracteres ao imprimir.
Desafio
FácilCrie uma string chamada greeting com o valor 'Hi' seguida por uma nova linha (0x0a) na seção .data.
Experimente você mesmo
%include "data.asm"
section .text
global _start
_start:
; Imprime a string usando a syscall write
mov rax, 1
mov rdi, 1
mov rsi, greeting
mov rdx, 3 ; 'H', 'i', nova linha = 3 bytes
syscall
; Sair
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