Sezione .data
Un programma assembler è tipicamente diviso in sezione .data
, dove vengono allocato spazio in memoria a disposizione del programma, e sezione .text
, dove viene indicata la sequenza di istruzione che compone il programma.
La sezione data è tipicamente composta da una serie di dichiarazioni nella forma nomeVariabile: .tipo <parametri di inizializzazione>
.
Alcuni esempi:
.data
var1: .long 5
var2: .byte 0x2d, 0x01
str: .asciz "Una stringa"
Ciascuna direttiva non fa che allocare uno o più blocchi di memoria contigui della dimensione richiesta e con il contenuto iniziale richiesto.
Ciascuna label non è che un indirizzo al primo byte di tale blocco contiguo di memoria. Dato che l'architettura x86 è little endian, tale primo byte sarà il meno significativo.
Di seguito una tabella dei tipi mostrati nel corso.
Tipo | Notazione | Descrizione |
---|---|---|
byte | .byte V1 [, V2...] | Alloca uno o più byte, inizializzati con i valori forniti. |
word | .word V1 [, V2...] | Alloca uno o più word (2 byte), inizializzati con i valori forniti. |
long | .long V1 [, V2...] | Alloca uno o più long (4 byte), inizializzati con i valori forniti. |
fill | .fill n, l, v | Alloca n locazioni di l byte ciascuno e inizializzati a v . l e v si possono omettere, di default sono 1 e 0. |
ascii | .ascii "str" | Alloca la stringa str , 1 byte per carattere. |
asciz | .asciz "str" | Alloca la stringa str , 1 byte per carattere, aggiungendo un byte 0x00 in fondo. |
L'assemblatore supporta anche altre direttive ed usi più complessi. Per maggiori informazioni, la documentazione ufficiale è qui.