macros

10

Click here to load reader

Upload: ilusionista182

Post on 25-Jun-2015

318 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Macros

MACROS

Definición

¿Qué es una macro?

  La mayoría de los programas ejecutan comandos de instrucciones repetitivas. Por ejemplo, para desplegar un mensaje es necesario ejecutar cierto número de instrucciones, por ejemplo:

MOV DX, offset Mensaje

MOV AH 09H

INT 21H

  Si un programa realiza muchas funciones de entrada/salida, puede resultarle tedioso tener que codificar las instrucciones cada vez que se desea desplegar o leer algo. Las macros ofrecen la facilidad de codificar una sola vez el conjunto de instrucciones y reutilizar el código cuantas veces se desee dentro del programa.

  ¿Cómo definir una Macro?

  La definición de una macro, siempre requiere un formato específico. Dicho formato es:

Nombre_de_la_Macro MACRO [parámetro1, parámetro2, . . . , parámetros] [LOCAL lista de etiquetas] CUERPO DE LA MACRO ENDM

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

 

Page 2: Macros

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.

 

La siguiente tabla muestra los pseudooperadores para el manejo de macros. La proposición de macros puede estar contenida en el programa que las utiliza o separadamente en una biblioteca de macros, la cual se carga como se describirá posteriormente. Los macros permiten el uso múltiple de una secuencia de código, con un cambio cada vez, como cuando utiliza una lista de parámetros. La pseudooperador PURGE permite eliminar una macro que no se utilice en una biblioteca, una vez que esta ha sido cargada. Un uso alternativo de la pseudooperador PURGE podría emplearse para unir bibliotecas de macros, para una clase de aplicaciones determinadas como: gráficos, I/O en disco, etcétera.

  La siguiente tabla, muestra los pseudo operadores de macros.

 

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.

Page 3: Macros

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

Su forma es MACRO lista muda. Las proposiciones que siguen a la definición de MACRO, antes de ENDM, son el macro. La lista fantasma contiene los parámetros a ser reemplazados cuando se llame el macro durante el ensamblador. La forma de esta llamada es nombre lista-parámetro. Lista-parámetro consiste de los parámetros actuales (separados por comas) utilizados por la expansión.

PURGE

Su forma es PURGE nombre-macro...PURGE limpia la definición de un MACRO especificado y permite que el espacio pueda ser utilizado. Esto es benéfico para cuando se incluya a una biblioteca durante el ensamblado pero deseando eliminar los macros no utilizados durante el proceso de ensamblado.

La siguiente tabla, muestra los macro operadores de propósito especial.

 

Operador Descripción & Su forma es texto & texto. Este operador concatena textos o símbolos. Un ejemplo es:

TC1 MACRO X

LEA DX, CHAR & X

MOV AH, 9

INT 21H

Page 4: Macros

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

PROD & X DB 'No. de producción &X = &Y'

ENDM

Esto da como resultado PROD5 DB ' No. de producción 5 = 5000", "cuando se llama con MAC1 5

 

Una biblioteca de macros, son grupos de pseudooperadores MACRO, cada uno conteniendo instrucciones en ensamblador que serán insertadas en el archivo del programa durante el ciclo 1 de ensamblado. Supóngase que se genera una biblioteca de macros llamada MC1LIB.LIB que contenga los macros a ser incluidos en el programa. La primera secuencia de instrucciones sería:

 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.

Page 5: Macros

 

APLICACIONES DE LOS MACROS

  Para mostrar las aplicaciones de los macros, se realizarán ejemplos, mostrando de una manera más práctica las aplicaciones de los mismos.

Ejemplo 2:

Realizar una macro que imprima un mensaje pasado como parámetro.

Para este ejemplo, supongamos que en un archivo contiene el macro siguiente y el macro CLRSCR el archivo se llama MARCOS.LIB. Este archivo, puede tener la extensión LIB, o también es común cuando tienen la extensión INC, porque es común que los archivos que contiene solo macros, tengan esta extensión.

MACRO.INC

COMMENT *

ESTE MACRO IMPRIME UN MENSAJE EN LA PANTALLA, USANDO UNA LIBRERIA

DE MACROS QUE CONTIENE LOS MACROS CLRSCR Y EL MACRO IMPRIME.

