t
c
I N D U C E
r-
Lr
i
c
e
r
TEMA
I .
2 .
3 .
4 .
5 .
6 .
7 .
8 .
Introduccibn.
Descripcibn del Proyecto.
A r c h i v o s .
Instalacion.
P r i n c i p a l e s E s t r u c t u r a s d e Datos.
Procedimientos p r i n c i p a l e s .
B i b l i o g r a f i a .
Apendice.
2
PAGINA
3
4
6
8
1 0
2 3
3 5
c
r:
LI
r
LL
c
Este Macro procesador fue implementado básicamente p a r a s e r u t i l i z a d o con f i n e s d i d a c t i c o s como complemento del curso de Sistemas D i g i t a l e s I i m p a r t i d o en l a U n i v e r s i d a d Autbnoma M e t r o p o l i t a n a (Unidad Iztapalapa), y d i s e n a d o con base e n e l c o n j u n t o de i n s t r u c c i o n e s del m i c r o p r o c e s a d o r UAHICRO, c u y o e s t u d i o c o n s t i t u y e la base de d i c h o curso.
E l d e s a r r o l l o de e s t e macro procesador forma p a r t e de un p r o y e c t o q u e incluye, ademas, un simulador y un ensamblador para el microprocesador UAHICRO.
Una macroinstruccibn ( HACRO ) es simplemente una ayuda notacional para el programador. Es d e c i r , una MACRO r e p r e s e n t a un grupo de in.Strucciones comhnmente usadas en c i e r t o lenguaje de programacibn.
Un Hacroensamblador (tambien conocido como Hacro- procesador) constituye una herramienta que permite a l programador e s c r i b i r una v e r s i o f i n c o r t a de un programa, mediante l a definicibn de macroinstrucciones q u e seran manejadas p o r el Macro ensamblador..
La funcibn del Hacroensamblador es reemplazar por el c o r r e s p o n d i e n t e g r u p o de i n s t r u c c i o n e s cada vez q u e se hace r e f e r e n c i a a una macroinstruccibn en el cuerpo de un programa. Este p r o c e d i m i e n t o e s conocido comhnmente como expansibn de MACROS.
Basicamente un macro procesador s u s t i t u y e un grupo de l i n e a s o c a r a c t e r e s p o r o t r o , s i n e f e c t u a r un a n a l i s i s del t e x t o involucrado en la sustitucibn, salvo en c i e r t o s casos especiales.
El uso mas comhn de un macro p r o c e s a d o r es en la pr0gramacib.n en lenguaje ensamblador, como es n u e s t r o caso.
L.
L
r
L
?-
LI
íc
DESCRIPCBQN DEL PR(>YEETC>
E l p r o y e c t o e s t a d e s a r r o l l a d o en su t o t a l i d a d en l e n g u a j e T u r b o Pascal, q u e nos p e r m i t e un manejo sencillo de pantallas p a r a f a c i l i t a r a l u s u a r i o la operacibn del mismo.
E l programa f u e n t e q u e se d e s e e p r o c e s a r debe p r o p o r c i o n a r s e a t r a v e s de un a r c h i v o de texto. Asimismo, debe i n d i c a r s e el nombre del a r c h i v o p o r el cual se desea o b t e n e r la s a l i d a , i.e. e l programa f u e n t e s i n m a c r o d e f i n i c i o n e s . E l p r o y e c t o cuenta con la opcibn de e l e g i r un a r c h i v o de d e f a u l t p a r a cada caso ( e n t r a d a y / o s a l i d a de datos).
La operacibn de e s t e sistema se l l e v a a cabo con base en un menu p r i n c i p a l de opciones. P a r a e l e g i r c u a l q u i e r a de e l l a s es s u f i c i e n t e con o p r i m i r l a i n i c i a l de la misma, o s i se desea, p o s i c i o n a r s e e n l a o p c i b n d e s e a d a u t i l i z a n d o l a s t e c l a s correspondi.entes a l a s f l e c h a s ascendente y descendente, segun sea e l caso.
Ayuda Despliega en pantalla un t e x t o b r e v e que explica a l u s u a r i o la forma de u t i l i z a r e l sistema, mencionando una s e r i e de pasos a s e g u i r de t a l f o r m a q u e se u t i l i z e n las opciones del sistema de la mejor manera posible.
D e f i n i r Arcñívor Se u t i l i z a p a r a d e f i n i r la f u e n t e y el d e s t i n o de l o s d a t o s cada v e z q u e se desea procesar un a r c h i v o . S i se e l i g i b e s t a opcibn p o r a c c i d e n t e , e s p o s i b l e abandonarla presionando la tecla < E S O .
r
h
c
Yacroenramnblador I n i c i a l a e j e c u c i b n d e l Macroensamblador U A N I C R O p r e v i a d e f i n i c i b n de l o s a r c h i v o s f u e n t e y destino. S i d u r a n t e e l procesamiento es detectado un e r r o r , la descripcibn del mismo s e r a desplegada en e l r e c u a d r o s u p e r i o r de l a pantalla. S i esto o c u r r e , se t i e n e n las a l t e r n a t i v a s de i n t e r r u m p i r o c o n t i n u a r con el p r o c e s o . Cabe a c l a r a r q u e s o l o s e detectan los e r r o r e s correspondientes a l a d e f i n i c i b n o i n v o c a c i b n de una macroinstruccibn. de t a l forma que los e r r o r e s asociados a l lenguaje mismo no s e r á n f i l t r a d o s en e s t e proceso.
Consulta Archivo Esta opcibn se u t i l i z a p a r a r e a l i z a r l a consulta de c u a l q u i e r a r c h i v o de t e x t o , especialmente los de e n t r a d a y / o salida, s i n necesidad de f i n a l i z a r la sesibn, y
r e q u i e r e solo e l nombre del a r c h i v o que se desea c o n s u l t a r . S i se e l i g e esta opcibn p o r accidente, puede abandonarse presionando la tecla <ESO.
F i n de Sesibn Con e s t a o p c i b n s e t e r m i n a con l a e jecucibn del Nacroensamblador UAMICRO. v e r s i o n 1.1.
i
P
L
L
7-
L
F
L
c
L
c
6
P
L
c
L
I-
L
F
i
A R C H I V O S
E l Macroensamblador esta formado p o r un t o t a l de 7 a r c h i v o s , a saber:
MACRO.COM A r c h i v o q u e c o n t i e n e e l p r o g r a m a en cbdigo ejecutable. Este a r c h i v o es e l q u e se invoca a l e j e c u t a r e l Hacroensamblador UAMICRO, tecleando el comando 'MACRO'.
M A C R O . P A L A r c h i v o p r i n c i p a l d e l p r o g r a m a f u e n t e . C o n t i e n e l a d e f i n i c i b n de l a s p r i n c i p a l e s e s t r u c t u r a s de d a t o s , e l p r o c e d i m i e n t o p r i n c i p a l y los procedimientos de seleccibn de opciones y de i n i c i a l i z a c i b n .
M A C R O . H L P A r c h i v o q u e c o n t i e n e e l t e x t o c o m p l e t o de ayuda a l usuario. Se t r a t a de un a r c h i v o de t e x t o c r e a d o en e l e d i t o r de Turbo Pascal.
MAC-ENTR.TXT Programa de demostracibn en ensamblador que s e e l i g e p o r d e f a u l t e n l a o p c i b n de d e f i n i c i b n de a r c h i v o s , cuando no se cuenta con un afChiV0 f u e n t e especffico.
MAC-UTI.PAS A r c h i v o q u e c o n t i e n e l a s u t i l e r l a s q u e u t i l i z a el p r o g r a m a d u r a n t e su ejecucibn, como son los procedimientos: Monitor, Sonido, L i m p i a , T i t u l o , Cuadro, Warco, Menu-Opciones y ERROR.
L .
5
i
r-
yi
(r
L
MAC -EM X .PA X A r c h i v o de Mac r oensa m bla d o. Con t i e ne .todos los p r o c e d i m i e n t o s necesarios p a r a e j e c u t a r
e l macroensamblador una vez q u e se h a n
d e f i n i d o l o s a r c h i v o s de e n t r a d a y salida de datos. A q u í se e n c u e n t r a n l o s p r o c e d i - mientos q u e podemos c o n s i d e r a r como 10s p r i n c i p a l e s y s o n l o s s i g u i e n t e s : Obten Codigo, Sust-Arg, Sust-Etiq, O b t e n A r g , ObtenrLinea, Act-Etiq, Expande, Def E t i q , Define, Busca y Procesa-Linea.
MAC-@PC.PAX A r c h i v o de opciones. C o n t i e n e los p r o c e d i - mientos q u e son llamados d i r e c t a m e n t e del programa p r i n c i p a l a l e l e g i r alguna de l a s o p c i o n e s d e l menu p r i n c i p a l . D i c h o s procedimientos son : Ayuda, D e f i n e A r c h i v o s ,
Macroensamblador, Consulta y Fin-Sesion.
P
i
c
L
c
L
P
L
c
Este p r o y e c t o se d e s a r r o l l b en una computadora PC compatible con IBU, de modo que p a r a su instalacibn se r e q u i e r e de un e q u i p o con esas c a r a c t e r i s t i c a s .
P a r a e j e c u t a r e l m a c r o e n s a m b l a d o r e s n e c e s a r i o asegurarse de que se encuentren cargados en el d r i v e p o r d e f a u l t los a r c h i v o s : MAGRO.COM, MACRO.HLP y UAC-ENTR.TXT.
Una vez q u e se h a n c a r g a d o d i c h o s a r c n i v o s , p a r a e j e c u t a r e l p a q u e t e solo es necesario t e c l e a r el comando 'HACRO' y a p a r e c e en l a p a n t a l l a el mentz p r i n c i p a l con l a s opciones d e s c r i t a s anteriormente.
Si se desea e j e c u t a r e l macroensamblado s o b r e un
a r c h i v o e s p e c i f i c o se deben s e g u i r los s i g u i e n t e s pasos:
- E n t r a r a la opcibn de D e f i n i c i b n de a r c h i v o s y t e c l e a r
e l nombre del a r c h i v o deseado (con su extension), como a r c h i v o de e n t r a d a , incluyendo el r e c o r r i d o s i no esta en el d r i v e y d i r e c t o r i o p o r d e f a u l t .
-
Dentro de la misma opcibn i n d i c a r el a r c h i v o de s a l i d a deseado tecleando su nombre, extensibn y r e c o r r i d o ( s i e s n e c e s a r i o ) , s i no se desea e l a r c h i v o p o r d e f a u l t NACSALI.TXT como a r c h i v o de salida.-
S i se desea a b a n d o n a r la opcibn en c u a l q u i e r a de las dos preguntas debe o p r i m i r s e la tecla <ESC>.-
Una vez d e f i n i d o s los a r c h i v o s f u e n t e y destino, e l e g i r l a o p c i b n d e Macroensamblador. S i d u r a n t e e l pr'ocesamiento es detectado un e r r o r , debe p r e s i o n a r s e la t e c l a <ESO p a r a abandonar o <ENTER> s i se desea c o n t i n u a r el proceso. L a s c o r r e c c i o n e s de e r r o r e s e n c o n t r a d o s a t i e m p o d e macroensamblado d e b e n e f e c t u a r s e con un e d i t o r compatible con e l u t i l i z a d o .- La consulta del a r c h i v o de s a l i d a puede e f e c t u a r s e con
8 1 u n e d i t o r de t e x t o s , con comandos de HS-DOS, o s i n
abandonar a l paquete con la opcibn de Consulta A r c h i v o . S i se e l i g e esto liltimo debe p r o p o r c i o n a r s e e l nombre
r-
del a r c h i v o que se desea consultar de la misma maneraL que se i n d i c o en l a opcibn de D e f i n i c i b n de Archivos.
T.
L.
l
-L
b
I
L
T
I
L
c
L
L
- E l a r c h i v o de e n t r a d a debe s e r de t e x t o y puede s e r
e d i t a d o con c u a l q u i e r e d i t o r que nos permita esto.
-
Se p e r m i t e e d i t a r e l a r c h i v o con s a n g r i a p a r a i d e n t i f i c a r mas facilmente las e t i q u e t a s y HACROS.-
Los c o m e n t a r i o s d e n t r o del a r c h i v o se i n d i c a n con unsj-gno de ';' como p r i m e r p a l a b r a de la linea. No s e r a n
reproducidos en el a r c h i v o de salida.
-
N o se a c e p t a n macrodef i n i c i o n e s r e c u r s i v a s . S i nembargo, se puede r e f e r e n c i a r a una MACRO d e f i n i d a anteriormente, d e n t r o del cuerpo de o t r a HACRO.
-
Cada v e z que se desee macroensamblar un a r c h i v o dado, es necesario e l e g i r la opcibn de d e f i n i c i b n de a r c h i v o s y a que a l t e r m i n a r e l procesamiento de un a r c h i v o , el programa c i e r r a todos los a r c h i v o s ocupados, incluyendo l o s a r c h i v o s f u e n t e y d e s t i n o , p a r a p r o t e g e r l a i n f o r m a c i b n .PRINCIPALES ESTRWCTWRAS DE DATC)S
I-
L!-
i
F
L
c
r
c
L
b
i
c
L
P a r a el d e s a r r o l l o de e s t e p r o y e c t o se implement6 un a m b i e n t e de v a r i a b l e s d i v i d i d o p r á c t i c a m e n t e en dos g r u p o s p r i n c i p a l e s que son :
V a r i a b l e s de E s t e g r u p o c o n t i e n e t o d a s a q u e l l a s u t i l e r l a s v a r i a b l e s que son u t i l i z a d a s imicamente
p a r a manejo de pantallas. Es d e c i r , las q u e s e u t i l i z a n p a r a m o s t r a r e l funcionamiento del sistema de una manera s e n c i l l a y f a c i l de e n t e n d e r p a r a e l u s u a r i o del mismo.
Las v a r i a b l e s que se incluyen en e s t e g r u p o son : n u m o p c , f o n d o , t e x t o ,
fon-inv, tex-inv, t e x e r r y opcion.
V a r i a b l e s de Engloban a todas l a s v a r i a b l e s que son procesamiento u t i l i z a d a s a tiempo de ejecucibn d u r a n t e
el macroensamblado.
P a r a algunas d e las v a r i a b l e s de e s t e g r u p o se d e f i n i e r o n t i p o s de d a t o s e s p e c i a l e s q u e s e d e s c r i b i r a n p o s t e r i o r m e n t e .
L a s p r i n c i p a l e s v a r i a b l e s involucradas a q u i son : l i n e a , codigo, e x p a n s i o n ,
abandona, a r c h e n t , a r c h s a l , H A C R O S , U L T I M O , ma c a c t u a 1. r e n , c o l ,
U A C C O N T EN, MAC P A R A H I
MAC
-
E T I Q ’ U L T E T I Q , MAC A a p c o n t e n , R G U M I s i g l i b r e .A 1 nuacibn s e muestra la d e s c r i p c i b n de cada v a r i a b l e i n c l u y e n d o su t i p o , los v a l o r e s que puede tomar, los procedimientos que la u t i l i z a n , e t c e t e r a .
TlPOS ESPECIALES
T-
L
Se d e f i n i b p r e v i a m e n t e un t i p o CADENA = STRING[BO].
SI? d e f i n i b el t i p o APUN como un r e g i s t r o q u e contiene l a s i g u i e n t e informacibn :
n o m b r e
-
n o m b r e q u e i d e n t i f i c a a l a m a c r o i n s t r u c c i b n ; de t i p o CADENA.i n i , f i n - apuntadores a l a s localidades donde i n i c i a y t e r m i n a el c u e r p o de l a RACRO e n e l a r r e g l o RACCONTEN; de t i p o entero.
n u m a r g
-
a q u í se guarda el nUmero de argumentos que c o n t i e n e l a RACRO; t i p o entero.num
-
e t i-
almacena e l nUmero de e t i q u e t a s q u e se d e t e c t a r o n d e n t r o del cuerpo de l a macro d e f i n i c i b n ; t i p o e n t e r o .s i g m a c - a p u n t a d o r a l r e g i s t r o q u e c o n t i e n e l a
i n f o r m a c i b n d e l a s i g u i e n t e m a c r o def i n i c i b n encontrada; t i p o APUN.
Por U l t i m o tenemos e l t i p o TIP-ET como un r e g i s t r o que
contiene l a s i g u i e n t e informacíbn :
n o m e t i - nombre que i d e n t i f i c a a la e t i q u e t a ; es de
t i p o CADENA.
s i g
-
e t i-
campo q u e i n d i c a el c o n s e c u t i v o a s e g u i r p a r a e v i t a r l a d u p l i c a c i b n d e e t i q u e t a s ; de t i p o CADENA.usada
-
i n d i c a s i l a e t i q u e t a a c t u a l h a s i d o r e f e r e n c i a d a , con el f i n de a c t u a l i z a r l a s i e s e es e l caso; t i p o booleano.l i g e t i - a p u n t a d o r a l r e g i s t r o q u e c o n t i e n e l a
i n f o r m a c i b n de l a s i g u i e n t e e t i q u e t a e n c o n t r a d a ; t i p o T I P E T .
h
L
I í n e a
I
s
e-- I
i
-r-
L
s
i
c
TIPO : CADENA.
POSIBLES VALORES :
Si se está r e a l i z a n d o una Macro expansibn, l a v a r i a b l e l i n e a t o m a s u v a l o r d e l e s p a c i o de memoria c o r r e s p o n d i e n t e a l a m a c r o d e f i n i c i ú n a s o c i a d a ; es decir, del contenido de MAC-CONTEN p a r a l a MACRO que se
este invocando.
En o t r o caso e l contenido de l i n e a corresponde a l a l i n e a a c t u a l del a r c h i v o de e n t r a d a .
PROCEDIHIEHTOS QUE LA UTILIZAH :
O b t e n -Codigo. O b t e n --A r g
,
O b t e n - L i n e a , E x p a n d e , D e f i n e , P r o c e s a - L i n e a y
Hacroensamblador.
S u s t A r g , S u s t E t i q ,
P-
i
i
F
,
L
r-
1
L
c
L
L
L
c
....
b
L
F
TIPO : CADENA.
POSIBLES VALORES :
c o d i g o toma s u v a l o r de l a l i n e a q u e se e n c u e n t r a actualmente en procesamiento. Nos i n d i c a l a p r i m e r a p a l a b r a encontrada, a p a r t i r de l a columna actual, que sf? e n c u e n t r e e n t r e dos espacios en blanco. Se u t i l i z a p a r a d e t e c t a r l a s p a l a b r a s claves como 'MACRO', WEND', 'END', y los a r g u m e n t o s y e t i q u e t a s d e c a d a
macrodef i n i c i b n .
PROCEDIMIEHTOS QUE LA UTILIZAH :
O b t e n C o d i g o, S u s t -E t i q,
Def-Etiq, Define, Busca S u s t A r y g
,
Procesa-Linea. O b t e n -Li nea,i
expansion
TIPO : BOOLEANO.
POSIBLES VALORES :
Esta v a r i a b l e puede tomar solo dos valores : CIERTO o
FALSO. Solo toma el valor CIERTO cuando se ha invocado
a una HACRO existente d u r a n t e e l proceso y el macro ensamblador se encuentra expandiendo d i c h a AACRO. Una vez q u e se ha t e r m i n a d o de e x p a n d i r l a HACRO, l a v a r i a b l e expansion vuelve a tomar el v a l o r FALSO.
PROCEDIMIENTOS QUE LA UTILIZAN :
S i r s t A r g , Obten-Linea, Expande y Define
e..
c
abandona
L
L
b.'
L
F
i
-
L
r
L
s-
L
h
TIPO : BOOLEANO.
POSIBLES VALORES :
Esta v a r i a b l e puede tomar solo dos valores : CIERTO o
FALSO. Su v a l o r normal es FALSO, y toma el v a l o r de CIERTO cuando se ha detectado un e r r o r , ya sea a tiempo de ejecucibn del macroensamblador ( en cuyo caso e l u s u a r i o decide si se abandona o no e l proceso 1, o s i d u r a n t e la d e f i n i c i b n de a r c h i v o s se presentb alguna anomalia.
PROCEDIUIENTOS QUE LA UTILIZAN :
E R R O R , Act-Etiq, Expande, Def ine-Archivos, Consulta y
Macroensamblador.
a-
-
c.
L
L
c
L
a r c h e n t y arch-sal
TIPO : T E X T .
POSIBLES VALORES :
E s t a s v a r i a b l e s toman su v a l o r cuando se e l i g e l a opcibn de d e f i n i c i b n de a r c h i v o s en el menil p r i n c i p a l y
se proporcionan correctamente los a r c h i v o s de e n t r a d a y s a l i d a . No s u f r e n modificacibn d u r a n t e el procesamiento y se u t i l i z a n p a r a d i r e c c i o n a r l a e n t r a d a y s a l i d a de datos.
PROCEDIMIERTOS QUE LA UTILIZAN :
Obten-Linea, D e f i n e , D e f i n e A r c h i v o s y Hacroensamblador.
,”...
c
I”
I.
c
L
c
L
c
i
MACROS, ULTIMO y mac-actual
TIPO : APUN.
POSIBLES VALORES :
Se? t r a t a de l o s a p u n t a d o r e s a la l i s t a l i g a d a q u e contiene la inforrnacibn d e s c r i p t i v a de cada MACRO. La v a r i a b l e MACROS apunta a l i n i c i o de la l i s t a ; ULTIMO a p u n t a a l Ultimo elemento de l a l i s t a , y m a c a c t u a l apunta a l nodo correspondiente a la MACRO que se esta expandiendo.
PROCEDIMIEATOS QUE LA UTILIZAN :
Obten-Linea, Expande, D e f i n e y Busca.
F
L
F
L
R"
L.
r-
L
---
TIPO : ARREGLO DE CADENAS.
POSIBLES VALORES ;
E s t a a r r e g l o esta d e s t i n a d o a c o n t e n e r t o d a l a inforrnacibn correspondiente a las rnacrodef iniciones. Es d e c i r , e l c u e r p o de i n s t r u c c i o n e s de cada MACRO se guarda en e s t e a r r e g l o l i n e a p o r l i n e a a medida q u e se v a n l e y e n d o d e l a r c h i v o f u e n t e . P a r a e x t r a e r l a i n f o r m a c i b n de MACCONTER, se debe r e c u r r i r a los a p u n t a d o r e s c o r r e s p o n d i e n t e s a l MACRO en la l i s t a ligada mencionada anteriormente.
PROCEDIMIENTOS QUE LA UTILIZAN :
Obten-Linea y Define.
L
ñ”
L
F
L
TIPO : ARREGLO DE CADENAS.
POSIBLES VALORES :
E s t o s a r r e g l o s se u t i l i z a n t a n t o d u r a n t e l a macrodefinicibn como en l a macroexpansibn. Su l i m i t e es de 10 localidades ya que se asumen MACROS con un numero d e argumentos menor o i g u a l a 10. HAC-ARGUH es u t i l i z a d o d u r a n t e l a d e f i n i c i b n de MACROS y guarda los argumentos p a r a s u s t i t u i r l o s p o r notacibn posicional en el a r r e g l o MACCONTEN. y HACPARAH se usa en expansibn d e MACROS almacenando los parametros con q u e se esta i n v o c a n d o a l a MACRO, p a r a i n c l u i r l o s d u r a n t e l a e x p a n s i b n .
PROCEDIHIEHTOS QUE LA UTILIZAN :
Obten-Arg y S u s t A r g .
L
F
L
r-
b-!-
u-
c
c
c
c
r-
L
f;
L
r-
TIPO : T I P E T .
POSIBLES VALORES :
Se t r a t a de los a p u n t a d o r e s a la l i s t a ligada q u e contiene l a i n f orrnacibn asociada a cada e t i q u e t a . La v a r i a b l e HAC-ETIQ a p u n t a al i n i c i o d e l a l i s t a , y ULT-ETIQ a p u n t a a l ultimo elemento de l a l i s t a .
PROCEDIHIENTOS QUE LA UTILIZAN :
Siist-Etiq, A c t E t i q y D e f E t i q .
ap
-
conten y síg-libreTIPO : ENTERO.
POSIBLES VALORES :
Apuntadores al a r r e g l o MACCONTEN. Estan limitados p o r el tamaiio del a r r e g l o . a p c o n t e n se u t i l i z a d u r a n t e l a expansibn de MACROS y a p u n t a a l a l i n e a a c t u a l de l a MACRO que se esta expandiendo; s i g l i b r e a p u n t a siempre
a l a s i g u i e n t e localidad v a c f a d e n t r o del a r r e g l o .
PROCEDIUIENTOS QUE LA UTILIZAB :
Obten-Linea, Expande y Define.
c
col y rem
TIPO : ENTERO.
POSIBLES VALORES :
V a r i a b l e s que nos i n d i c a n siempre l a l i n e a a c t u a l y l a posicibn q u e se t i e n e d e n t r o de la mismo d u r a n t e el procesamiento del a r c h i v o f u e n t e . ren nos i n d i c a l a l i n e a del a r c h i v o de e n t r a d a que se esta procesando y col l a posicibn d e n t r o de l a l i n e a misma.
PROCEDIHIERTOS QUE LA UTILIZAN :
0.b t e n C o d i g o,
Obten
-
L i n e a y Procesa-Linea. S u s t Ar
g,
S u s t E t i q, O b t e n --A r g,
L
F
L
r
Lr
L
c
c
L
L
r
iL
n-
e
PROCEDIMIENTOS P R I N C I P A L E S
Los procedimientos que u t i l i z a e l p r o y e c t o pueden s e r c l a s i f i c a d o s en dos grupos basicamente :
Procedimientos A q u i se i n c l u y e n t o d o s l o s q u e s e de u t i l e r i a . u t i l i z a n p a r a l a p r e s e n t a c i b n d e l
s i s t e m a y l o s q u e n o s p e r m i t e n u t i l i z a r l o , como d e f i n i r o c o n s u l t a r a r c h i v o s , p o r ejemplo.
Procedimientos
de procesamiento. Son l o s procedimientos p r i n c i p a l e s que nos permiten e f e c t u a r el Procesamiento de un a r c h i v o , d e t e c t a n d o p o s i b l e s e r r o r e s en el mismo.
Los p r o c e d i m i e n t o s p r i n c i p a l e s son :
O b t e n C o d i g o, S u s t E t i q , O b t e n A rg , A c t E t i 9 , Expande. D e f E t i q , D e f i n e , Busca y
Procesa-Linea.
S u s t A r g
,
O b t en-Li n e a ,
A c o n t i n u a c i b n se muestra l a d e s c r i p c i b n de cada p r o c e d i m i e n t o , i n d i c a n d o l a s v a r i a b l e s mas r e l e v a n t e s que son a c t u a l i z a d a s en el mismo.
ObtenCodigo
Obtiene el cbdig0 o p e r a t i v o a c t u a l p a r a poder tomar una d e c i s i o n s o b r e e l f l u j o d e l a i n f o r m a c i b n d u r a n t e e l procesamiento del a r c h i v o de entrada.
Encuentra el p r i m e r conjunto de caracteres, a p a r t i r de la columna actual, q u e se encuentre delimitado p o r dos espacios en blanco, dos comas o c u l q u i e r combinacib doble de estos, t r a b a j a n d o siempre sobre la que se considera como l i n e a actual.
Es invocado practicamente p o r todos los procedimientos
y se u t i l i z a p r i n c i p a l m e n t e p a r a d e t e c t a r palabras clave del macroensamblador (como 'MACRO'. 'MEND', etc.), a s i como p a r a
e n c o n t r a r los argumentos o parametros de las macroinstrucc.iones durante la d e f i n i c i b n o b i e n en una macro llamada.
Actualiza la v a r i a b l e global col, que corresponde a la coordenada de columna d e n t r o de la linea actual.
I L
c
[I
c
Se u t i l i z a t a n t o en la d e f i n i c i b n de macroinstrucciones como durante la expansibn de MACROS.
En l a d e f i n i c i b n se usa e s t e p r o c e d i m i e n t o p a r a s u s t i t u i r d e n t r o del c u e r p o d e l MACRO l a o c u r r e n c i a de l o s argumentos del mismo p o r notacibn posicional p a r a poder e f e c t u a r e l paso de parametros posteriormente.
Durante la expansibn de MACROS se toma la l i n e a a c t u a l y se busca en ella la o c u r r e n c i a de algiin parametro de la MACRO q u e se e n c u e n t r a e n expansibn, r e e m p l a z a n d o l a n o t a c i b n posicional con los parametros que son enviados.
Actualiza la v a r i a b l e l i n e a ya que en c u a l q u i e r caso e f e c t i i a sus.titucibn de palabras d e n t r o de ella. Tambien t r a b a j a con los v e c t o r e s MAC-ARGUM y MAC-PARAM, p a r a g u a r d a r en los mismos los p a r a m e t r o s de la m a c r o i n s t r u c c i b n d u r a n t e l a def i n i c i b n o la expansibn, respectivamente.
y-
".- Suit-Etip
i
h
L
T"
L
c
P
L
F
L
S e u t i l i z a d u r a n t e la expansibn de MACROS. Se toma la l i n e a actual. y se busca en ella la o c u r r e n c i a de alglin parámetro de l a MACRO q u e se e n c u e n t r a en expansibn, reemplazando la notacibn posicional con los parámetros que son enviados.
Actualiza la v a r i a b l e l i n e a ya q u e en c u a l q u i e r caso efectlia s u s t i t u c i b n de p a l a b r a s d e n t r o de ella. Tambien t r a b a j a con los apuntadores a la l i s t a de e t i q u e t a s MAC-ETIQ y U L T E T I Q , p a r a l o c a l i z a r en d i c h a l i s t a s i en la l i n e a actual e x i s t e alguna e t i q u e t a . S i este es el caso, se efectiia la sustitucibn y una vez que se h a concluido la expansibn, se a c t u a l i z a el consecutivo de cada e t i q u e t a contenida d e n t r o de la HACRO expandida.
P
L
L
c
L
i
Obten-Arg
Se u t i l i z a t a n t o en l a d e f i n i c i b n de macroinstrucciones como d u r a n t e l a expansibn de MACROS.
En l a d e f i n i c i b n se usa e s t e procedimiento p a r a o b t e n e r l o s argumentos de l a KACRO a c t u a l p a r a despues e f e c t u a r una s u s t i t u c i b n de los mismos p o r n o t a c i b n p o s i c i o n a l d e n t r o d e l c u e r p o del MACRO.
Durante l a expansibn de MACROS se toma la l i n e a actual, que corresponde a una macrollamada, p a r a o b t e n e r los parametros que se l e están pasando y guardarlos en e l a r r e g l o HACPARAM p a r a despues e f e c t u a r l a s u s t i t u c i b n de parametros.
A c t u a l i z a l a s v a r i a b l e s col y HAC-PARAH, p a r a g u a r d a r en los e s t a iiltima los parametros de la macroinstruccibn d u r a n t e l a expansibn de l a MACRO.
i !
i
F-
..
F
L
!-
L
F
L
w-
L
P
L
Obten-Linea
Obtiene la s i g u i e n t e l i n e a de t r a b a j o dependiendo del v a l o r de la v a r i a b l e expansion.
Si se esta efectuando una
macro
expansibn, la l i n e a quese tomará como l a s i g u i e n t e p r o v i e n e del a r r e g l o HAC-CONTEI, especificamente de la casilla apuntada p o r a p c o n t e n . En este caso, se t r a t a de una l i n e a q u e corresponde a l cuerpo de la macroinstruccibn que se esta expandiendo. La v a r i a b l e a p c o n t e n se incrementa despues de l e e r l a linea.
S i no se t r a t a d e una expansibn, se lee l a l i n e a s i g u i e n t e del a r c h i v o de e n t r a d a y se incrementa la v a r i a b l e r e n que contiene el numero de renglbn del a r c h i v o de e n t r a d a que se e s t a procesando.
Este p r o c e d i m i e n t o d e c i d e tambien s i es n e c e s a r i o e f e c t u a r alguna s u s t i t u c i b n de argumentos o e t i q u e t a s s i se esta efectuando una expansibn y la HACRO a c t u a l t i e n e levantadas las b a n d e r a s c o r r e s p o n d i e n t e s , e n c u y o c a s o l l a m a r a a l o s procedimientos S u s t A r g y Sust-Etiq.
actual. Tambien i n i c i a l i z a la v a r i a b l e col en uno p a r a la :linea
L
P
L
c
-
m-
Act-Etíq
L
F
L
b
L
n . "
L
Es u t i l i z a d o iinicamente p o r e l procedimiento Expande a l
f i n a l i z a r la expansibn de una MACRO. S i la macroinstruccibn que f u e expandi.da i n c l u i a e t i q u e t a s , se invoca e e s t e procedimiento para actualxzar e l consecutivo de las e t i q u e t a s que f u e r o n usadas durante la expansibn, p a r a e v i t a r que se d u p l i q u e una e t i q u e t a a l expander de nuevo una macroinstruccibn que ya se utilizb.
Revisa la l i s t a de e t i q u e t a s apuntada p o r las v a r i a b l e s MACETIQ y U L T E T I Q , y a c t u a l i z a unicamente aquellas que tengan levantada la. bandera de usada.
Expande
m-
i
c
L
P-
L
6
L
T
L
Procedimiento u t i l i z a d o p a r a la expansibn de MACROS. La
manera en que esta implementado e s t e procedimiento, aunado a l de P r o c e s a L i n e a , permite que d e n t r o del cuerpo de una MACRO sea p o s i b l e llamar a o t r a macroinstruccibn d e f i n i d a anteriormente, r e p i t i e n d o coste proceso cuantas veces sea necesario.
Enciende l a b a n d e r a d e e x p a n s i o n a l i n i c i a r i a macroexpansíbn y la apaga a l t e r m i n a r . Tambien detecta e r r o r e s en e l paso de parametros.
Ll.ama a los p r o c e d i m i e n t o s O b t e n A r g , Obten-Linea, Procesa-Linea y A c t E t i q .
F"
L
L
L
D e l -Etiq
c
L
Se u t i l i z a durante la d e f i n i c i b n de MACROS cada v e z que se encuentra alguna e t i q u e t a d e n t r o d e l cuerpo de ].a F~ACRO. ES
llamado e n cada l i n e a d e l a r c h i v o de e n t r a d a que no sea un comentario e i d e n t i f i c a una e t i q u e t a d e n t r o de la l i n e a s i el tiltimo c a r a c t e r del p r i m e r cbdigo o p e r a t i v o de la misma es el s i g n o d e
':'.
Si e s t o o c u r r e anade a la l i s t a de e t i q u e t a s la actual,
v e r i f i c a n d o previamente que no se haya d e f i n i d o con a n t e r i o r i d a d .
A c t u a l i z a los a p u n t a d o r e s a l a l i s t a de e t i q u e t a s MACETIQ y U L T E T I Q .
Define
c
L
?-
yi
F
L
E s t e procedimiento es llamado p o r el de Procesa-Linea cuando se ha detectado una nueva macrodefinicibn.
S u o b j e t i v o es g u a r d a r la informacibn de esa MACRO en l a s e s t r u c t u r a s de datos correspondientes. Asl, guarda e l cuerpo de i n s t r u c c i o n e s de l a MACRO en el a r r e g l o MACCONTEN y en l a l i s t a apuntada p o r las variables MACROS y ULTIHO guarda e l nombre del MACRO, s u numero de argumentos, e l de e t i q u e t a s y los a p u n t a d o r e s a l i n i c i o y f i n de l a s localidades de HAC-COKTEH donde esta contenido e l cuerpo del MACRO.
Durante l a d e f i n i c i b n , s i l a MACRO t i e n e argumentos, v a reemplazando estos p o r notacibn posicional (llamando a S u s t A r g ) a medida q u e se l e e el cuerpo d e instrucciones.
Llama a los p r o c e d i m i e n t o s O b t e n A r g . O b t e n L i n e a , ObtenCodigu. D e f E t i q y S u s t p r g .
L
r
L
L
I-
L
F
c
L
c
L
r
L
Busca
Este procedimiento es llamado solo p o r Procesa-Linea y se u t i l i z a linicamente p a r a v e r i f i c a r s i una MACRO (sea p a r a d e f i n i c i b n o expansibn) ya h a sido d e f i n i d a . Regresa el r e s u l t a d o de l a blisqueda en u n a v a r i a b l e Booleana y s i f u e exitosa, r e g r e s a además el apuntador m a c a c t u a l a la MACRO deseada.
F"
Y.
F'
1.
F-
L.
c
L
P
i
c
L_
7-
i.
r-
iL
F"
L
m-
L
Procesa-Linea
Este procedimiento es basico p a r a e l macroensamblador ya q u e en él se toman l a s d e c i s i o n e s s o b r e el f l u j o de l a i n f ormacibn..
Es llamado cada vez que se ha o b t e n i d o una nueva linea, ya sea del a:rchivo de e n t r a d a o del a r r e g l o MAC-CONTEN.
Dependiendo del primer cbdigo o p e r a t i v o de la linea, se tomara una de las s i g u i e n t e s acciones:
-
s i e l cbdigo es 'MACRO' se t r a t a de una d e f i n i c i b n y debe v e r i f i c a r s e que la MACRO tenga un nombre. S i e l nombre e x i s t e , entonces se debe v e r i f i c a r que no se haya definido previamente una MACRO con ese nombre. S i esto no o c u r r e entonces llamar a Define.-
s i e l cbdigo no es 'MACRO' puede t r a t a r s e de una macro llamada en cuyo caso debe e x i s t i r una MACRO defi.nida p r e v i a m e n t e con un nombre q u e correponde a i cbdigo o p e r a t i v o . Si e s t o no o c u r r e , entonces se asume que noes: una macrollamada Sino una i n s t r u c c i b n sencilla que debe s e r e s c r i t a t a l cual es en el a r c h i v o de salida.
Llama a los pprocedimientos O b t e n C o d i g o , Busca, D e f i n e y Expande, y a c t u a l i z a las v a r i a b l e s l i n e a y col.
p-
i
P
1
.
1 .T u r b o P a s c a l ( V e r s i b n 3.0)
Rt!ference Manual
BORLAND INTERNATIONAL Inc.
I”
b . .
L
S e a n e x a n a e s t e manual el l i s t a d o de los a r c h i v o s f u e n t e q u e contiene el paquete, q u e son:
-
HAC-UTI.PAS- M A C E N S . P A S
- HAC-0PC.PAS
-
WACRO.PASr-
c
Asimismo s e a n e x a n l o s d i a g r a m a s de f l u j o de datos p r i n c i p a l e s .
C MAC-UTI
.
PFIS 3C FIRCHIVO DE UTILERICIC 1
PROCEDURE Moni t:or ;
BEG IN
C l r C c r ; G o t o x y ( l O , 1 3 ) ;
W r i t e ( ’ E s t a usted usando un monitor de c o l o r S/N ? ’ ) ;
Repeat
U n t i l opciori IN C ’ C ’ , ‘ N ’ l ; I f opcion = ’ S ’ t.hen
R e a d ( K b d , o p c i o n ) ; opcion := UpCaseíopcion)
BEG I N
.fondo := 1 ; t,exto := 15;
f on._i riv : = 7; tex.-inv := 1 ; tex-.err := 4
END else? BEGIN
.Fondo := O ; t.exto : = 15; f on.-i nv : = 7 ; tex_.inv := O ;
tex-.err := C) END
END g
PROCEDLJRE Coni do;
BEGIN
Soiund ( 5 0 0 ) ; Del ay ( 100) ;
Nnwxind END5
PROCEDLJRE L i mpi a í x 1 , y 1 , x 2 , y 2 , c o l o r : INTEGER) ; BEGIN
TextRacI:groi.ind ( c o l o r ) ;
W i n d o w ( x l , y l , x 2 , y 2 ) ;
C1 r C c r END;
PKOCEDURE T i t u l o ;
BEGIN
L . i m p i a ( 3 , 2 , 7 8 , 4 , 7 ) : T e x t c o l o r ( t e x - i n v ) ;
Got oxy (20,l ) ; Writei’UNIVERSIDAD FIUTONOMA METROP0LITANA’)g
Gotoxy(20,2) ; W r i t e ( ’ P r o y e c t o de I n g e n i e r i a E l e c t r o n i c a 2 ’ ) : Gotoxy(20.3) ; Write(’Macroensamb1ador UAMICRO V e r s i o n 1 . 1 ’ ) END j
PROCEDURE Ciradro ( x l , y l , x 2 . y 2 : INTEGER):
VFIR i : INTEGER;
BEGIN
G o t o x y ( x 1 , y l ) ; W r i t e 0 ,-’)i
F o r i := ( x l
+
1 ) t o ( x 2-
1 ) doW r i t e i ’ ,
’
) 3F o r i : = (y1 + 1 ) t o <y2
-
1 ) doW r i t e ( ’ - - ’ ;
END ;
G o t o x , y ( : i i . y : ? ? ; W r j t e ( ’ L ’ : , ;
For i := (x:l + 1 : l o ( x 2 . 1 ) do
W r i t e i ,’J .* !
w r i t e ( ’ ) ;
END;
PROCEDURE M a r c o ; VAR i : INTEGER; B E G I N
T e x t C o l o r ( t e ? x t . o ) ;
L i m p i a í l , l , t 3 0 , 2 5 , 1 ) ; C u a d r o ( 2 , f 79,25) j
G o t o x y (2,5) I;
---..ku!q
5
f--
END;
PROCEDURE M e n i r _ O p c i ones;
BEG I N T i t u l o;
T e x t C o l or ( t n x t o ) j
l..impia(3,6,78,24,1); C u a d r o ( 2 , 5 , 2 1 15) ;
C u a d r o (22,1% 75,19) ;
T e x t , C o l o r ( t e ? x - e r r l j T e x t . B a t t k g r o u n d ( f o n - . i n v ) ;
G o t o x y ( 7 , 5 ) j W r i t e (
’
OPCIONES’
) ;T e x t C o l o r ( t . e x t o ) j
G o t o x y ( 4 , 9 ) j
G o t o x y ( 4 , l O I ’ ;
G o t . o x y ( 4 , l l ) ;
G o t o x y (4,1218 ; W r i t e ( ’ F i n de sesion.’)
T e x t R a c k g r o u n d ( f o n d o ) j
G o t o x y ( 4 , B ) J W r i t e ( ? A y u d a ’ ) ;
W r i t e (
’
D e f i n i r a r c h i vos’ ) ;W r i t e (
’
M a c r o e n s a m b l ador’ 1 ;W r i t e (
’
C n n s c i l t a A r c h i vo’ ) ;END 8
PROCEDURE ERROR ( f r a s e : CADENA); VAR t e c l a : CHAR;
B E G I N Sonido;
T e x t C o l or ( t e x - e r r i j
W r i t e l n i’ ’ % l i n e a ) ;
W r i t e l n í ‘ ERHOR : ’ , f r a s e ) ;
W r i . t e ( ’ O p r i m a <ENTER> p a r a c o n t . i n u a r o CESC> p a r a abandonar
...
’ ) ;R e p e a t
l...i m p i a (3,2,78,4,7) j
R e a d ( K b d , t . e c l a ) ; If Keypressed then
If NOT ( O R D i t e c l a ) I N C13,271) t h e n Sonido R e a d ( K b d , t . e c l a i ;
U n t i l O R D c t e c l a ) I N CJ.3,273; If O R D ( t e c 1 a ) = 27 then
abandona P = TRUE; T i t.ul o;
Te,: t C o l o r ( t . e x t o ) ;
T e x t B a c k g r o u n d (fondo) ;
I MRC_ENC.PAS 3
<
ARCHIVO DE MñCROENSAMBLADO >.PROCEDURE Cibteri._Codi go;
BEG IN
codlgo : = " i
While (col i=LENGTHilinea)) AND ilineaCcol1 I N C ' ' , ' , ' I ) do
While (col ,(:= LENGTH(1inea)) AND (NOT (lineñCcol1 I N C ' '-'*'I)) do BEG I N
col :-= col + 1;
codiqo
-
:= codiao-
+
COPY(linea,col,l);col := col
+
1END END;
PROCEDURE Sust -Ar g j
VAR num : INTEGER;
REG I N
num := O; col :- 1 ;
While col LENGTH(linea1 do
REGIN
O b t en-Cod i go;
I f expansion FIND (codi goC 11
REG IN
col := col.
-
2;DELETE(linea.col.2): nurn := ORD(c~digol21)
INRERT(MAC..PARAMCnuml, linea,col) ;
col : = col + LENGTH (MAC-ARGUMCnuml) END
I f NOT expansion then BEGIN
el 5e
niinn := 1 ;
While (num
<=
MFIX-ARGUM) AND (codigo < 3 MRC-ARGUMCnuml) do num := nurn + 1 := ' & ' ) then
-
4s;I f nurn <= MAX-ARGUM ihen BEG I N
r o l := col
-
LENGTH(codig0);DELETE(linea,col ,LENGTHicodigo) ) ;
INSERT ( ' %' +CHR (4Btnum)
,
1 i nea, c o l ) ;col :=
col
+ 2 ENüEND END
END;
PROCEDURE Sust. ..Et.i q i
VAR IJ : TIP-ET;
REG I N
e3t.a : ROOL..EfIN;
rrol := 1 ;
Whjle col a:= L.ENGTH(linea) do
REG I N
Obten-Codi go;
I f cadigoCL.ENGTH(codigo)l = ' : ' then BEG I N
DELETE (codi go, LENGTH (codi go) , 1 ) ;
Q : :: Yi>C._ETIQ;
est.+* ::: FALSE;
While ,:I;r
,<>
NIL) AND (NRT e s t a ) doREGIN
I f (1.”.,nom,,_et.i = codigo t.hen
< : * l ! + i ? C1 :=: G!”.lig-eti
e s t a : -i ‘TRUE
END;
I f ec-tii then
DEG :N
W*., usada : = TRlJE;
CNBERT ( Q * . s i g _ e t i 1 i n e a , c o l ) ;
to]. :=
col
+ 3END
END END;
PROCEDURE Obteri-Arg (VAH niun : INTEGER) j
C L l e n a l a t a b l a de argumentos con l o s parametros de l a l i n e a . 3
VAR arg : CADENA;
REGIN
num := O;
While col
< =
LENGTH(1inea) doREGIN
arg := y - .
While Cecil C= LENGTH(1inea)) AND N ü T ( l i n e a C c o l 1 IN C ’ ’ , ’ , ’ I ) do
REGIN
arg := arg
+
C O P Y ( l i n e a , c o l , i ) ; col := COI+
1END j
I f arg
<:::.
” thenREGIN
nirm : =: nium C 1 ;
I f expansion then
MAC-PARAMCnumJ : = arg e l s e Mac-ARGlJMCnumI : = arg END;
col := col + 1
END END:
PROCEDURE 0bt.en-Li nea;
REG IN
I f expansion then REGIN
l i n e a := MAC-CONTENEap-contenl; ap-coriten := ap-conten + i ; I f mac:-actual*.num_arg
>.
O thenI f mac:_actual^.ni~m_et.i I O t.hen Sust -nrg;
Sust -Et i q END
else REGIN
r e n := r e n + i ;
R e a c l l n ( a r c h - e n t , l i n e a ) END;
COI := 1 ;
FKOCFDI.IRF-- Ar:t.~..Ft.i q ;
VAR 0 : TIP-ET;
BEGIN c a r
: INTEGER;
i.? := NAC-ETIG!;
While (I-1
.:>
N I L ) AND (NOT abandona) do BEG INI f usada then
BEG X N
c a r :=: ORD(O^.sig..et.I.CZl); I f @ * , , s i g _ e t i C 2 1 = ’ 2 ’ then
Q ” . s i g . - e t i t Z I := ’ A ” :
c a r : = ORD ( í ? * . s i g _ e t i C 1 I ) ;
I f B ^ . s i g - e t i t l l = .‘Z’ then
e l s e W . s i g _ . e t . i 1 1 7 := CHRicar + 1 ) BEG I N
ERRORi’Demasiadas e t i q u e t a s . ’ )
ENI)
e l s e E1~’.5ig-~eti121 := CHR(car + 1 ) ; W . usada : = FALSE
END;
0 := W . l i g _ e t i END
END i
PROCEDURE Procesa-Li nea4
PROCEDURE Expande;
VAR num-par : INTEGER;
I-1 :I APUN;
BEGIN
expansion := TRUE; Obten-Arg (num-par) ;
FORWARD:
I f num-par
<:
>
mac-.actual.’. num-arg t.henI f NOT abandona then REI3 IN
ERRORi’Numero i n c o r r e c t o de p a r a m e t r o s ’ ) ;
Writ.eln (arch-sal
,’;
EXPRNDIENDO MACRO ’,mac_actual*.nombre); W r i te1 n (m-ch-sal,’
jap-corit.en := mac-.actual”. i n i + 1 ; While ao conten
<
mac a c t u a l “ ‘ . f i n do’ + I i nea) ;
.
._ BEG I Nexpansion :=. TRUE; Obtrn,_.i..i nea;
13 :=: mac-actual;
nuin-.par : = ap-canten; Pr- ocesa-Li nea;
mac_actual := Q ;
ap-conten : = num-par END;
W r i t . e l n ( a r c h _ s a l , ’ ; FIN DE A c t - E t i q
END;
ex pansi on : =: FALCE END;
EXPANSION ’ ,mac_actual^.nomhre);
PROCEDURE Def -Et i q : C A c t u a l i z a l a l i s t a de e t i q u e t a s 3
HEGKN
»ELETE(codigo,L.ENGTH(codi~o), 1 ) ;
r?:.ii.ste : = FALSE;
W h i l e ( 0
< >
N I L ) AND (NOT existe) d oBEGIN
a
: 2 MAC.._E.T:[O;T f O”.nom_eti = c o d i g o t h e n e x i s t e := TRUE
else 0 5:: 0 ” . l i g _ e t i
END;
I + NOT existe t.hen NE# ( O 18;
W. n o m - e t i : = e o d i go; O*. si g-eti : =
’
AA’ ;O*. irsiida : = FALCE; W . l i g _ e t i : = N I L ; I f MAC-ETIO = N I L t h e n REGIN
BEG I N
NAC.-ETIR : = O; ULT_.ETIO : = O ENI)
else BEGIN
LILT-.ETIO”. l i q _ , e t i := O; ULLT-ETIR := O
EtND END
END:
PROCEDURE D e f i n e ;
‘JAR P : OPUN;
n i v e l : INTEGER;
b o l : BOOLEAN;
num : INTEGER;
REG I N
NEW ( P ) ; P.“. n o m b r e : = c o d i g o ; M A C - C O N T E N C s i g _ l i h r e l : = l i n e a ;
b o l := e x p a n s i o n ; e x p a n s i o n := FALCE; O b t e n - e r g (numb ; e x p a n s i o n := b o l ;
P.“. nurn-.arg :, = num; b o l : = FALCE;
n i v e l := 1;
1.1 m :=
ci;
W h i l e (NOT E O F i a r c h - e n t . ) ) FIND ( n i v e l
>
Ci) da P”‘. i n i : = sig-1 i b r e ;BEG I N
s i g - l i b r e := s i g . _ l i b r e + 1; Obten-1.i n e a ;
O b t e n .-Cod i go;
I f c o d i g o
< >
” ; ’
t h e n REG I FII 4 c:odigoCl ... E N G T H ( c o d i g o ) l = ‘:’ t h e n BEGIN
n u m := num + 1; D e f -Et i q
END;
Su s t
-
A r g 5NüC...CONTENCsi 9-1 i b r c l : = 1 i n e a ; I f c : o d i g o = ’MFICRO’ t h e n
n i v e l := n i v e l + 1
el se
I f c n d i g o = ’MEND’ t h e n n i v e l := n i v e l
-
1END:
P.". nirm...et.i I:= n u m ;
P.". f i i, : =i si g - 1 i. b r e ;
s i g - l i b r e z = = s i g - l i b r e
+
1.; P-".,-iig_.mac : = N I L $I f MTrCROC = NIL.. t.hen R E F l N
MACKOlj := P;
LIL.TIM13 : = P END
else B E G I N
UI..TU.MO*. 5 i g - . m a c : = P; U L T I M O : = P
END END:
PROCEDl.JRE Busca (VAR e s t a : BOOLEAN) ;
VA" t e m p : AfYJN; P E G I N
c5t.a : = FAL.CE;
t e m p : = m a c . . a c t u a l ;
mac-actual :, = MACROS;
While ( m a - a c t u a l
*:>
N I L ) AND ( m a c _ a c t r r a l ^ . n o m b r e< >
c o d i g o ) do I f mac..~act.ii;il.:>
NIL.. thene l s e mac..ac:tiral : = t . e m p
m a c ._act t ira1 I = m a c .-ac t u a l * . 5 i g-mac ;
est.a := TRUE END;
PROCEDURE ProcE?sa-l..i nea; VAR e x i s t e : BOOLEAN;
c o l u m : INTEGER; B E G I N
O b t e n - C o d i go;
I f c o d i g o = 'MFICRO' then
B E G I N
c o l u m :=
col
-
5;O b t . e n C o d i go; C O b t i e n e e l n o m b r e d e l macro. 3
If c o d i g o = I ' t h e n
else R E G I N
E R R O R i ' M a c r o s i n n o m b r e . ' ) D E L E T E ( 1 i nea, c o l u m , 5 ) ;
col := c o l
-
5; R u s c a i e x i s t e ) 8I f e x i s t e t h e n
e l 5 e D E F I N E
ERROR ( e D o b l e def i n i c i o n . ' )
END END
I f codigi:)
< >
' j ' t.hen BEG I Nel se
Busca ( e x i s t e ) ; C V e r i f i c a s i se t r a t a de una m a c r o - l l a m a d a
I f e w i a t e then
e l s e W r i t e l n (arch..sai, 1 i n e a )
EXPANDE END
END;
C MAC-0PC.PAS 1)
C ARCHIVO D E OPCIONES 3
PROCEDlJRE A y u d a ; VAR a r c h : TEXT;
! i n : CiqDENFi; i : INTEGER;
L i m p i a (25,7,76,23,1) ;
T e x t C o l or ( t ex -er r 1 ;
G o t o x y (20,l) ; W r i t e ( ’ AYUDA MAXIMA ’ ) j
T c x t C o l o r ( t e x t o ) ;
L i m p i a (27,9,76,23,1) ;
n S S I G N ( a r c h , ’ M A C R O . H L P I ) ;
R E G E T C a r c h ) :;
W h i l e NOT E13FCarch) do B E G I N
B E G I N
T e x t Bac kground í f on -i nv 1 ;
i := 1;
W h i l e (NOT E O F ( a r c h ) l FiND (i
<
1 4 ) do BEG I NR e a d 1 n ( a r c h , 1 i n ) ;
W r i te11 n ( 1 i n ) j
D e l ay í 100) ;
i s = .i
+
1END;
R e a d END;
CLOSE ( a r c h ) END;
PROCEDURE Lee . A r c h i v o ( x , y : INTEGER; VAR n o m b r e : CADENA): VAR t e c l a : CHAR;
REG I N
n o m b r e : =
’
:’ iG o t o x y ( x , y ) ; W r i t e ( ’ ’ : 1 2 ) ; G o t o x y ( x , y ) 2 R e a d ( K b d t e c l a ) j
If ( O R D ( t e c 1 a ) = 27) AND (NOT K e y p r e s s e d ) then e l s e If O R D ( t e c 1 a ) < 3 13 t h e n
W r i t e i t e c l a ) ;
R e a d ( n o m b r e ) j
nombre := t e c l a + nombre abandona : = TRLJE
B E G I N
END END3
PROCEDlJRE Dei: i n e - A r c h i v o s ; VflR e x i s t e : BOOLEAN;
def a, n o m b r e .: CADENA; n u m : INTEGER: B E G I N
L.i.mpj.a(29,13,72,1R,i);
.-.,m
.
-
* ...
”.-i!,iitbr.e : ::
’
IENTRADA’ ;b h i l c ( r i r i m ,<= 2 ) AND (NOT abandona) do
2 F G I FJ
e>: i 5t.e : := FALSE;
T e x t . C r > l o i - ( t e r . - e r r ) ; TextBackQround(fon-inv);
G o t o x y ( 5 , b ) ; W r i t e ( ’ D e f a u l t : ’,defa,’ ’1; T e x t C c i l o i - ( t e x t . 0 ) ; T e x t R a c k g r o u n d ( f o n d o ) ;
G o t o n y ( 5 , Z t n u m ) ; W r i t e i ’ A r c h i v o de ’ , n o m b r e , ’ : ’ ) ;
Repeal.
L.E>f?-Ri‘Chi vo (27, Z h u m , n o m b r e ) ;
I f NO’T abandnna then BEG I N
i f n o m b r e = ” t h e n
BEG I N
n o m b r e : = def a; W r i . t e ( n o m b r e ) END;
A S S I G N ( a r c h en t
,
nombre)I f d e f a = ’MRC..ENTR.TXT’ t h e n
e l s e A C S I G N ( a r c h - s a 1 ,nombre) ;
E$
I->
I f d e f a = ’MAC-ENTR.TXT’ t.hen
else R E W R I T E ( a r c h - s a 1 ) ;
CBT+3
e x i s t e := ( I O r e s i i l t = O ) ; I f NOT e x i s t e t h e n
RESET ( a r c h e n t )
REG I N
E R R O R ( ’ E 1 a r c h i v o C ’ + n o m b r e + ’ l no e x i s t e en e l d i r e c t o r i o ’ ) ; W i n d o w ( 2 9 , 1 2 , 7 2 , 1 8 )
END END
U n t i l e x i s t e OR abandona;
n u m := ni-im
+
1 ;d e f a := ‘MAC-CALI.TXT’; n o m b r e ::= ‘SALIDA
END;
I f (NOT abandona) AND E O F ( a r c h _ e n t ) then
REG I N
E R R O R ( ’ A r c h i v o fuent.e v a c i o . ’ ) ;
a h a n d o n a . : = TRUE;
CL.OSE ( a r c h - e n t ) ;
CLOSE ( a r c h . - s a l )
END END;
PROCEDURE M a c ; r o e n s a m b l adar ;
BEG I N
I f abandona t h e n
e l se
E R R O R ( ’ N o se han d e f i n i d o l o s a r c h i v o s f u e n t e y d e s t i n o - ) BEG I N
I n i ci a l i z a ;
O b t e n .-Li nea;
W h i l e (NOT E O F ( a r c h - e n t ) ) AND B E G I N
( l i n e a .:Z ’ E N D ’ ) AND (NOT abandona) do
Procesa-l..i nea;
O b t e n - L i n e a
END;
C:l..DCE ( a r c h - e n t ) ;
FRt3CEDi.IRE C o n s i u l t a ;
VAR a r c h : TEXT; e,. i % t e : HOOLEAN; d e f a , l i n : CFIDENA; n o m b r e : CQDENA;
i : INTEGER;
L.impia(29,1:2,72,18,1);
d e f a : = ’MAC-SAL.1. TXT’ ;
abandona : = FALSE; e x i s t . e := FlñLSE:
T e x t C o l o r ( t i i x - e r r ) ; T e x t R a c k g r o u n d ( f o n - i n v ) ;
G o t o x y ( S , 6 ) ; W r i t e ( ‘ D e f a u l t : ’ , d e f a , ’ ’ ) ;
T e x t C o l . o r ( t e x t o ) ;
O o t O X y ( 5 , 4 ) ; W r i t e ( ’ Q r c h i v o o c o n s u l t a r : ” ) ;
R e p e a t . REG I N
T e x t . R a c k g r o u n d ( f o n d o ) ;
Lee..,,Qrchi vo ( 2 8 , 4, n o m b r e ) ;
I f NOT abandona then
REEXN
I f n n i n b r e = ’ ’ t h e n RE13IFJ
nombre : = def a; W r i t e ( n o m b r e ) END;
A S S I G N ( a r c h , nombre) ;
<*I->
RESET í a r c h ) ;
< % I C 3
e x i s t . i i : = ( I O r e s c i l t = 0 ) ;
I f NOT e x i s t e then
REG I N
ERROR(’E1 a r c h i v o [’+nombre+’] no e x i s t e en e l d i r e c t o r i o ’ ) ; W i n d o w ( 2 9 , 1 2 , 7 2 , 1 8 )
EN13
END
U n t i l e x i 5 t i . OK abandona; If NOT abandona t h e n
REG IN
l..imFiia(2g,7,76,23,1);
T e x t c o l o r ( t e x - e r r ) ; T e x t B a c k g r o u n d ( f o n . . i n v ) ;
G o t . 0 x y ( 1 : 7 , 1 ) ; W r i t e ( ’ CONSULTA ARCHIVO ’ ) ;
T e x t C o l o r (te,: t o ) ;
L.i m p i a (2:7,9,76, 23, 1. ) ;
W h i l e NOT E Q F í a r c h ) d o
BEG I N
i : = :L
W h i l e (NOT E O F ( a r c h ) ) AND (i
<
14) do B E G I NR e a d l n ( a r c h , 1 i n ) ;
W r i t e 1 n (1 i n 1 ;
D e l ay í 100) ;
i I:= i + 1
END; R e a d
END;
CLOSE ( a r c h ) END ;
L
c.
L
c
5:
Vi1H f r a s e : CCIDENA;
REG I N 1.
: INTEGER;
L ~ i mpi a ( 9 , h , 7 R , 2 4 , 3.1
:
+rose := 'Eso es t,odo, no o l v i d e apagar el tiquip0 de comput.o.'; Gotoxy i 1 3 , 8 i ;
for k := 1 to 51 do
+rase := 'U A C T FI 1. LI E G 13 ! ! ! ' ;
G o t o x y í 2 4 , l ' O ) j
For k := 1 to 2R do
Gotoxy(75,1'71
Write i f rase[ k 3 1 ;
Write i f I- ac,eCk 11 j
END;
<
8 ._ _ _ 1 _ . _ _ _ _ _ 1 _ _ _ _ _ _ _ _ - _ . _ . _ _ . - _ _ _ _ . _ . _ _ _ _ _ _ - . - _ _ _ I _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ I
l J N I VERSI DfW AUTONOMA METROPOL I TANA
I ZTfiFAL.APA
1 MATERIA : Seminario de Proyecto
Terminal 11.
ASESOR : L.uis Felipe Castro
PROYECTO : " Macroensamblador UAMICRO ' I
AL.LIMNO : Urtega Ledn Mario César
:----.-________-__---I I
3
PROGRAM Macro-UAMICRO;
CONST MAX-CONTEN = 100;
MAX-ARGLIM = 10;
TYPE CADEFIA := CTRINGCBOI;
1IP-ET := *ETID; ET10 := RECORD
nom-eti : CADENA; sig-eti : CADENA;
usada : BOOLEAN;
lig_.eti : TIP..ET
END; APUN := ."CELDA; CELDA := RECORD
nombre : CADENA; ini,fin : INTEGER; num-arg : INTEGER; num-eti : INTEGER; sig-mac : APUN END ;
VAR 1 i neñ, cotji g o : CADENA;
ex p a n s i on ; BOOLEAN;
a. b an don a : ROOLEAN;
arch-ent, arch-sal : TEXT; MACROS, LILT I MO : AFUN;
mac ..ac t
ual
: APlJN;MAC-CONTEN : ARRRYCl..MAX..CONTENl O F CADENA;
MAC-ARGUM,MAC-PARAN : ARRAYCi..MAX..ARGUMl O F CADENA; ap.-conten,ren,col : INTEGER;
5i g...l i bre : INTEGER;
f o r i d o , t e x t ~ n ! , f a r i . . i n v , t . e > c ~ . . i n v , t e , : . _ e r r : IN.TEGER;
npci on : CtinR;
M~c_ETID,L~L:~...~TID : 'r1P-n;