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 os dados que serão armazenados na memória antes da execução do programa.
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 os dados que criou |
Um exemplo simples:
section .data
age db 25 ; Crie um byte chamado "age" com valor 25
price dw 1000 ; Crie uma palavra chamada "price" com valor 1000
name db 'Bob' ; Crie uma string chamada "name" com as letras B, o, bOnde isso fica 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 de 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) se tornam endereços - Seu código agora pode acessar esses endereços usando
[age],[price],[name]
Regras importantes:
| Regra | Explicação |
|---|---|
| Mantenha seus dados juntos | Você poderia abrir section .data mais de uma vez (o montador junta as partes), mas uma única seção em data.asm é mais fácil de ler |
| Os rótulos devem ser exclusivos | Você não pode ter dois rótulos age |
| Os dados são criados antes da execução do seu código | Eles estão prontos para uso quando _start começa |
Nas próximas lições, você aprenderá a 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:
; Carregue o valor de count em al
mov al, [count]
; Salve-o para impressão
mov r12, rax
; Converta para ASCII e imprima (apenas 0-9)
add al, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Encerre o programa
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-64Pratique por conta própria: Playground de Assembly