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: vários 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 passar 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', newline
Múltiplas strings:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0aPor que isso importa:
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.
Observação importante:
Strings são apenas bytes. A CPU não sabe nem 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 um newline (0x0a) na section .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-64Pratique por conta própria: Playground de Assembly