MACRO INTERNO
Una macro, es un conjunto de instrucciones que se pueden mandar a llamar desde cualquier parte del programa.
Para definir una macro, se utiliza la directiva MACRO. El formato de esta directiva es :
(nombre_de_macro) MACRO (lista_parámetros)
Una macro consta de tres partes esenciales:
a) CABECERA: Contiene el nombre de la macro, la pseudo-op MACRO y opcionalmente, variables ficticias que serán pasadas desde la macro.
b) CUERPO: Contiene el código real que será insertado en cualquier programa que llame al nombre de la macro.
c) FIN: Debe incluir la sentencia ENDM.
Ejemplo de una macro sencilla:
INICIO MACRO ; Define macro
MOV AX, DATA ; cuerpo de
MOV DS, AX ; la definición
MOV ES, AX ; de la macro
ENDM
; Fin de la macro
El nombre de esta macro es INICIO, aunque es aceptable cualquier otro nombre válido que sea único. La directiva MACRO en la primer línea indica al ensamblador que las instrucciones que siguen, hasta ENDM (“fin de la macro”), son parte de la definición de la macro.
La directiva ENDM termina la definición de la macro. Las instrucciones entre MACRO y ENDM comprenden el cuerpo de la definición de la macro. Si su programa realiza frecuentemente funciones de entrada/salida, las macros ofrecen la facilidad de codificar una sola vez un conjunto de instrucciones y reutilizar el código cuantas veces desee dentro de su programa.
Una macro es una pseudo-op que permite el establecimiento de operaciones únicas en ensamblador o la inclusión de frecuentes llamadas de código ensamblador. Una macro también se puede definir como un grupo de instrucciones repetitivas en un programa que se codifica sólo una vez y puede utilizarse cuantas veces sea necesario. [1]
Internas.
Una macro interna es aquella que se declara y se llaman dentro del mismo programa.
Una macro interna se declara de la siguiente manera:
Sintaxis:
<Nombre> MACRO [parámetros]
…
ENDM
Ejemplo:
Duplica AL? MACRO
SHL AL, 1
ENDM
Código que la usa:
MOV AL, 2
Duplica AL ; Esta es la “llamada” al macro
El ensamblador sustituye cada vez que aparezca la macro. No es como los procedimientos, que se “llaman” pero no repiten el código Ejemplo:
MOV AL, 2
Duplica AL ; CALL Duplica
Duplica AL ; CALL Duplica
Este código queda:
MOV AL, 2
SHL AL, 1 ; CALL Duplica
SHL AL, 1 ; CALL Duplica
Cuándo usarlas y cuándo no
1.- Cuando se quiere el código más rápido y no importa ser repetitivo (código grande)
2.-Cuando se van a generar diversas variantes de código similar
3.-No cuando se quiere código compacto, evitando repetir el mismo (en este caso, usar procedimientos). [2]