Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Macroprocesador
2
Macro Bloque compactado de instrucciones que se repite frecuentemente en una aplicación Al ser invocada, el macroprocesador la expande, reemplazando el llamado con, el código fuente y las direcciones de memoria correspondientes
3
macro suma(sum1,sum2,total) mov ax, sum1 add ax, sum2 mov total,ax
mend Definición MACRO PROCESADOR DATA SUM1 DD 250 SUM2 DD 125 RESUL DD CODE SUMA(SUM1,SUM2,RESUL) DATA SUM1 DD 250 SUM2 DD 125 RESUL DD CODE ;suma MOV AX,[20] ADD AX,[30] MOV [32],AX Llamado MEMORIA ENSAMBLADOR Descompactación Programa Ejecutable
4
macro Etiqueta (Parámetros)
Definición Prototipo: macro Etiqueta (Parámetros) macro indica el inicio de la definición de una macro de nombre Etiqueta seguida de sus Parámetros, de entrada y salida después del prototipo, viene el cuerpo de la macro mend indica el final de la definición macro suma(sum1,sum2,total) mov ax, sum1 add ax, sum2 mov total,ax mend
5
DATA SUM DD 250 SUM DD 125 NOMBRE DW 8 RESUL DD CODE SUMA(SUM1,SUM2,RESUL) Llamado En aplicación, se invoca a las macros, indicando la Etiqueta y los Argumentos que se utilizarán en la expansión
6
Expansión La invocación se vuelve comentario
DATA SUM DD 250 SUM DD 125 NOMBRE DW 8 RESUL DD CODE SUMA(SUM1,SUM2,RESUL) Expansión DATA SUM1 DD 250 SUM2 DD 125 RESUL DD CODE ;suma MOV AX,[20] ADD AX,[30] MOV [32],AX La invocación se vuelve comentario Se agrega el cuerpo correspondiente Se sustituyen los argumentos por sus direcciones de memoria Si hay cometarios, se eliminan
7
Macrodefiniciones Anidadas
Macros que contienen definiciones de macros La definición de cada macro tiene que aparecer antes de ser invocada
8
Tablas del Macroprocesador
Definiciones TabDef. Prototipo y cuerpo Nombres TabNom. Indice para TabDef Argumentos TabArg. Valores para una invocación TabDef TabNom TabArg 38 suma(sum1,sum2,total) mov ax,[20] add ax,[30] mov 32,ax suma 38 sum1 [20] sum2 [30] total [32]
9
Algoritmo… //Principal: Expansión = F CodOp=X Mientras (CodOp no sea mend) inicio TomaLínea() ProcesaLínea() fin //TomaLínea: Si (Expansión == T) inicio Toma la siguiente línea de la definición de la macro en TabDef Sustituye Parámetros por su posición fin si no Lee la siguiente línea del archivo fuente
10
…Algoritmo… DATA SUM DD 250 SUM DD 125 NOMBRE DW 8 RESUL DD CODE suma(SUM1,SUM2,RESUL) //ProcesaLínea: BuscaEnTabNom(CodOp) Si (lo encuentra) Expande() Si_no inicio Si (CodOp es macro) Define() Si_no EscribeEnArchivoExpandido(LíneaFuente) fin
11
…Algoritmo… //Define: EscribeEnTabNom(nombre) EscribeEnTabDef(prototipo) NIVEL = 1 Mientras (NIVEL > 0) inicio TomaLínea() Si (Línea != comentario) inicio Sustituye Parámetros por su Posición IntroduceEnTabDef(Línea) fin Si (CodOp = = macro) NIVEL++ Si (CodOp == mend) NIVEL- - macro suma(sum1,sum2,total) mov ax, sum1 add ax, sum2 mov total,ax mend
12
...Ejemplo DATA SUM1 DD 250 SUM2 DD 125 NOMBRE DW 8 RESUL DD CODE
suma(SUM1,SUM2,RESUL)
13
DATA SUM DD 250 SUM DD 125 NOMBRE DW 8 RESUL DD CODE suma(SUM1,SUM2,RESUL) //Expande: Expansión = T TomaDeTabDef(Prototipo) CopiaATabArg(Argumentos) Escribe invocación como comentario Mientras (en TabDef no termine la macro) inicio TomaLínea() ProcesaLínea() fin Expansión = F DATA SUM1 DD 250 SUM2 DD 125 RESUL DD CODE ;suma MOV AX,[20] ADD AX,[30] MOV [32],AX …Algoritmo
14
Ultimo Ejercicio A partir de: el archivo del llamado TabDef en archivo
Generar: TabSim Archivo expandido DATA SUM1 DD 250 SUM2 DD 125 RESUL DD CODE SUMA(SUM1,SUM2,RESUL) macro suma(sum1,sum2,total) mov ax, sum1 add ax, sum2 mov total,ax mend DATA SUM1 DD 250 SUM2 DD 125 RESUL DD CODE ;suma MOV AX,[20] ADD AX,[30] MOV [32],AX Ultimo Ejercicio
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.