A Seção .data
Parte da seção Fundamentos do Journey de Assembly da Coddy — lição 23 de 45.
No Capítulo 2, você carregou valores da memória e armazenou valores na memória. Mas de onde veio essa memória? Quem criou num1, num2 e result?
A resposta é a seção .data. É aqui que você cria seus próprios dados na memória.
O que é a seção .data?
A seção .data é uma parte do seu programa em assembly onde você define dados que serão armazenados na memória antes de o seu programa ser executado.
Sintaxe:
section .data
; Suas definições de dados vão aquiPor que você precisa disso:
| Sem a seção .data | Com a seção .data |
|---|---|
| Você não tem dados para trabalhar | Você pode criar números, strings e variáveis |
| Os endereços de memória são desconhecidos | Você pode usar rótulos como myNumber ou message |
| Você não pode testar seu código | Você pode carregar e armazenar dados que criou |
Um exemplo simples:
section .data
age db 25 ; Cria um byte chamado "age" com o valor 25
price dw 1000 ; Cria uma word chamada "price" com o valor 1000
name db 'Bob' ; Cria uma string chamada "name" com as letras B, o, bOnde isso entra nos seus arquivos:
Lembre-se do padrão de dois arquivos do Capítulo 0:
| Arquivo | Conteúdo |
|---|---|
data.asm | section .data com suas definições de dados |
main.asm | %include "data.asm" seguido por section .text com seu código |
O que acontece quando seu programa é executado:
- O sistema operacional carrega seu programa na memória
- Ele lê a seção
.datae coloca seus dados em endereços de memória específicos
- Seus rótulos (
age,price,name) tornam-se endereços - Seu código agora pode acessar esses endereços usando
[age],[price],[name]
Regras importantes:
| Regra | Explicação |
|---|---|
Uma seção .data por programa | Coloque todos os seus dados em um só lugar |
| Rótulos devem ser únicos | Você não pode ter dois rótulos age |
| Os dados são criados antes do seu código ser executado | Eles estão prontos para uso quando _start começa |
Nas próximas lições, você aprenderá como definir diferentes tipos de dados usando db, dw, dd, e dq
Desafio
Escreva o código no arquivo data.asm para:
- Criar a seção
.data - Criar um byte chamado
countcom o valor 5
Experimente você mesmo
%include "data.asm"
section .text
global _start
_start:
; Carrega o valor de count em al
mov al, [count]
; Salva para impressão
mov r12, rax
; Converte para ASCII e imprime (apenas 0-9)
add al, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Sair
mov rax, 60
mov rdi, 0
syscall
section .bss
digit resb 1Esta 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