2012-01-01 27 views

Respuesta

12

%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.

Cuestiones relacionadas