Ensamblaje - Constantes
NASM proporciona varias directivas que definen constantes. Ya hemos utilizado la directiva EQU en capítulos anteriores. En particular, discutiremos tres directivas:
- EQU
- %assign
- %define
La Directiva EQU
los EQULa directiva se utiliza para definir constantes. La sintaxis de la directiva EQU es la siguiente:
CONSTANT_NAME EQU expression
Por ejemplo,
TOTAL_STUDENTS equ 50
Luego puede usar este valor constante en su código, como:
mov ecx, TOTAL_STUDENTS
cmp eax, TOTAL_STUDENTS
El operando de una instrucción EQU puede ser una expresión:
LENGTH equ 20
WIDTH equ 10
AREA equ length * width
El segmento de código anterior definiría AREA como 200.
Ejemplo
El siguiente ejemplo ilustra el uso de la directiva EQU:
SYS_EXIT equ 1
SYS_WRITE equ 4
STDIN equ 0
STDOUT equ 1
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov eax, SYS_WRITE
mov ebx, STDOUT
mov ecx, msg1
mov edx, len1
int 0x80
mov eax, SYS_WRITE
mov ebx, STDOUT
mov ecx, msg2
mov edx, len2
int 0x80
mov eax, SYS_WRITE
mov ebx, STDOUT
mov ecx, msg3
mov edx, len3
int 0x80
mov eax,SYS_EXIT ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg1 db 'Hello, programmers!',0xA,0xD
len1 equ $ - msg1
msg2 db 'Welcome to the world of,', 0xA,0xD
len2 equ $ - msg2
msg3 db 'Linux assembly programming! '
len3 equ $- msg3
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Hello, programmers!
Welcome to the world of,
Linux assembly programming!
La directiva% asignar
los %assignLa directiva se puede usar para definir constantes numéricas como la directiva EQU. Esta directiva permite la redefinición. Por ejemplo, puede definir la constante TOTAL como -
%assign TOTAL 10
Más adelante en el código, puede redefinirlo como:
%assign TOTAL 20
Esta directiva distingue entre mayúsculas y minúsculas.
La Directiva% define
los %defineLa directiva permite definir tanto constantes numéricas como de cadena. Esta directiva es similar a #define en C. Por ejemplo, puede definir la constante PTR como -
%define PTR [EBP+4]
El código anterior reemplaza PTR por [EBP + 4].
Esta directiva también permite la redefinición y distingue entre mayúsculas y minúsculas.