mis. lizbeth alejandra hernández gonzález programación de ... · macros es en la programación...
TRANSCRIPT
Procesadores de Macros
• Una macroinstrucción no es más que una
conveniencia notacional para el programador
(versión abreviada).
• Cada vez que se llama una macro en un
programa, el ensamblador, en lugar de la
llamada a la macro, copia y pega el código real
de la misma (MACROEXPANSIÓN).
• Las funciones de un procesador de macros
implican la sustitución de un grupo de
caracteres o líneas por otras.
• El diseño de un procesador de macros no está
directamente relacionado con la estructura del
computador en el que se va a ejecutar.
• El uso más común de los procesadores de
macros es en la programación en lenguaje
ensamblador,
• también se pueden utilizar procesadores de
macros con lenguajes de programación de alto
nivel,
• hay procesadores de macros de aplicación
general que no están ligados a ningún lenguaje
en particular.
Funciones básicas del procesador de
macros• Definición,• invocación y• expansión de macros
• Ejemplo: programa en ensambladorcon macros.
• Este programa define y usa dosinstrucciones a macros: RDBUFF yWRBUFF.
5 COPY START 0 COPIA EL ARCHIVO DE LA ENTRADA A LA SALIDA
10 ROBUFF MACRO &INDEV,&BUFADR,&RECLTH
15 .
20 . MACRO QUE LEE UN REGISTRO EN EL BUFFER
25 .
30 CLEAR X LIMPIA EL CONTADOR DE CICLO
35 CLEAR A
40 CLEAR S
45 +LDT #4096 ASIGNA LA LONGITUD MAXIMA DEL REGISTRO
50 TD =X’&INDEV’ PRUEBA EL DISPOSITIVO DE ENTRADA
55 JEQ *-3 REPITE EL CICLO HASTA QUE ESTE LISTO
60 RD =X’&INDEV’ LEE EL CARÁCTER EN EL REGISTRO A
65 COMPR A,S EXAMINA SI HAY FIN DE REGISTRO
70 JEQ *+11 SALE DEL CICLO SI ES FIN DE REGISTRO
75 STCH $BUFADR,X ALMACENA EL CARÁCTER EN EL BUFFER
80 TIXT T REPITE EL CICLO A MENOS QUE SE HAYA
85 JLT *-19 ALCANZADO LA LONGITUD DEL REGISTRO
90 STX &RECLTH GUARDA LA LONGITUD DEL REGISTRO
95 MEND
100 WRBUFF MACRO &OUTDEV,&BUFADR,&RECLTH
105 .
110 . MACRO QUE ESCRIBE EL REGISTRO DEL BUFFER
115 .
120 CLEAR X LIMPIA EL CONTADOR DE CICLO
125 LDT &RECLTH
130 LDCH &BUFADR,X TOMA EL CARACTER DEL BUFFER
135 TD =X’&OUTDEV’ PRUEBA DEL DISPOSITIVO DE SALIDA
140 JEQ *-3 REPITE EL CICLO HASTA QUE ESTE LISTO
145 WD =X’&OUTDEV’ ESCRIBE EL CARACTER
150 TIXR T REPITE EL CICLO HASTA QUE SE HAYAN
155 JLT *-14 ESCRITO TODOS LOS CARACTERES
160 MEND
165 .
170 . PROGRAMA PRINCIPAL
175 .
180 FIRST STL RETADR GUARDA LA DIRECCIÓN DE RETORNO
190 CLOPP RDBUFF F1,BUFFER,LENGTH LEE EL REGISTRO DE ENTRADA EN EL BUFFER
195 LDA LENGTH VERIFICA SI ES FIN DE ARCHIVO
200 COMP #0
205 JEQ ENDFIL SALE SI ENCONTRO EL FIN DE ARCHIVO
210 WRBUFF 05,BUFFER,LENGTH ESCRIBE EL REGISTRO EN LA SALIDA
215 J CLOOP CICLO
220 ENDFIL WRBUFF 05,EOF,THREE INSERTA MARCA DE FIN DE ARCHIVO
225 J @RETADR
230 EOF BYTE C’EOF’
235 THREE WORD 3
240 RETADR RESW 1
245 LENGTH RESW 1 LONGITUD DEL REGISTRO
250 BUFFER RESB 4096 AREA DE BUFFER DE 4096 BYTES
255 END FIRST
FIGURA 4.1 Uso de macros en un programa
5 COPY START 0 COPIA EL ARCHIVO DE LA ENTRADA EN LA SALIDA
180 FIRST STL RETADR GUARDA LA DIRECCION DE RETORNO
190 .CL00P RDBUFF FI,BUFFER,LENGTH LEE EL REGISTRO DE ENTRADA EN EL BUFFER
190a CL00P CLEAR X LIMPIA EL CONTADOR DE CICLO
190b CLEAR A
190c CLEAR S
190d + LDT #4096 ASIGNA LA LONGITUD MAXIMA DEL REGISTRO
190d TD =X'F1' PRUEBA EL DISPOSITIVO DE ENTRADA
190e JEQ *-3 REPITE EL CICLO HASTA QUE ESTE LISTO
190f RD =X' F1' LEE EL CARACTER EN EL REGISTRO A
190g C0MPR A,S EXAMINA SI HAY FIN DE REGISTRO
190h JEQ *+11 SALE DEL CICLO SI ES FIN DE REGISTRO
190 i STCH BUFFER,X ALMACENA EL CARACTER EN EL BUFFER
190j TIXR T REPITE EL CICLO A MENOS QUE SE HAYA
190k JLT *-19 ALCANZADO LA LONGITUD MAXIMA
1901 STX LENGTH GUARDA LA LONGITUD DEL REGISTRO
195 LDA LENGTH VERIFICA SI ES FIN DE ARCHIVO
200 C0MP #0
205 JEQ ENDFIL SALE SI ENCONTRO EL FIN DE ARCHIVO
210 WRBUFF 05,BUFFER,LENGTH ESCRIBE EL REGISTRO EN LA SALIDA
210a CLEAR X LIMPIA EL CONTADOR DE CICLO
210b LDT LENGTH
210c LDCH BUFFER,X TOMA EL CARACTER DEL BUFFER
210d TD =X'05' PRUEBA EL DISPOSITIVO DE SALIDA
210e JEQ *-3 REPITE EL CICLO HASTA QUE ESTE LISTO
210f WD =X'05' ESCRIBE EL CARÁCTER
210g TIXR T REPITE EL CICLO HASTA QUE SE HAYAN
210h JLT *-14 ESCRITO TODOS LOS CARACTERES
215 J CL00P CICLO
220 .ENDFIL WRBUFF 05,EOF,THREE INSERTA MARCA DE FIN DE ARCHIVO
220a ENDFIL CLEAR X LIMPIA EL CONTADOR DE CICLO
220b LDT THREEE
220c LDCH E0F,X TOMA EL CARACTER DEL BUFFER
220d TD =X '05' PRUEBA EL DISPOSITIVO DE SALIDA
220e JEQ *-3 REPITE EL CICLO HASTA QUE ESTE LISTO
220f WD =X '05' ESCRIBE EL CARÁCTER
220g TIXR T REPITE EL CICLO HASTA QUE SE HAYAN
220h JLT *-14 ESCRITO TODOS LOS CARACTERES
225 J @RETADR
230 EOF BYTE C'EOF'
235 THREE WORD 3
240 RETADR RESW 1
245 LENGTH RESW 1 LONGITUD DEL REGISTRO
250 BUFFER RESB 4096 AREA DE BUFFER DE 4096 BYTES
255 END FIRST
FIGURA 4.2 Programa de figura 4.1 con macros expandidas
Dos nuevas instrucciones para el ensamblador:
• MACRO identifica el inicio de la definición demacros,
• MEND (línea 95) marca el final de la definiciónde macros,
• este lenguaje de macros, cada parámetrocomienza con el carácter &, que facilita lasustitución de los parámetros durante laexpansión de macros.
• Una proposición de invocación a macros sesuele denominar una macrollamada. Para evitarconfusiones con la proposición de llamadautilizada en los procedimientos y subrutinas, espreferible usar el término invocación
• El programa de la figura 4.1 podríaproporcionarse como entrada a un procesadorde macros; la figura 4.2 muestra la salida quese generaría.
Entrada (4.1) Salida (4.2)
• Los argumentos y los parámetros se asocian
entre sí, de acuerdo con sus posiciones.
• Las dos invocaciones de WRBUFF especifican
argumentos distintos, por lo que producen
expansiones distintas.
• Las proposiciones de invocación a macros se
tratarán como comentarios, y las instrucciones
generadas de las expansiones de macros se
ensamblarán igual que si el programador las
hubiera escrito directamente.
• Las macroinstrucciones se han escrito para que
el cuerpo de la macro no contenga etiquetas.
• Para evitar la duplicación de símbolos se han
eliminado las etiquetas del cuerpo de
definición de estas macros.
• "JLT *-14" práctica de programación pobre.
Tablas y lógica del procesador de
macrosProcesador de macros de dos pasos:
1. Procesar las definiciones de macros
2. Las proposiciones de invocación a macros se
expanden durante el segundo paso.
• No permite que el cuerpo de una
macroinstrucción contenga definiciones de
otras macros
1 MACROS MACRO {Define las macros para la versión estándar de SIC}
2 RDUFF MACRO &INDEV,&BUFADR,&RECLTH
.
. {Versión estándar de SIC}
.
3 MEND {Fin de RDBUFF}
4 WRBUFF MACRO &OUTDEV, &BUFADR, &RECLTH
.
. {Versión estándar de SIC}
.
5 MEND {Fin de WRBUFF}
.
.
.
6 MEND {Fin de MACROS}
(a)
1 MACROX MACRO {Define las macros para SIC/XE}
2 RDUFF MACRO &INDEV,&BUFADR,&RECLTH
.
. {Versión SIC/XE}
.
3 MEND {Fin de RDBUFF}
4 WRBUFF MACRO &OUTDEV,&BUFADR,&RECLTH
.
. {Versión SIC/XE}
.
5 MEND {Fin de WRBUFF} .
.
.
6 MEND {Fin de MACROX}
(b)
FIGURA 4.3 Ejemplo de la
definición de macros en el
cuerpo de un macro.
Pueden ser útiles:
• La primera macro (MACROS) contiene
proposiciones que definen RDBUFF, WRBUFF
para SIC estándar
• (MACROX) define esas mismas macros para el
sistema SIC/XE.
• El mismo programa puede ejecutarse sobre una
máquina SIC estándar o una SIC/XE.
SIC estándar
Programa 4.3
SIC / XE
MACROS MACROX
*La definición de MACROS o de MACROX no
define RDBUFF ni las otras
macroinstrucciones.
• Un procesador de macros de un paso que pueda
alternar entre la definición y la expansión de
macros puede manejar macros como las de la
figura 4.3
• la definición de una macro debe aparecer en el
programa fuente antes de cualquier
proposición que invoque a la macro.
Estructuras de datos básicas implicadas
en este procesador de macros.1. TABDEF (tabla de definiciones ), se
almacenan las definiciones de macros y lasproposiciones que constituyen el cuerpo de lamacro.
2. TABNOM, para cada macroinstruccióndefinida, contiene apuntadores al inicio y alfinal de la definición en TABDEF. Sirve deíndice para TABDEF.
3. (TABARG) que se utiliza durante la expansiónde las invocaciones a macros.
FIGURA 4.4 Contenido de las tablasdel procesador de macros para elprograma de la figura 4.1: (a)entradas de TABNOM y TABDEF quedefinen la macro RDBUFF, (b)entradas de TABARG para lainvocación de RDBUFF en la línea190.
Sustitución de los argumentos
• Para los parámetros se ha utilizado la notación
posicional: el parámetro &INDEV se ha
convertido en ?1 (que indica el primer
parámetro del prototipo), &BUFAJDR se ha
convertido en ?2, y así sucesivamente.
• Cuando se reconoce la notación ?n, en una
línea de TABDEF, una simple operación de
indización proporciona el argumento apropiado
de TABARG
Algoritmo de un procesador de
macros de un pasoFIGURA 4.5
comienza {procesador de macros}
EXPANSION := FALSO
mientras CODOP < > 'END' haz
comienza
TOMA-LINEA
PROCESA-LINEA
termina {mientras}
termina {procesador de macros}
procedimiento PROCESA-LINEA
comienza
busca CODOP en TABNOM
si lo encuentra entonces
EXPANDE
de otro modo si CODOP = 'MACRO' entonces
DEFINE
de otro modo describe la línea fuente en el archivo expandido
termina {PROCESA-LINEA}
procedimiento DEFINEcomienzaintroduce el nombre de la macro en TABNOMintroduce el prototipo de la macro en TABDEFNIVEL := 1mientras NIVEL > 0 haz
comienzaTOMA-LINEAsi no es una línea de comentario entonces
comienzasustituye la notación posicional por parámetrosintroduce la línea en TABDEF
si CODOP = 'MACRO' entoncesNIVEL := NIVEL + 1
de otro modo si CODOP = 'MEND' entoncesNIVEL := NIVEL - 1
termina {si no es comentario}termina {mientras}guarda en TABNOM apuntadores al principio y al final de la definición
termina {DEFINE}
procedimiento EXPANDE
comienza
EXPANSION := VERDADERO
toma la primera línea de la definición de macros {prototipo} de TABDEF asigna los argumentos de lainvocación a macros en TABARG escribe la invocación a macros en el archivo expandido como comentariomientras no se termine la definición de macros haz
comienza
TOMA-LINEA
PROCESA-LINEA
termina {mientras)
EXPANSION := FALSO
termina {EXPANDE)
procedimiento TOMA-LINEA
comienza
si EXPANSION entonces
comienza
toma la siguiente línea de la definición de macros en TABDEF sustituye los argumentos deTABARG por notación posicional
termina {si}
de otro modo
lee la siguiente línea del archivo de entrada termina {TOMA-LINEA)
termina {TOMA-LINEA}
• DEFINE, se llama al reconocer el inicio de unadefinición de macros, hace las entradas apropiadasen TABDEF y TABNOM.
• EXPANDE coloca los valores de los argumentos enTABARG y expande la proposición de invocación amacros.
• TOMA-LINEA, se llama en varios puntos delalgoritmo, toma la siguiente línea que se va aprocesar, y que puede proceder de TABDEF
• DEFINE tiene un contador llamado NIVEL, cuyovalor se incrementa en uno cada vez que se lee unaproposición MACRO, y disminuye en uno su valorcada vez que se lee una proposición MEND como(para compaginar MACRO-END). Por el ej. 4.3
• La mayoría de los procesadores de macros
admiten la presencia de las definiciones de
macros más usadas en la biblioteca estándar
del sistema.
Características del procesador de macros
independientes de la máquina
• Las características extendidas no están
directamente relacionadas con la arquitectura
del computador.
1. Concatenación de parámetros
2. Generación de etiquetas únicas
3. Expansión de macros condicional
Concatenación de parámetros
• Suponga series de variables:▫ XA1, XA2, XA3, ..., otra serie por XB1, XB2, XB3,
...
• El parámetro de la macroinstrucción podríaespecificar las series de variables con que seoperará (A, B, etc.).
• El procesador de macros utilizaría esteparámetro para construir los símbolosrequeridos en la expansión de macros (XA1,XB1, etc.).
Generación de etiquetas únicas
• En general el cuerpo de una macroinstrucción
no puede tener etiquetas del tipo usual.
• Por ejemplo, WRBUFF de la figura 4.1. Si se
colocara una etiqueta en la instrucción TD de la
línea 135, esta etiqueta se definiría dos veces.
• Muchos procesadores de macros evitan esos
problemas mediante la creación de tipos
especiales de etiqueta dentro de las
macroinstrucciones.
Propuesta
• Las etiquetas utilizadas en el cuerpo de la
macro comienzan con el carácter especial $
• En la figura 4.7 (b) cada símbolo que empieza
con $ se ha modificado reemplazándolo por $AA
($XX siendo XX alfanumérico)
• Se tienen hasta 1296 (36^2) expansiones de
macros en un sólo programa. generación de
etiquetas únicas
25 RDBUFF MACRO &INDEV,&BUFADR,&RECLTH
30 CLEAR X LIMPIA EL CONTADOR DE CICLO
35 CLEAR A
40 CLEAR S
45 +LDT #4096 ASIGNA LA LONGITUD MAXIMA DEL REGISTRO
50 $LOOP TD =X'&INDEV' PRUEBA EL DISPOSITIVO DE ENTRADA
55 JEQ $L00P REPITE EL CICLO HASTA QUE ESTE LISTO
60 RD -X'&INDEV" LEE EL CARACTER EN EL REGISTRO A
65 C0MPR A,S EXAMINA SI HAY FIN DE REGISTRO
70 JEQ $EXIT SALE DEL CICLO SI ES FIN DE REGISTRO
75 STCH &BUFADR,X ALMACENA EL CARACTER EN EL BUFFER
80 TIXR T REPITE EL CICLO A MENOS QUE SE HAYA
85 JLT $L00P ALCANZADO LA LONGITUD MAXIMA
90 $EXIT STX &RECLTH GUARDA LA LONGITUD DEL REGISTRO
95 MEND
(a)
RDBUFF FL,BUFFER,LENGTH
30 CLEAR X LIMPIA EL CONTADOR DE CICLO
35 CLEAR A
40 CLEAR S
45 +LDT #4096 ASIGNA LA LONGITUD MAXIMA DEL REGISTRO
50 $AAL00P TD =X'F1' PRUEBA EL DISPOSITIVO DE ENTRADA
55 JEQ $AAL00P REPITE EL CICLO HASTA QUE ESTE LISTO
60 RD =X'FL' LEE EL CARACTER EN EL REGISTRO A
65 COMPRN A,S EXAMINA SI HAY FIN DE REGISTRO
70 JEQ $AAEXIT SALE DEL CICLO SI ES FIN DE REGISTRO
75 STCH &BUFFER,X ALMACENA EL CARACTER EN EL BUFFER
80 TIXR T REPITE EL CICLO A MENOS QUE SE HAYA.
85 JLT $AAL00P ALCANZADO LA LONGITUD MAXIMA
90 $AAEXIT STX LENGTH GUARDA LA LONGITUD DEL REGISTRO
95 MEND
(b)
FIGURA 4.7 Generación de etiquetas únicas en la expansión de macros.
Expansión de macros condicional
• En esta sección se presenta un conjunto típicode proposiciones de expansión de macroscondicional.
• Figura 4.8. &E0R, especifica un código decaracter hexadecimal que marca el final de unregistro, y &MAXLTH, que especifica la longitudmáxima de registro que se puede leer.
• (Como se verá más adelante, es posible omitircualquiera de los dos parámetros en unainvocación de REDBUFF.)
• Las proposiciones de las líneas 44 a 48 de esta
definición ilustran una estructura condicional
(IF)
• La figura 4.8(b-d) muestra la expansión de tres
diferentes proposiciones de invocación a
macros que ilustran la operación de las
proposiciones IF de la figura 4.8(a).
25 RDBUFF MACRO &INDEV,&BUFADR,&RECLTH,&EOR,&MAXLTH
26 IF (&E0R NE ")
27 $E0RCK SET 1
28 ENDIF
30 CLEAR X LIMPIA EL CONTADOR DEL CICLO
35 CLEAR A
38 IF (&EOR EQ 1)
40 LDCH =X'&E0R' ASIGNA EL CARACTER DE FIN DE REGISTRO
42 RMO A,S
43 ENDIF
44 IF (&MAXLTH EQ ")
45 +LDT #4096 HACE LA LONGITUD MAXIMA = 4096
46 ELSE
47 +LDT # &MAXLTH ASIGNA LA LONGITUD MAXIMA DEL REGISTRO
48 ENDIF
50 $LOOP TD =X'&INDEV' PRUEBA EL DISPOSITIVO DE ENTRADA
55 JEQ $L00P REPITE EL CICLO HASTA QUE ESTE LISTO
60 RD -X'&INDEV' LEE EL CARACTER EN EL REGISTRO A
63 IF (&E0R EQ 1)
65 COMPR A,S EXAMINA SI HAY FIN DE REGISTRO
70 JEQ $EXIT SALE DEL CICLO SI ES FIN DE REGISTRO
73 ENDIF
75 STCH &BUFADR,X ALMACENA EL CARACTER EN EL BUFFER
80 TIXR T REPITE EL CICLO A MENOS QUE SE HAYA
85 JLT $LOOP ALCANZADO LA LONGITUD MAXIMA
90 $EXIT STX &RECLTH GUARDA LA LONGITUD DEL REGISTRO
95 MEND
(a)
Uso de proposiciones condicionales
en el procesamiento de macrosRDBUFF F3,BUF,RECL,04,2048
30 CLEAR X LIMPIA EL CONTADOR DE CICL035 CLEAR A40 LDCH =X'04' ASIGNA EL CARACTER DE FIN DE REGISTRO42 RMO A,S47 +LDT #2048 ASIGNA LA LONGITUD MAXIMA DEL REGISTRO50 $AALOOP TD =X'F3' PRUEBA EL DISPOSITIVO DE ENTRADA55 JEQ $AAL00P REPITE EL CICLO HASTA QUE ESTE LISTO60 RD =X'F3' LEE EL CARACTER EN EL REGISTRO A65 COMPR A,S EXAMINA SI HAY FIN DE REGISTRO70 JEQ $AAEXIT SALE DEL CICLO SI ES FIN DE REGISTRO75 STCH $BUF,X ALMACENA EL CARACTER EN EL BUFFER80 TIXR T REPITE EL CICLO A MENOS QUE SE HAYA85 JLT $AAL00P ALCANZADO LA LONGITUD MAXIMA90 $AAEXIT STX RECL GUARDA LA LONGITUD DEL REGISTRO
(b)
(c)RDBUFF 0E,BUFFER,LENGTH ,,80
30 CLEAR X LIMPIA EL CONTADOR DE CICLO
35 CLEAR A
47 +LDT #80 ASIGNA LA LONGITUD MAXIMA DEL
REGISTRO
50 $ABL00P TD =X'0E' PRUEBA EL DISPOSITIVO DE ENTRADA
55 JEQ $ABL00P REPITE EL CICLO HASTA QUE ESTE
LISTO
60 RD =X'0E' LEE EL CARACTER EN EL REGISTRO A
75 STCH BUFFER,X ALMACENA EL CARACTER EN EL BUFFER
80 TIXR T REPITE EL CICLO A MENOS QUE SE
HAYA
87 JLT $ABL00P ALCANZADO LA LONGITUD MAXIMA
90 $ABEXIT STX LENGTH GUARDA LA LONGITUD DEL REGISTRO
(c)
(d)RDBUFF F1,BUFF,RLENG
,04
30 CLEAR X LIMPIA EL CONTADOR DE CICLO
35 CLEAR A '
40 LDCH =X'04' ASIGNA EL CARACTER DE FIN DE REGISTRO
42 RM0 A,S
45 +LDT #4096 ASIGNA LA LONGITUD MAXIMA DEL
REGISTRO = 4096
50 $ACL00P TD =X/F1 ' PRUEBA EL DISPOSITIVO DE ENTRADA
55 JEQ $ACL00P REPITE EL CICLO HASTA QUE ESTE LISTO
60 RD =X'F1' LEE EL CARACTER EN EL REGISTRO A
65 C0MPR A,S EXAMINA SI HAY FIN DE REGISTRO
70 JEQ $ACEXIT SALE DEL CICLO SI ES FIN DE REGISTRO
75 STCH &BUFF,X ALMACENA EL CARACTER EN EL BUFFER
80 TIXR T REPITE EL CICLO A MENOS QUE SE HAYA
85 JLT $ACL00P ALCANZADO LA LONGITUD MAXIMA
90 $ACEXIT STX RLENG GUARDA LA LONGITUD DEL REGISTRO
(d)
• El procesador de macros debe mantener una
tabla de símbolos que contenga los valores de
todas las variables utilizadas en el momento
del procesamiento.
• La prueba de expresiones booleanas en las
proposiciones IF se produce en el momento en
que se expanden las macros.
Uso de proposiciones de ciclo en el
momento del procesamiento de macros25 RDBUFF MACRO &INDEV,8tBUFADR,&RECLTH,&E0R
27 $E0RCT SET %NITEMS(&EOR)
30 CLEAR X LIMPIA EL CONTADOR DE CICLO
35 CLEAR A
45 +LDT #4096 HACE LA LONGITUD MAXIMA = 4096
50 $LOOP TD -X'&INDEV' PRUEBA EL DISPOSITIVO DE ENTRADA
55 JEQ $L00P REPITE EL CICLO HASTA QUE ESTE LISTO
60 RD =X'&INDEV' LEE EL CARACTER EN EL REGISTRO A
63 &CTR SET 1
64 WHILE (&CTR LE &E0R)
65 COMP =X'0000&E0R[&CTR]'
70 JEQ $EXIT
71 &CTR SET &CTR+1
73 ENDW
75 STCH &BUFADR,X ALMACENA EL CARACTER EN EL BUFFER
80 TIXR T REPITE EL CICLO A MENOS QUE SE HAYA
85 JLT $LOOP ALCANZADO LA LONGITUD MAXIMA
90 $EXIT STX &RECLTH GUARDA LA LONGITUD DEL REGISTRO
100 MEND
(a)
( b )RDBUFF F2,BUFFER,LENGTH,(00,03,04)
30 CLEAR X LIMPIA EL CONTADOR DE CICLO
35 CLEAR A
45 +LDT #4096 HACE LA LONGITUD MAXIMA = 4096
50 $AALOOP TD =X'F2' PRUEBA EL DISPOSITIVO DE ENTRADA
55 JEQ $AALOOP REPITE EL CICLO HASTA QUE ESTE LISTO
60 RD =X'F2' LEE EL CARACTER EN EL REGISTRO A
65 COMP =X'000000'
70 JEQ $SAAEXIT
65 COMP =X'000003'
70 JEQ $AAEXIT
65 COMP =X'000004'
70 JEQ $AAEXIT
75 STCH BUFFER,X ALMACENA EL CARACTER EN EL BUFFER
80 TIXR T REPITE EL CJCLO A MENOS QUE SE HAYA
85 JLT $AALOOP ALCANZADO LA LONGITUD MAXIMA
90 $AAEXIT STX LENGTH GUARDA LA LONGITUD DEL REGISTRO
• con esta definición el programador puede
especificar una lista de caracteres de fin de
registro.
• P.e., en la proposición de invocación a macros
de la figura 4.9(b), hay una lista (00,03,04)
correspondiente al parámetro &EOR
Parámetros de macros de palabras
clave• Con los parámetros posicionales, el
programador ha de procurar especificar los
argumentos en el orden apropiado.
• Si se va a omitir un argumento, la invocación
debe contener un argumento nulo (ver figura
4.8.c)
▫ GENERA ,,DIRECT,,,,,,3.
• parámetros de palabras clave, el valor de los
argumentos se escribe con una palabra clave.
▫ GENERA TYPE=DIRECT,CHANNEL=3.
• En el prototipo de macro, cada nombre de
parámetro va seguido de un signo “=“ que
identifica un parámetro de palabra clave.
• Después del signo igual, se especifica un valor
por omisión para algunos parámetros.
• El parámetro tiene este valor por omisión si su
nombre no aparece en la proposición de
invocación a macros.