O NASM fornece varias diretivas para reservar espaço de armazenamento para variáveis. Essas diretivas permitem reservar e/ou inicializar um ou mais bytes.
A syntax para inicializar dados é:
[nome-da-variável] diretiva-de-definição valor-inicial [, valor-inicial]...
Quando, o nome-da-variável identifica o espaço de armazenamento. O assembler associa um valor de offset para cada nome de variável definida no segmento de dados.
Aqui estão cinco formas básicas de definir uma variável:
Diretiva | Propósito | Espaço de Armazenamento |
---|---|---|
DB | Define um Byte | aloca 1 byte |
DW | Define uma Word | aloca 2 bytes |
DD | Define uma Doubleword | aloca 4 bytes |
DQ | Define uma Quadword | aloca 8 bytes |
DT | Define Dez Bytes | aloca 10 bytes |
A baixo estão os exemplos do uso das diretivas:
choice DB 'y'
number DW 12345
neg_number DW -12345
big_number DQ 123456789
real_number1 DD 1.234
real_number2 DQ 123.456
Tenha em atenção:
O programa a baixo mostra o uso da diretiva de definição:
section .text ; segmento de código
global _start
_start: ; ponto de entrada do programa
mov eax, 4 ; numero da system call (sys_write)
mov ebx, 1 ; define o output (stdout)
mov ecx, choise ; mensagem a ser escrita
mov edx, 1 ; tamanho da mensagem
int 0x80 ; chama o kernel
; termina o programa
mov eax, 1
int 0x80
section .data ; segmento de dados
choise DB 'y'
A diretiva reserve permite reservar espaço de armazenamento para dados não inicializados. A diretiva reserve apenas recebe um operando que indica o numero de unidades de espaço a reservar.
Existem cinco formas básicas de usar a diretiva reserve:
Diretiva | Propósito |
---|---|
RESB | Reserva um Byte |
RESW | Reserva uma Word |
RESD | Reserva uma Doubleword |
RESQ | Reserva uma Quardword |
REST | Reserva Dez Bytes |
A diretiva times
permite múltiplas inicializações para o mesmo valor. Por exemplo, um array chamado marks de tamanho 9 pode ser definido e inicializado a zero usando a seguinte declaração:
marks times dw 0