*

 

IMPRIME MACRO MENSAJEPUSH AXPUSH DX MOV AH, 9 LEA DX, MENSAJEINT 21HPOP DX POP AX

ENDM

CLRSCR MACRO PUSH AX PUSH BX MOV AH, 15 INT 10H MOV AH, 0 INT 10H POP BX POP AX

Page 6: Macros

ENDM MACROS.ASM

INCLUDE MACRO.INC .MODEL SMALL .STACK 32.DATACAD1 DB 'CADENA1',13,10,'$'CAD2 DB 'CADENA2',13,10,'$'CAD3 DB 'CADENA3',13,10,'$'

.CODE

MAIN PROC FAR MOV AX, @DATA MOV DS, AX CLRSCRIMPRIME CAD1IMPRIME CAD2IMPRIME CAD3 MOV AH, 4CH MOV AL, 0 INT 21H MAIN ENDP END MAIN

.

2.- ALBERTO ROJAS PONCE ENSAMBLADOR BASICO EDITORIAL ALFAOMEGA GRUPO EDITOR S.A SEGUNDA EDICION 1995, MEXICO DF. NUM. DE PAGS. MACROS Y PROCEDIMIENTOS.La manera más fácil de modularizar un programa es dividirlo en dos o más partes. Para esto, es necesario que datos, símbolos, y demás valores de un módulo sean reconocidos por el otro u otrosmódulos. Para este tipo de declaraciones globales existen dos directivas:PUBLIC nombre,,, que hace la variable, etiqueta o símbolo absoluto disponible para todos los programas.EXTRN nombre:tipo,,, que especifica una variable, etiqueta o símbolo externos identificados por nombre y tipo (que puede ser BYTE, WORD, DWORD, QWORD, TBYTE, NEAR, FAR, o ABS, éste último paranúmeros absolutos).El siguiente ejemplo ilustra el uso de las directivas. El primer listado corresponde al módulo principal,

Page 7: Macros

mientras que el segundo al módulo que contiene una rutina. Ambos módulos son archivos que se editanpor separado, se ensamblan por separado, pero se ligan juntos.MODULO PRINCIPAL: MAIN.ASMNAME mainPUBLIC exitEXTRN print:nearstack SEGMENT word stack 'STACK'DW 64 DUP(?)stack ENDSdata SEGMENT word public 'DATA'data ENDScode SEGMENT byte public 'CODE'ASSUME cs:code, ds:datastart:mov ax,data ; carga localizacion del segmentomov ds,ax ; en el registro DSjmp print ; va a PRINT en el otro moduloexit:mov ah,4chint 21hcode ENDSEND startSUBMODULO: TASK.ASMNAME taskPUBLIC printEXTRN exit:neardata SEGMENT word public 'DATA'entrada DB "Entrando a un submodulo....",13,10,"$"salida DB ".......saliendo del submodulo.",01,07,13,10,"$"data ENDScode SEGMENT byte public 'CODE'ASSUME cs:code, ds:dataprint:mov ah,06h ; Funcion para borrar pantallamov al,0 ; todas las lineasmov cx,0 ; de 0,0mov dh,24dmov dl,79dmov bh,0 ; atributo en lineas vaciasint 10h ; Servicio de e/s videomov dx, OFFSET entradamov ah,09hint 21hmov dx, OFFSET salidaint 21hjmp exit ; Regresa al otro modulocode ENDSEND

Page 8: Macros

La declaración de macros se hace a través de las directivas MACRO y ENDM. Su sintaxis es:nombre MACRO [parámetros,,,]declaracionesENDMparámetros son los valores que se substituirán en la macro cada vez que se haga referencia a ésta.Para la definición de procedimientos se emplean las directivas PROC y ENDP. Su sintaxis es:nombre PROC [distancia]sentenciasnombre ENDPdistancia, que puede ser NEAR (default) o FAR permiten indicar el tipo de acciones a realizar en brincosy llamados a subrutinas. nombre se puede usar como dirección en llamados o brincos. J. TERRY GODFREY LENGUAJE ENSAMBLADOR PARA MACROCOMPUTADORAS EDITORIAL PRETINCE-HALL HISPANOAMERICA S.A PRIMERA EDICION 1991 NUM. DE PAGS