Вы находитесь на странице: 1из 5

MACROS.

Una macro es un grupo de instrucciones que efectan una tarea. Al ser llamada se inserta en el
programa como nuevo cdigo que contiene una secuencia de instrucciones. Se utilizan las
directivas MACRO y ENDM para delimitar una macrosecuencia. El primer enunciado de una macro
es el que contiene el nombre y sus parmetros relacionados con ella. Por ejemplo TRANSF MACRO
A,B que define la macro TRANSF. El ltimo enunciado de una macro es la instruccin ENDM que es
una lnea por s sola. Es necesario definir la macro antes de utilizarla. Una macro puede llamar a
otra.
Variable local en una macro. Es aquella que aparece dentro del cuerpo de la macro, pero no est
disponible fuera de ella. Para definir una variable local se utiliza la directiva LOCAL. Se puede
utilizar para declarar etiquetas de saltos que requieren ser llamados varias veces y evita que
marque error al expandir la macro.
Ejemplo:
MINIMO MACRO dato1, dato2, resultado
LOCAL ya_esta
MOV AX,dato1
CMP AX,dato2 ; es dato1 el menor?
JB ya_esta ; s
MOV AX,dato2 ; no, es dato2
ya_esta: MOV resultado,AX
ENDM
La etiqueta ya_esta solo aparecer en la definicin de la macro, pero al expandirse ser sustituida
por ??0000, ??0001, etc.
Parmetros Formales y Parmetros Actuales. Cuando se llama a una macro se le pueden pasar
opcionalmente un cierto nmero de parmetros de cierto tipo. A estos parmetros se le
denominan parmetros actuales. En la definicin de la macro, dichos parmetros aparecen
asociados a ciertos nombres, cuya nica funcin es permitir distinguir unos parmetros de otros e
indicar el orden en que son entregados, estos son los parmetros formales. Al expandir la macro
los parmetros formales son sustituidos por sus parmetros actuales.
Es una buena prctica utilizar PUSH y POP al inicio y al final de las MACROS para mantener los
valores de los registros, en caso de ser necesario.
Si se indican ms parmetros de los que una macro necesita, se ignorarn los restantes. En caso de
faltar se dar un mensaje de advertencia o error, dependiendo del ensamblador. Como buena
prctica se debe evitar.
Ejemplo:
SUMAR MACRO a,b,total
PUSH AX
MOV AX,a
ADD AX,b
MOV total,AX
POP AX
ENDM
....
SUMAR positivos, negativos, total
Es posible que no sea vlido expandir una macro. Por ejemplo ejecutar SUMAR AX, BX, DL porque
DL es de 8 bits.
Operador ;;
Indica que lo que viene a continuacin es un comentario que no debe aparecer al expansionar la
macro. Cuando al ensamblar se genera un listado del programa, las macros suelen aparecer
expandidas en los puntos en que se invocan; sin embargo slo aparecern los comentarios
normales que comiencen por (;). Los comentarios relacionados con el funcionamiento interno de
la macro deberan ir con (;;), los relativos al uso y sintaxis de la misma con (;). Esto es adems
conveniente porque durante el ensamblaje son mantenidos en memoria los comentarios de
macros (no los del resto del programa) que comienzan por (;), y no conviene desperdiciar
memoria.
Operador &
Utilizado para concatenar texto o smbolos. Es necesario para lograr que el ensamblador
sustituya un parmetro dentro de una cadena de caracteres o como parte de un smbolo:
SALUDO MACRO c
MOV AL,"&c"
etiqueta&c: CALL imprimir
ENDM

Al ejecutar SALUDO A se producir la siguiente expansin:
MOV AL,"A"
etiquetaA: CALL imprimir
Si no se hubiera colocado el & se hubiera expandido como MOV AL,"c"

Cuando se utilizan estructuras repetitivas REPT, IRP o IRPC (que se vern ms adelante)
existe un problema adicional al intentar crear etiquetas, ya que el ensamblador se come un & al
hacer la primera sustitucin, generando la misma etiqueta a menos que se duplique el operador
&:
MEMORIA MACRO x
IRP i, <1, 2>
x&i DB i
ENDM
ENDM
Si se invoca MEMORIA ET se produce el error de "etiqueta ETi repetida", que se puede salvar
aadiendo tantos '&' como niveles de anidamiento halla en las estructuras repetitivas empleadas,
como se ejemplifica a continuacin:
MEMORIA MACRO x
IRP i, <1, 2>
x&&i DB i
ENDM
ENDM
Lo que con MEMORIA ET generar correctamente las lneas:
ET1 DB 1
ET2 DB 2
Operador ! o <>
Empleado para indicar que el carcter que viene a continuacin debe ser interpretado
literalmente y no como un smbolo. Por ello, !; es equivalente a <;>.
Operador %
Convierte la expresin que le sigue -generalmente un smbolo- a un nmero; la
expresin debe ser una constante (no relocalizable). Slo se emplea en los argumentos de
macros. Dada la macro siguiente:
PSUM MACRO mensaje, suma
%OUT * mensaje, suma *
ENDM
(Evidentemente, el % que precede a OUT forma parte de la directiva y no se trata del %
operador que estamos tratando)

Supuesta la existencia de estos smbolos:
SIM1 EQU 120
SIM2 EQU 500
Invocando la macro con las siguientes condiciones:
PSUM < SIM1 + SIM2 = >, (SIM1+SIM2)
Se produce la siguiente expansin:
%OUT * SIM1 + SIM2 = (SIM1+SIM2) *
Sin embargo, invocando la macro de la siguiente manera (con %):
PSUM < SIM1 + SIM2 = >, %(SIM1+SIM2)
Se produce la expansin deseada:
%OUT * SIM1 + SIM2 = 620 *


Directivas PUBLIC y EXTRN(EXTERN)
La directiva PUBLIC se suele colocar en el campo de cdigo de un enunciado para definir que una
etiqueta es pblica, a fin de poder emplearla en otros mdulos. Esta etiqueta puede ser una
direccin para salto, una direccin de datos o todo un segmento. Cuando los segmentos se hacen
pblicos se combinan con otros segmentos pblicos que contienen datos con el mismo nombre
del segmento.
La directiva EXTRN aparece en los segmentos de datos y de cdigo para definir que las etiquetas
son externas al segmento. Si se define que los datos son externos, su tamao se debe expresar
como BYTE, WORD o DWORD. Si una direccin para salto o para llamada son externas, se deben
representar como Cercana(NEAR) o Lejana(FAR).
Ejemplo:

Se le llama macro interna a aquella que se declara y se llama dentro del mismo programa.

Вам также может понравиться