La sezione .data
Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 23 di 45.
Nel capitolo 2, hai caricato valori dalla memoria e memorizzato valori in memoria. Ma da dove proveniva quella memoria? Chi ha creato num1, num2 e result?
La risposta è la sezione .data. È qui che crei i tuoi dati in memoria.
Che cos'è la sezione .data?
La sezione .data è una parte del tuo programma assembly in cui definisci i dati che verranno memorizzati in memoria prima che il tuo programma venga eseguito.
Sintassi:
section .data
; Le definizioni dei dati vanno quiPerché ti serve:
| Senza la sezione .data | Con la sezione .data |
|---|---|
| Non hai dati con cui lavorare | Puoi creare numeri, stringhe e variabili |
| Gli indirizzi di memoria sono sconosciuti | Puoi usare etichette come myNumber o message |
| Non puoi testare il tuo codice | Puoi caricare e memorizzare i dati che hai creato |
Un semplice esempio:
section .data
age db 25 ; Crea un byte chiamato "age" con valore 25
price dw 1000 ; Crea una word chiamata "price" con valore 1000
name db 'Bob' ; Crea una stringa chiamata "name" con le lettere B, o, bDove va inserito nei tuoi file:
Ricorda il modello a due file del Capitolo 0:
| File | Contenuto |
|---|---|
data.asm | section .data con le tue definizioni dei dati |
main.asm | %include "data.asm" seguito da section .text con il tuo codice |
Cosa succede quando il programma viene eseguito:
- Il sistema operativo carica il programma in memoria
- Legge la sezione
.datae colloca i dati a indirizzi di memoria specifici
- Le tue etichette (
age,price,name) diventano indirizzi - Ora il tuo codice può accedere a questi indirizzi usando
[age],[price],[name]
Regole importanti:
| Regola | Spiegazione |
|---|---|
Una sezione .data per programma | Metti tutti i dati in un unico posto |
| Le etichette devono essere univoche | Non puoi avere due etichette age |
| I dati vengono creati prima dell'esecuzione del codice | Sono pronti per essere usati quando inizia _start |
Nelle prossime lezioni imparerai a definire diversi tipi di dati usando db, dw, dd e dq
Sfida
Scrivi il codice nel file data.asm per:
- Creare la sezione
.data - Creare un byte chiamato
countcon il valore 5
Provalo tu
%include "data.asm"
section .text
global _start
_start:
; Carica il valore di count in al
mov al, [count]
; Salvalo per stamparlo
mov r12, rax
; Converti in ASCII e stampa (solo 0-9)
add al, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Esci
mov rax, 60
mov rdi, 0
syscall
section .bss
digit resb 1Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1La macchina
Che cos’è la CPUMemoriaRegistri vs memoriaCome funzionano le istruzioniSchema a due fileL’architettura x86-642Sistemi numerici
Perché il binario?Numeri binariDa decimale a binarioPerché l'esadecimale?Da esadecimale a decimaleDa decimale a esadecimaleASCII ed esadecimale5Chiamata di sistema di uscita
Cos'è una chiamata di sistema?Chiamata di sistema di uscita (60)Codici di uscitaRiepilogo: uscita correttaEsercitati da solo: Playground Assembly