Abbiamo già discusso che le direttive di definizione dei dati per l'assemblatore sono utilizzati per allocare memoria per le variabili. La variabile potrebbe anche essere inizializzato con un valore specifico. Il valore inizializzato potrebbe essere specificato in esadecimale, decimale o binario.

Ad esempio, possiamo definire una parola variabile 'mesi' in uno dei seguenti modi -

MONTHS DW 12
MONTHS DW 0CH
MONTHS DW 0110B
Le direttive definizione dati possono essere utilizzati anche per definire una matrice unidimensionale. Cerchiamo di definire un array monodimensionale di numeri.

NUMBERS DW 34, 45, 56, 67, 75, 89
La definizione di cui sopra dichiara una serie di sei parole ogni inizializzato con i numeri 34, 45, 56, 67, 75, 89. Questo assegna 2x6 = 12 byte di spazio di memoria consecutivo. L'indirizzo simbolica del primo numero sarà NUMERI e quella del secondo numero sarà NUMERI + 2 e così via.

Prendiamo un altro esempio. È possibile definire una matrice denominata inventario di taglia 8, e inizializzare tutti i valori zero, come -

INVENTORY DW 0
DW 0
DW 0
DW 0
DW 0
DW 0
DW 0
DW 0
Che può essere abbreviato in -

INVENTORY DW 0, 0 , 0 , 0 , 0 , 0 , 0 , 0
La direttiva TIMES può essere utilizzato anche per più inizializzazioni allo stesso valore. Utilizzando TIMES, l'array inventario può essere definito come:

INVENTORY TIMES 8 DW 0
Esempio
L'esempio seguente illustra i concetti sopra definendo una matrice x 3 elementi, che memorizza tre valori: 2, 3 e 4. Si aggiunge i valori nella matrice e visualizza la somma 9 -

section .text
global _start ;must be declared for linker (ld)

_start:

mov eax,3 ;number bytes to be summed
mov ebx,0 ;EBX will store the sum
mov ecx, x ;ECX will point to the current element to be summed

top: add ebx, [ecx]

add ecx,1 ;move pointer to next element
dec eax ;decrement counter
jnz top ;if counter not 0, then loop again

done:

add ebx, '0'
mov [sum], ebx ;done, store result in "sum"

display:

mov edx,1 ;message length
mov ecx, sum ;message to write
mov ebx, 1 ;file descriptor (stdout)
mov eax, 4 ;system call number (sys_write)
int 0x80 ;call kernel

mov eax, 1 ;system call number (sys_exit)
int 0x80 ;call kernel

section .data
global x
x:
db 2
db 4
db 3

sum:
db 0