Código:¿Cuál es la diferencia entre% define y equ en NASM?
%define x 0x03
x equ 0x03
¿Cuál es la diferencia entre ellos?
Código:¿Cuál es la diferencia entre% define y equ en NASM?
%define x 0x03
x equ 0x03
¿Cuál es la diferencia entre ellos?
%define
es una forma mucho más poderosa de hacer macros, similar al preprocesador C. En su caso simplista, no hay mucha diferencia, el uso de x
en el código fuente dará como resultado la sustitución constante de 3
. Hay una diferencia sutil en que las instrucciones equ
se evalúan una vez, cuando se leen por primera vez y las macros %define
se evalúan cada vez que se encuentran en la fuente.
se puede ver la diferencia que hay entre los dos fragmentos de la declaración:
addr equ $
%define addr $
En ese caso, addr
, cuando se encuentran en el código, tendrán valores diferentes. En el primer caso, $
será la ubicación de la posición de ensamblaje en el lugar donde está el equ
. En otras palabras, donde se define .
En el segundo caso, se evalúa la ubicación del conjunto en el lugar donde addr
es utilizado.
Dónde %define
brilla es con algo como:
%define thricexplusy(x,y) (3 * x + y)
o:
%define ctrl(c) (c & 0x1F)
: :
mov al, ctrl('z')
(o incluso cosas mucho más complejas) que le permiten pasar parámetros a la macro, algo que no es posible con un simple equ
.