Professional Documents
Culture Documents
Definición
MOV AH 09H
INT 21H
La definición de una macro, siempre requiere un formato específico. Dicho formato es:
Es decir, toda macro debe estar definida entre las palabras Macro y EndM. El
cuerpo es el conjunto de instrucciones que se ejecutarán cada vez que la macro sea
invocada.
Ejemplo 1:
CLRSCR MACRO
PUSH AX
PUSH BX
MOV AH, 15
INT 10H
POP BX
POP AX
ENDM
PARÁMETROS Y ETIQUETAS
La lista de parámetros es opcional, y si existe, cada parámetro deberá ser separado
por una coma. Cuando se invoca la macro, los parámetros son reemplazados por los
nombres o valores que especifique la instrucción que la invoco. La expansión del código
se lleva a cabo durante la primera fase (recorrido) del ensamblador.
Es obvio que las etiquetas que aparecen en una macro pueden entrar en conflicto
con las que aparecen en el programa expandido, ocasionando esto, que se pueda repetir
alguna etiqueta. Para evitar este problema se utiliza el pseudooperador LOCAL seguido
por una lista de etiquetas que contiene todas las etiquetas que son propias de la macro.
Al momento del ensamblado, se asignan a todas ellas nombres únicos que no entren en
conflicto con el de otras etiquetas. Este proceso se repite sin importar el número de
veces que el macro se expanda ni de cuantos otros macros aparezcan. El uso de LOCAL
es optativo y depende si se tiene o no la necesidad de hacer que las etiquetas sean
locales.
Pseudo-op Descripción
ENDM ENDM es el terminador para MACRO, REPT, IRP e IRPC
EXITM EXITM proporciona una salida a una expansión (REPT IRP, IRPC o MACRO) cuando
una prueba demuestra que la expansión restante no es necesaria
IRP Su forma es IRP muda, < lista de operandos >. El número de operandos (separados por
comas) en la lista de operandos determina el número de veces que se repite el código
que le sigue (terminado por ENDM). En cada repetición el item siguiente en la lista de
operandos substituye a todas las ocurrencias del parámetro mudo.
IRPC Su forma es IRPC modo, cadena. Es similar a IRP excepto que en cada repetición el
carácter siguiente en cadena sustituye a todas las ocurrencias del parámetro mudo
LOCAL
Su forma es LOCAL lista muda. LOCAL se utiliza dentro de una estructura MACRO.
El ensamblador crea un símbolo único para cada entrada en la lista muda durante cada
expansión del macro. Esto evita el problema de etiquetas definidas en forma múltiple,
por ejemplo, cuando expansiones múltiples del mismo macro toman su lugar en un
programa.
MACRO
PURGE
Operador Descripción
& Su forma es texto & texto. Este operador concatena textos o símbolos. Un ejemplo es:
TC1 MACRO X
MOV AH, 9
INT 21H
ENDM
Aquí una llamada TC! A podría cargar DS con posición inicial de carácter CHARA.
;; Su forma es; texto. Un comentario precedido por dos "punto y coma" no se produce
como parte de la expansión cuando se define en un ensamblado un MACRO o REPT
! Su forma es !carácter Causa que el carácter sea interpretado como un valor literal, no
como un símbolo.
% Su forma es %expresión. Convierte la expresión en un número. Durante la expansión
el número sustituye a la expresión. Considere el siguiente ejemplo:
MAC1 MACRO X
= X * 1000
MAC2 %L1, X
ENDM
MAC2 MACRO Y, X
ENDM
Esto da como resultado PROD5 DB ' No. de producción 5 = 5000", "cuando se llama
con MAC1 5
IF1
INCLUDE MAC1LIB.LIB
ENDIF
Esta secuencia hará que el ensamblador, durante el ciclo 1, sustituya los macros
utilizados en el programa en los puntos apropiados del código. De aquí que el uso de
macros aumente el tamaño del programa. La forma de la proposición IF (que es un
pseudo operador condicional) en la secuencia anterior proporciona solamente una
respuesta condicional durante el ciclo1.
Ejemplo 2:
MACRO.INC
COMMENT *
ENDM
CLRSCR MACRO
PUSH AX
PUSH BX
MOV AH, 15
INT 10H
MOV AH, 0
INT 10H
POP BX POP AX
ENDM
MACROS.ASM
INCLUDE MACRO.INC
.MODEL SMALL
.STACK 32
.DATA
CAD1 DB 'CADENA1',13,10,'$'
CAD2 DB 'CADENA2',13,10,'$'
CAD3 DB 'CADENA3',13,10,'$'
.CODE