Existem diferentes diretivas para definir constantes em NASM. Nos até agora usamos uma das três formas, a diretiva equ
. Neste capitulo vamos falar das três formas:
A diretiva equ
é usada para definir constantes. A syntax é a seguinte:
NOME_DA_CONSTANTE EQU EXPRESSÃO
Por exemplo:
TOTAL_STUDENTS equ 50
Você pode usar a constante no seu código tipo:
mov ecx, TOTAL_STUDENTS
cmp eax, TOTAL_STUDENTS
O operando da definição do equ
pode ser uma expressão:
LENGTH equ 20
WIDTH equ 10
AREA equ length * width
A última linha iria definir a AREA
como 200.
A baixo podemos ver uma ilustração do uso da diretiva equ
.
SYS_EXIT equ 1
SYS_WRITE equ 4
STDIN equ 0
STDOUT equ 1
section .text ; segmento de código
global _start
_start: ; ponto de entrada do programa
; imprime a string msg1
mov eax, SYS_WRITE
mov ebx, STDOUT
mov ecx, msg1
mov edx, len1
int 0x80
; imprime a string msg2
mov eax, SYS_WRITE
mov ebx, STDOUT
mov ecx, msg2
mov edx, len2
int 0x80
; imprime a string msg3
mov eax, SYS_WRITE
mov ebx, STDOUT
mov ecx, msg3
mov edx, len3
int 0x80
; termina o programa
mov eax, SYS_EXIT
int 0x80
section .data ; segmento de dados
msg1 db 'Olá Geeks!', 0xa, 0xd
len1 equ $ - msg1
msg2 db 'Bem-vindos ao mundo da,', 0xa, 0xd
len2 equ $ - msg2
msg3 db 'programação em assembly para Linux! '
len3 equ $ - msg3
O output do código a cima é:
Olá Geeks!
Bem-vindos ao mundo da,
programação em assembly para Linux!
A diretiva %assign
pode ser usada para definir constantes numéricas tal como a diretiva equ
. Esta diretiva permite ser redefinida e ela também é case-sensitive.
%assign TOTAL 20
A diretiva %define
permite definir constantes numéricas ou strings. Esta directiva é semelhante ao #define
da linguagem C. Por exemplo, você pode definir uma constante PTR tipo:
%define PTR [EBP+4]
Esta diretiva também permite ser redefinida e também é case-sensitive.