NASM menyediakan berbagai arahan definisi untuk memesan ruang penyimpanan untuk variabel. Arahan define assembler digunakan untuk alokasi ruang penyimpanan. Hal ini dapat digunakan untuk cadangan serta menginisiliasasi satu, atau lebih byte.
Syntax untuk pernyataan alokasi penyimpanan untuk data yang diinisialisasi adalah :
[nama-variabel] define-directive value [, value]
Di mana, nama-variabel adalah pengindentifikasi untuk setiap ruang penyimpanan. Assembler mengaitkan nilai offset untuk setiap nama variabel yang ditentukan dalam segmen data.
Ada lima bentuk dasar direktif define, yaitu :
-
DB
Menentukan byte dengan mengalokasikan ruang penyimpanan 1 byte. -
DW
Mendefinisikan kata dengan mengalokasikan ruang penyimpanan 2 byte. -
DD
Mendefinisikan kata ganda dengan mengalokasikan ruang penyimpanan 4 byte. -
DQ
Medefinisikan quadword dengan mengalokasikan ruang penyimpanan 8 byte. -
DT
Menentukan 10 bytes dengan alokasi penyimpanan 10 byte.
Berikut contoh penggunaan define directive :
CHOICE DB 'a'
angka DW 21345689
negatif DW -1234521
angka_besar DQ 1235612741
pecahan DD 3.14
pecahan2 DA 3.25131
note:
- Setiap byte karakter disimpan sebagai nilai ASCII dalam heksadesimal.
- Setiap nilai desimal secara otomatis dikonversi ke setara biner 16-bit dan disimpan sebagai angka heksadesimal.
- Processor menggunakan urutan byte littel-endian.
- Bilangan negatif diubah menjadi representasi komplemen 2-nya.
- Angka floating point pendek, dan panjang diwakili masing-masing menggunakan 32, atau 6 bit.
Contoh program yang menggunakan directive define :
section .text
global _start
_start:
mov edx, 1 ; panjang dari pesan
mov ecx, huruf ; pesan yang akan ditulis
mov ebx, 1 ; stdout
mov eax, 4 ; sys_write
int0x80 ; memanggil kernel
mov eax,1 ; sys_exit
int0x80 ; memanggil kernel
section .data
huruf DB 'a'
Kompilasi dengan cara :
nasm -f elf32 -o namafile.o namafile.asm
ld -m elf_i386 -o namafile namafile.o
./namafile