tesis de grado previa a la obtenciÓn del titulo de...
TRANSCRIPT
TESIS DE GRADO PREVIA A LA OBTENCIÓN
DEL TITULO DE INGENIEROS EN
ELECTRÓNICA Y TELECOMUNICACIONES
DEPURADOR DE PROGRAMAS PARA EL
MICROPROCESADOR 18086
FERNANDO ORTEGA LÓPEZ
IVAN ORDOfíEZ REINOSO
ESCUELA POLITÉCNICA NACIONAL
I. INTRODUCCIÓN.- 7
1.1. Justificación del terna.- . . . . . . . . . 7
1.2. Planteamiento de objetivos.- 9
II. FUNDAMENTOS SOBRE EL DOS Y EL BIOS.- 11
2.1 Fundamentos del DOS.- 11
2.2 Funciones del DOS.- 15
2.3 Funciones del BIOS.- . . . . . . . . . . . . 16
III. DESARROLLO DEL SOFTWARE.- . . . . . 15
3.1 Definición del problema.- 18
3.2 Desarrollo del programa principal.- . . . . 22
Desarrollo del controlador de flujo . . . . 27
Macros de comandos en el controlador de
flujo 44
La rutina de escape opcional 51
Flujo del depurador 52
3.3 Desarrollo de las funciones: módulos
individuales.- 58
Módulo Flujo. Asm 58
Módulo Pro. Asm 58
Módulo Desens.Ásra 59
Módulo Assem.Asm 60
Módulo Ejecutor. Asm ; • • ^8
Módulo Memory.Asm 73
3.4 Integración de módulos.- 74
IV. EJEMPLOS TÜTOR1ALES: EXPERIMENTACIÓN Y RESULTADOS 79
4, i Una sesión típica de laboratorio 79
4.2 Ejemplos de depuración de programas . . . . 30
Programa i 81
Programa 2 86
4.3 Pro.Sxe: Una herramienta de investigación . 92
V. CONCLUSIONES Y RECOMENDACIONES 100
A P É N D I C E S A P I
A. DIAGRAMAS Y LISTADOS A l
B, MANUAL DEL USUARIO B 1
Archivos necesarios para el depurador.- . . B 1
Adaptación al tipo de monitor.- B 2
Ingreso al programa.- B2
Pantalla del Depurador.- B3
. a) Ventana de código.- B 3
b) Ventana de Registros.- B 4
c) Ventana de banderas.- B 4
d) Ventana principal de memoria.- B 4
e) Ventanas secundarias de memoria.- . B 4
f) Ventana de línea actual.- B 5
g) Ventana de Stack. - B 5
Opciones en los menúes.- , E 5
a) Archivos.- B 6
b) Información.- B 7
c) Depurador, - B7
d) Termina. - BIO
Teclas de Función.- Bli
Macros. - Bi2
Limitaciones de PRO.EXE.- B14
C. ESPECIFICACIONES DEL MICROPROCESADOR 8086 . , C 1
Registros . . . . . C I
Modos de direccionarniento C 5
D. LLAMADAS A FUNCIONES DEL DOS Y DEL BIOS . . . D i
Funciones del BIOS.- D I
Funciones del DOS.- D 3
E. EL GENERADOR INTERACTIVO DE VENTANAS . . . . E l
F. EMPLEO DEL CONTROLADOF. DE FLUJO . . . , . . _ . F 1
BIBLIOGRAFÍA.- , EL 1
El tema desarrollado por nosotros como tesis responde
a lina necesidad de nuestra Facultad (y tal ves, de otras
facultades e inclusive otras instituciones educativas en
el país), que es la de contar con un depurador para los
microprocesadores de la serie del Í8086 amistoso al
usuario y de fácil utilización; dicho inicroprocesador es
de uso muy extendido, pues constituye el cerebro de las
computadoras de la serie de IBM PC y compatibles, que' son
las computadoras personales más vendidas en nuestro pais,
y para las cuales se desarrolla la gran mayoría de nuevos
paquetes de software; además, son las máquinas con las
cuales contamos en la Facultad, y en ellas se desarrolla
algo de software en lenguaje ensamblador. Creemos que el
paquete que presentamos en esta tesis favorecerá el
desarrollo de este tipo de software, pues es una muy- útil
herramienta de depuración; además, podrá ser utilizado
corno base para el laboratorio de Microcomputadoras II,
para el cual no se contaba hasta el momento con un
depurador apropiado (en Microcomputadoras I se tiene el
AVSIM 280, para el microprocesador Z80).
Introducción
Podemos comparar nuestro paquete con otros
depuradores existentes en el mercado: DEBUG, parte
integrante del DOS, y Codeview, proporcionado con el Macro
Assembler 5.0 de Microsoft:
El primero es un programa interactivo pero no
orientado a pantalla, es decir. no tiene actualización
automática de código ni de senas de memoria, y solo
presenta la información explícitamente solicitada por el
usuario, a excepción del contenido de los registros, Que
se presenta cada ves que se ejecuta una porción del código
del programa que está siendo depurado. Por otro lado,
utilisa la pantalla normal de video para presentar sus
resultados, por lo que interfiere con el programa del
usuario si éste trabaja con el video.
El segundo es un depurador de uso general para
lenguajes de Microsoft, que tiene actualiaación automática
de código, pero no de zonas de memoria; tiene varias
ventajas de depuración, como la posibilidad de colocar
puntos de ruptura en el código y otras, pero es de uso
algo complejo, y requiere de memorisación de comandos,
Nuestro paquete, al que hemos denominado 'PRO', es
específico para programas en lenguaje de máquina, pero
Introducción
presenta muchas ventajas, además de la facilidad de
maneje, corno la posibilidad de manipular memoria, código y
archivos en forma sencilla, y además tiene muchas ventajas
de depuración, como puntos de ruptura visibles en el
código y accesibles a través de una tabla, ejecución hasta
el cumplimiento de una -condición determinada; posibilidad
de no ingreso a subrutinas y varias otras.
Por todo ésto creemos que el tema esté bastante bien
justificado, y esperamos que se constituya en una
herramienta útil para el desarrollo de software en
lenguaje ensamblador.
e objetivos. - -
SI ..objetivo de esta tesis es la elaboración de un
depurador para programas escritos en lenguaje de máquina
•del microprocesador 8086 de INTEL, basado en el sistema
operativo DOS . El programa debe ser amistoso al usuario ,
es decir, de fácil utilisación y de rápida f ainiliarisación
para nuevos usuarios, a fin de que sea una herramienta
didáctica y profesional útil.
II^_EDNDAMENTOS SOBRE EL DOS Y EL BTOR.-
Fundamentos ..
El DOS (Disk Üperating System) es un sistema
operativo, desarrollado por .la . casa .Microsoft para IBM, y
se creó a propósito de la salida al mercado de la IBM PC
original. La versión i.O del DOS era simplemente un CP/tó
(sistema operativo muy popular basta entonces, para
máquinas basadas en Z80 u SOSO) traducido al lenguaje del
microprocesador de aquella máquina, el 8088, A partir de
entonces se liberaron varias actualizaciones del paquete,
pero solo se hicieron cambios realmente importantes desde
la versión 2. 10, y a partir de la 3. 00 se incluyó un nuevo
conjunto de . servicios manejadoras de disco. Es a ésta
versión y a las posteriores a las que nos referiremos de
aquí en adelante.
El DOS consiste en cuatro componentes;
a) El registro de inicialisación: Comienza en la pista O,
sector 1, lado O de todo diskett-e que esté en formato DOS,
y se coloca allí para producir un mensaje de error si se
intenta cargar el sistema operativo desde un diskette que
no lo contiene. En discos duros, este registro reside en
11
Fundamentos
el primer sector de la partición del DOS. Todos los medios
soportados por DO? tienen un .sector para registro de
inicialización.
b) La interfaa con el ROM BIOS: El archivo IBHBIO.COM
desempeña este papel, proveyendo una interfas de bajo
nivel con las rutinas manejadoras de dispositivos del ROM
BIOS.
c) El archivo de programa del DOS: Este archivo es el
IBMDOS.COM. Provee una interfas de alto nivel para
programas de usuario. Consiste en un grupo de rutinas de
manejo de archivos, manejo de disco, y una variedad de
funciones fácilmente accesibles por programas de usuario.
Cuando un programa invoca a una de estas rutinas, estas
aceptan información de alto nivel en contenidos de
registros o de . bloques de memoria. Para operar
dispositivos, las funciones traducen los requerimientos en
una o más llamadas a la interfas de bajo" nivel IBMBIO. COL'í.
d) El procesador de comandos, COMMAND.COM: Consiste de las
siguientes part.es:
Fundamentos
Una porción residente, que se instala en memoria
ininediatainen-oe a continuación del IBMDOS.COM y su
área de datos. Contiene los servicios de las
funciones de terminación y de manejo de errores,
rutinas para cargar la parte transitoria del
COHMAND.COM, y la rutina para cargar y ejecutar
comandos externos, es decir archivos con extensiones
.COM o .EXE.
Una porción de inicialiaación, que sigue a la porción
residente y toma el control durante la
inicialisación. Esta porción contiene la rutina que
procesa al A0TOEXEC.BAT, y determina la dirección de
segmento en que se pueden cargar programas. Esta
porción es destruida en cuanto COMMAND.COM carga un
programa tras la inicialiaación, pues ya no es
necesaria, y la memoria que utilizaba es ocupada.
Una porción transitoria, que se carga en el extremo
más alto de la memoria. Este es el procesador de
comandos en si, que procesa todos los comandos
externos y los archivos de extensión .BAT. Además,
produce la señal de espera de comandos del DOS ' (como
A>), lee el comando del teclado (o del archivo .BAT),
13
Fundament-os
y lo ejecuta. Para comandos externos, construye una
linea de comandos y llama a la función EXEC para
cargar y transferir control al programa.
El sistema operativo se inicialisa cada ves que se
realisa un reset o que se enciende la máquina. Primero, el
ROM BIOS toma el control, y busca el registro de
inicialización en la unidad A. De no encontrarlo, busca la
partición activa en el disco duro. Una ves encontrado
dicho registro, es leido a memoria y se le pasa el
control. Este busca entonces en el directorio raía a fin
de asegurarse de que los dos primeros archivos son el
IBMBIO.COM y el IBMDOS.CQM. Entonces, se carga en memoria
el primero de estos" archivos y se le transfiere el
control.
Be inmediato, 1BMBIO.COM carga IBMDOS.COM, determina
el estado de la máquina, inicializa los dispositivos
periféricos, carga los manejadores de dispositivos (device
drivers), crea la parte baja de la tabla de vectores de
interrupción, relocaliaa IBMDOS. COM más abajo en memoria e
invoca al primer byte del DOS.
14
Fundamentos
Entonces, el DOS inicialisa sus tablas internas de
trabajo y ios vectores de interrupción desde el OFK hasta
el 3FH, y crea un prefijo de segmento de programa (Program
Segment Prefix, de aquí en adelante referido como PSP).
Finalmente, IBMBIO.COM utilisa la función EXEC para
cargar y ejecutar el procesador de comandos de alto nivel,
normalmente el COMMAND.COM. Este procesador contiene,
además, un inane jador de errores críticos (accesible
mediante la interrupción 24H), que da al usuario las
opciones de abortar, reinT.entar o ignorar cuando se
produce una falla. El usuario puede utilizar un manejador
propio de errores interceptando la interrupción 24H
(mediante la función 25H del DOS, Set Vector).
2.2 Funciones del DOS.-
El DOS proporciona al usuario un conjunto de
funciones y procedimientos de alto nivel, accesibles
mediante la interrupción 21H, que permiten inane jar
dispositivos, memoria, subprocesos y otros. Se ejecuta
cada función proporcionando su número en el registro AH,
los parámetros requeridos en otros registros, según cada
15
Fundamentos
función, e invocando a la interrupción. Algunas funciones
de manejo de archivos requieren de lo oue se denomina un
'ASCIIZ' , que es una tira de caracteres terminados con un
O, que suele representar al identificador de un archivo;
por ejemplo, la siguiente linea de un programa en Assewbly
es un ASCIIZ:
nombre db "c:\dos\keybsp.com',O
Contarnos con • documentación de funciones numeradas
desde la O hasta la 62H, y en el apéndice D exponemos
brevemente las más importantes utilizadas para la
elaboración del programa objeto de la presente tesis.
2.3 Func-lones del BIOS.-
El EOM BIOS proporciona servicios de bajo nivel de
control de dispositivos tales como el teclado, el video, y
los controladores de disco. Normalmente, el prograroador
puede prescindir de estos servicios y utilizar únicamente
las funciones del DOS antes expuestas, pero el uso directo
del BIOS es aconsejable en ciertos casos, cuando se desea
tener programas muy rápidos y eficientes. Estos servicios
16
III. DESARROLLO DEL SOFTWARE,^
Los productos disponibles en nuest.ro medio para
depuración de programas escritos en lenguaje Assembler del
8086 tienen inconvenientes que fueron ya señalados en la
introducción. Son las dificultades que esos depuradores
presentan las que proporcionaron las metas para el
programa que hemos desarrollado. El depurador debe ser de
fácil uso, de rápida familiariaación, y debe mostrar en la
pantalla los elementos del raicrocomputador que interesan a
quien escribe programas en lenguaje de bajo nivel:
registros, banderas, memoria y código, siempre
actualisados y en forma simultánea.
El objetivo inicial fue hacer un programa que realice
las funciones básicas de depuración: desensamblar código,
presentar registros, banderas . y memoria, ensamblar
instrucciones, correr el programa en prueba en varias
modalidades (como paso a paso o ejecución hasta una
dirección o ejecución total), colocar puntos de ruptura,
etc. .. Para facilidad del usuario decidimos que el control
sea en base a menúes y que los resultados se presenten en
18
Desarrollo
áreas (ventanas) de la pantalla destinada cada una a un
elemento específico.
Pero este objetivo inicial fue complementado al
empezar la creación del depurador por las consideraciones
que se exponen a continuación:
La etapa de desarrollo de un programa de cualquier
tipo se caracteriza por los continuos cambios, arreglos,
aumentos y eliminaciones que el programa sufre. En el caso
de un programa interactivo con uso intensivo de la
pantalla este problema es rnás agudo por la relativa
complejidad que implica el establecimiento de una
comunicación lógica y sencilla con el usuario del
programa, y que lleve de una manera obvia a la realización
de una función. Muchas veces quien empieza a usar una
aplicación no conoce exactamente la forma de hacer cierto
trabajo y allí el programa debe indicar el camino.
Por los motivos expuestos podemos decir que el
programador emplea gran cantidad de su tiempo y esfuerzo a
tareas que esencialmente son repetitivas: reorganizar el
flujo de su aplicación, mejorar los interfaces que el
programa presenta al usuario, cambiar la presentación de
Desarrollo
su programa, etc.. Pronto se hiso evidente que existían
dos posibilidades para el desarrollo de nuestro Tema de
Tesis:
La primera, más directa, era escribir un flujo
adecuado para el depurador, con todo lo que ésto acarrea:
principalmente una gran cantidad de tiempo destinada a
satisfacer cualquier modificación que la calidad del
programa hiciera necesaria.
La segunda, y por la que finalmente optamos,
consistía en sistematizar el mecanismo de un programa
manejado en base a menúes (un controlador de flujo) y en
crear un medio más fácil de alterar la presentación del
depurador (un generador interactivo de ventanas). Esta
opción implicaba, sin embargo, una etapa previa en las dos
direcciones indicadas para luego volver a la idea central
del depurador. Las ventajas de este método son la
reducción del esfuerzo destinado a las modificaciones, por
profundas que éstas sean,, y, sobre todo, que la etapa
previa da un resultado utilizable por cualquier aplicación
interactiva y orientada a pantalla.
20
Desarrollo
Una vez -terminadas estas dos herramientas vino la
etapa de planificar el flujo del depurador y definir con
claridad que funciones debe realisar el programa. Esto no
significa, desde luego, que no surgieron modificaciones
posteriores.
Luego vino la creación de las rutinas que hacen las
funciones planeadas y su inmediato enlace a un controlador
de flujo. La presentación externa de la función se hiso
sencilla y de calidad utilisando el generador interactivo
de ventanas.
Estas herramientas, sumadas al uso de la programación
modular, permitieron conseguir el objetivo de flexibilisar
la extensa etapa" de creación y modificación del depurador.
Esta descripción de la forma en que realizamos la
Tesis indica cuál fue nuestra definición del problema y el
método que seguimos. Las partes descritas arriba serán
desarrolladas en los próximos puntos.
21
Desarrollo
3.2 Desarrollo del programa
El núcleo del depurador es el controlador de flujo.
Es el encargado de mantener información sobre todas las
opciones del programa. Invoca a las rutinas en el momento
adecuado y recibe de ellas el control cuando han
terminado.
La idea del controlador de flujo nace de un breve
análisis de qué es lo que hace un programa interactivo
manejado por medio de menúes. Al empezar la ejecución se
inicialisan ciertas variables , se leen archivos , en fin ,
se realizan tareas que son la base para el trabajo
posterior. Luego se presenta un menú en el cual podemos
elegir alguna de sus opciones. Es posible que la opción
nos lleve a un nuevo menú o al mismo del cual partimos ,
hay muchas posibilidades, pero lo importante es que una
vez que entramos en el primer menú el medio que se
presenta al usuario es el mismo y será el mismo esté en el
menú que esté.
Este medio es el que se puede sistematizar- Pasada la
rutina inicial el programa se transforma en una especie de
lazo en el que pocas variables diferencian un estado de
22
Desarrollo
otro: El nivel o profundidad en que ríos encontramos
respecto del menú principal y la posición de una opción
dentro del árbol formado por opciones y subopciones.
Finalmente, cuando se quiere terminar el trabajo con
el programa, se debe realisar alguna rutina final, como
grabar algún archivo, dar mensajes, etc..
Cuando al usuario se le presenta un menú puede tornar
alguna de estas acciones:
- Puede presionar una de las flechas y moverse a una
opción contigua.
- Puede digital" la tecla ENTER entrando con ésto a
cumplir rutina asociada a la opción sobre la que
estaba ubicado y luego a recibir el tratamiento
adecuado de acuerdo al tipo de función de que se
trate. De ésto hablaremos, con mayor detalle, más
adelante.
- Puede digitar la letra clave de una opción, con lo
que entra directamente a esa opción sin necesidad de
ubicarse sobre ella. Realiza la rutina asociada y
23
Desarrollo
luego recibe el tratamiento adecuado al tipo de
función.
- Cualquier otra alternativa no es tomada en cuenta.
Una ves ejecutada la rutina asociada a una opción
existen varias alternativas (A ésto se referían las
palabras "tipo de función" indicadas anteriormente). Estas
alternativas son:
- Se cumple la rutina asociada y se regresa al mismo
menú que contiene la opción. Estas rutinas podrían
llamarse "normales".
- Se cumple la rutina asociada y se emerge un nivel
en el árbol de opciones, es decir, se transfiere el
control al menú "padre" del que contenia la opción.
Estas funciones serán llamadas "inversas".
- Se ejecuta la rutina y se profundisa un nivel,
mostrando un nuevo menú, "Hijo" de la opción que fue
digitada. Estas opciones son del tipo "rama".
En cualquiera de estos casos la rutina asociada puede
no realisar ninguna función (rutina "dummy") más que la de
24
Desarrollo
devolver el flujo al controlador. Est.o facilita muchísimo
la prueba de los módulos que se van desarrollando para el
programa, pues, mientras ellos no existan, una rutina
dummy tornará su lugar, y cuando estén listos podrán ser
probados de inmediato. Además, puesto que el flujo ya está
definido, la posición que la rutina pase a ocupar en el
programa será la definitiva) sin importar la inclusión
posterior de otros módulos.
Este seria un cuadro bastante rígido de un programa
interactivo. En la implementación tomada en esta Tesis
existen o^cras características para mayor facilidad de uso*
El menú aparece en la penúltima linea de la
pantalla (línea 23) y"una explicación sobre la opción
actual en la última línea (la 24).
Una tecla (ESC), permite siempre salir al nivel
superior de menúes. Si se esté en el menú principal,
ESC significa que se desea salir del programa. En
todo caso se hace una pregunta para confirmar esa
decisión.
25
Desarrollo
- Una combinación (Ctrl-0 o "O), presenta una ventana
sobre la opción en la que estamos ubicados
actualmente con las subopciones que ésta posee, si
existen. En el momento que aparece esa ventana de
subopciones, las flechas hacia arriba y hacia abajo
son aceptadas para moverse en ese menú.. La
explicación que aparece en la línea 24 es la asociada
a la subopción en la que estamos actualmente. Si se
presiona ENTER sobre una subopción se ingresa a la
opción que la contiene y el cursor queda ubicado
sobre la subopción seleccionada, listo para que una
nueva presión de la tecla ENTER la mande a ejecutar.
El mismo "O desactiva la ventana de subopciones si no
se la necesita.
- Una combinación (~P), presenta una ayuda acerca de
la manera de manejar los menúes.
- La combinación "K permite ingresar a las opciones
de macros que el cont-rolsdor de xlujo provee:
grabación, prueba, corrida y eliminación de macros.
Esta opción solo puede ser invocada desde el menú
principal, por razones que en su momento se
expondrán.
26
Desarrollo
- Una última característica, muy úüil, es la llamada
"rutina de escape", que es la posibilidad, a criterio
del usuario del controlador de flujo, de tener una
opción del menú que reciba como dat,os todas las
teclas que se hayan digitado y que no sean opciones
válidas del menú.
Desarrollo del controlador de flujo.
En el apéndice A consta el diagrama de bloques del
controlador. Lo primero que anotaremos es que el flujo y
el tamaño del mismo son constantes, independientes de la
magnitud de la aplicación que va a ser controlada, y que
la explicación es también general. Los detalles del
programa, ya en profundidad, son comentados en los
listados. Aquí solo indicaremos las funciones que los
distintos bloques realizan, no la manera cómo lo hacen.
En este programa se usó una técnica soportada por el
Macro Assembler 5.O que es la de usar roacros de
instrucciones. Un macro, en este contexto, es un conjunto
de nemotécnicos que se define una ves y luego puede ser
27
Desarrollo
llamado con solo escribir su nombre, como si fueran nuevos
nenotécnicos del lenguaje. En la definición de un roacro se
puede indicar parámetros, que son reemplazados al momento
del ensamblado.
Por ejemplo, vamos a hacer un rnacro llamado PRUEBA
que pone un valor X en el registro AL y X+l en el registro
BH. La definición del inacro sería la siguiente:
prueba raacromovIflOV
incendm
X
al , xbh.xbh
Las palabras MAGRO y ENDM son las que determinan que
PRUEBA es un inacro. X es un parámetro que puede ser puesto
por el programador, y puede ser un valor inmediato, una
localidad de memoria o un registro. Dada la forma en que
ha sido usado, X debe ser un byte (8 bits). Invocaciones
válidas a este macro serían:
prueba 5prueba elprueba valorl ;siendo VALOR1 un byteprueba byte ptr [si]
28
Desarrollo
Invocaciones inválidas serían:
prueba 1234 ;mayor que Offhprueba dx ¡registro de 16 bitsprueba word ptr [si] ; 16 bits
Es importante el hecho de que un rnacro se define en
el tiempo de ensamblado, no en el de ejecución. Esto
significa que si hay N llamadas al macro, el
correspondiente código aparecerá N veces, solo con las
alteraciones producidas por los parámetros. En los puntos
siguientes hablaremos de los macros como funciones y, para
abreviar la notación, presentaremos los parámetros entre
paréntesis aunque, recalquemos ésto, no es ésa la manera
de llamar al macro.
Con esta explicación pasaremos" a describir algunas
variables y macros, su uso o su función:
- Nivel: variable que indica la profundidad a la que
está el menú actual clentro del árbol de opciones y
subopciones del programa. El menú principal tiene
NIVEL - 0.
Nivell: variable, indica la profundidad de la
p-pción actual. Es igual a NIVEL + 1.
23
Desarrollo
Nivel2: variable, indica la profundidad de la
subopclón actual. Es igual a MIVELI -í- 1.
X: variable, indica la posición de la o PC ion
actual , aquella sobre la que nos encontramos
ubicados, La primera opción de un menú tiene X = 1.
- Y: variable. Indica la posición de la subonción
actual. Si la opción no tiene subopciones , o si la
ventana de subopciones no está habilitada o si el
cursor de subopciones no está sobre ninguna de ellas,
Y vale 0. En ot,ro caso Y vale 1 para la primera
subopción y sucesivamente para las siguientes.
- Buffer: variable de 8 bytes. Es una secuencia de
números que describe la manera corno se llegó al menü
actual. Cada número se va almacenando en medio byte
(uri "nibble"), en orden desde' el menos significativo.
El menú principal, por ejemplo, tiene su nibble menos
significativo igual a 1 y el resto son ceros. Si allí
se eligió la opción 6, el buffer tendría este valor
en su siguiente nibble y así sucesivamente.
30
Desarrollo
- Bufferi: variable de 6 bytes similar a BÜFFER, pero
en la que se ha incluido la opción actual X en el
nibblfe cuyo número está dado por NIVEL1. Los nibbles
más significativos siguen llenándose con ceros.
Burfer2: variable de 8 bytes similar a las
anteriores, con la adición de que incluye la
subopción actual Y en el nibble cuyo número está dado
por NIVEL2. Nótese que si Y - O , BUFFER1 y BÜFFKK2
son iguales.
Tabbuf: la manera cómo el usuario indica al
controlador de flujo la roanera de correr su
aplicación- es creando una tabla, llamada TABBUF. Esta
tabla contiene los buífers que indican cómo llegar a
cada opción del programa. Esos buffers se construyen
igual que lo indicado anteriormente para la variable
SOFFSR.
- Tabinf: es una tabla creada también por el usuario
en la que constan las direcciones de las
explicaciones, menúes y rutinas asociadas a cada
opción, asi COIDO el tipo ' de opción de la que se
trata, codificada de esta "forma: Normal = 1, Reversa
31
desarrollo
- 2 y Rama = 3. Er¿ total se destinan 7 bytes (3
words y i byte) para cada opción. Esta tabla debe
guardar estrictamente el misino orden de TABBUF para
que el programa funcione corno es debido.
- Nclave; variable. Indica la posición de BUFFER en
la tabla TABBOF y, por consiguiente, la posición de
la información asociada a la opción en la tabla
TABINF.
- Nclavel y NclaveE: variables. Indican lo raisrno que
NCLAVE para BDFFER1 y BUFFER2 respectivamente.
- Bmac: bandera que indica que se está corriendo o
probando un rnacro de comandos del programa. Los
macros de comandos serán discutidos más adelante en
detalle.
- Bgiaac: bandera para indicar que se está grabando un
roaero,
- Bver: bandera que indica que se está probando un
raacro.
32
Desarrollo
- Bopc: bandera que sirve para saber si hay que
mostrar o no la ventana de subopciones. 'O la pone en
i y O alternativamente.
- Buida (var, buf): rnacro que busca la ubicación de un
buffer cualquiera BUF en TABBÜF. Entrega su resultado
en una variable cualquiera VAR. Con esta función, por
ejemplo, encontramos NCLAVE en base a BUFFER.
- Movbuf(buf1,buf2): macro que copia un buffer BÜF2
en BÜF1.
- Nunivel(buf,niv,val): macro que coloca el valor VAL
(que debe ser menor que 16 para caber en un nibble)
en el buffer BUF, en el nibble cuyo número lo da NIY.
Sirve, por ejemplo, para construir BUFFER1: copiamos
BUFFER y luego incluirnos X en BOFFER1 con esta
función.
- Explica (TI) : este raacro presenta en la linea 24 la
explicación, asociada al N-ésimo buffer de TABBÜF.
Menuvent(n): macro que dibuja una ventana que
33
Desarrollo
contiene el menú asociado al N-ésimo buffer de
TAEBDF.
- Menulinea(n): macro que pone en la linea 23 el menú
asociado al N-ésimo buffer de TABBUF.
Rutina(n): ordena la ejecución de la rutina
asociada al N-ésimo buffer de TABBUF.
- Retorno: macro que devuelve el control del flujo
una ves que la rutina del usuario ha terminado.
Opción?: es quisa la parte más crítica del
controlador. Eeci-be datos del teclado, determina cuál
fue la opción "(flechas, ENTER, ESC, ~G,-"P, ~K u
otra) y da un valor de salida que indica esa opción.
Como lo veremos más tarde, tiene un papel ruuy
importante en el manejo de los macros de comandos.
- Actuar: permite saltar a la AL-ésima dirección de
una tabla de direcciones. La rutina anterior y ésta
forman el núcleo del controlador.
34
Desarrolle
- Statusf: muestra en e3 extremo derecho de la linea
23 el status del controlador, que puede ser : Normal,
Macros, Grabando macro, Probando inacro o Corriendo
ma ero.
- Statusv; muestra una secuencia de 6 caracteres dada
por la aplicación en el extremo derecho de la línea
24. Este es el único acceso del programa controlado a
la linea 24 mientras se están mostrando los menúes.
Aquí se podría mostrar el status del programa o algún
valor que se estime necesario presentar
simultáneamente con el menú y las explicaciones.
- Válida?: Analiza si una tecla pulsada que no es una
flecha, ni EÍÍTER, ni ESC, ni "O, "? o "K es, en
cambio, una opción válida del menú actual. Si así
ocurre al salir AL-tiene el número de la opción y la
bandera de cero (ZF) está en 1.
Existen muchas otras variables y macros pero son los
descritos anteriormente los que realmente influyen en el
comportamiento de.l programa, cuya descripción ernpeaamos
(ver diagrama de flujo Al en el apéndice A).
35
Desarrollo
Lo primero que se hace es, entre otras cosas,
ar la dirección de ia memoria de videc y limpiar
la pantalla. Enseguida se llama a la rutina inicial del
usuario para Que el realice las tareas que sean necesarias
antes de entrar al laso principal del programa.
Luego se continúa mostrando una pantalla de ayuda
para que el usuario que no está muy familiarizado con el
programa sepa cómo manejar los menúes y las opciones
especiales. Después se colocan valores adecuados a las
variables y buífers. Por ejemplo, se pone NIVEL en O,
todas las banderas de rnacros en cero, la bandera de
subopciones en 0. Se iniciaiisa BUFFSB con un i en el
nilVbie rítenos significativo y. el resto ceros, para que a.1
inicio pasemos, como es obvio, al menú principal. Además,
para que la opción actual al iniciarse el programa sea la
primera del menú principal, se hace X~l y se pone un 1 en
el nibble menos significativo y en el siguiente en
BÜFFEE1.
En este momento entramos al laso principal. En el
programa este punto está marcado como "a_nivel" porque
cada vez que cambiamos ^de nivel debemos venir a este
sitio. Acá debemos llegar ya con el valor - de X definido
36
Desarrollo
(esa será la nueva opción actual), y no haremos más que
poner Y=ü para que el buffer de la subopción actual
coincida forzosamente con el de la opción actual.
Luego pasamos a un punto llamado "b_subnivel" en el
programa. El nombre se debe a que cualquier acción que no
produzca un cambio de nivel, como digitar una flecha,
pedir la pantalla de ayuda, o la ventana de subopciones, o
correr una rutina de tipo "normal", etc., debe regresar a
esta dirección. Acá ya deben llegar X y Y listos.
Cornensamos encontrando la posición de BUFFER en
TABBÜF (en la variable NCLAVE). Hacemos NIVEL1 = NIVEL + i
y construimos BUFFERl copiándolo de BUFFER y añadiéndole
el valor X en el nibble dado por NIVEL1. Procedemos de
manera similar para construir BUFFER2. Encontramos las
posiciones de ambos bufiers y las guardamos en NCLAVE1 y
NCLAVE2. En este momento BÜEFER2 está asociado a la
subopción actual, la que debe ser explicada al usuario del
programa. Si BÜFFERI = BUFFER2, entonces sus números
clave serán iguales y se verá la explicación de la opción
actual. En todo caso se realiza la función
Explica(Nclave2).
37
Desarrolle-
Pesamos al sitio etiquetado como "e_ventaria" en el
lisT-aac. Aquí ¿.e 1^3 el estado de la bandera BOPC para ver
si se debe mesurar o no la ventana de subopciones, si la
opción actual las tiene. Esto se hace con la función
Henuvent(ÑolaveiJ. No se muestra una ventana si las
subopciones no existen. Antes de mostrar la ventana se
preserva las 23 lineas superiores de la pantalla, pues le
pertenecen a la aplicación,
De nuevo estamos en un lugar de paso obligado C"b_s5"
en el programa) en el cual se presenta el menú en la linea
23. Este menú es el asociado a BUFFER, por lo cual se
llama a la función Menulinea(Nclave). Luego se muestra el
status del programa por medio de"Statusf y Statusv.
En al dirección etiquetada como "c__opción" se acepta
desde el teclado la elección del usuario. Con el valor que
Opción? entrega varóos a la función Actuar para saltar a la
rutina respectiva. Hablaremos brevemente sobre cada
posibilidad.
Si el usuario digita "flecha a la izquierda" o
"flecha a la derecha" hay que aumentar o disminuir X,
según al caso. Si se llega a uno de los extremos del menú
33
Desarrollo
hay que pasar al otro directamente. Hace Y = O siempre. No
es permitido el valor X = 0. Luego se salta a b_subnivel.
Si se ha digitado "flecha arriba" o "flecha abajo" se
debe ver primero si BOPC vale 1 (con lo que es posible que
haya una ventana de subopciones). Si ésto no ocurre, se
regresa a pedir desde teclado una nueva opción. Además se
debe chequear si la opción actual tiene o no subopciones.
Solo si se han pasado estos dos controles se entra a una
rutina que aumenta o disminuye Y. Igual que en el caso de
las otras dos fleches, si se llega a uno de los extremos
se debe saltar al otro. Si es permitido el valor Y = O, en
cuyo caso los buffers de la opción y la subopción son
iguales. Al acabar se regresa a b__subnivel.
Si se dígita "O se cambia el estado de la bandera
BOPC,de 1 a O y viceversa. Esto hace que en la parte
correspondiente del flujo se muestre la ventana ds
subopciones de la opción actual. Puesto el valor de la
bandera, se salta a b_subnivel.
Si se digita "P se presenta una pantalla de ayuda
sobre la manera de usar el programa. Luego se espera q.ue
39
Desarrollo
se pulse alguna tecla para restaurar la pantalla del
programa y saltar finalmente a la dirección b_subnivel.
Existen dos formas de ingresar a una rutina. La
primera es pulsar la tecla. EHTER. En este caso empezamos
por incrementar NIVEL e incluir X en BUFFEP (Esto hace
BUFFER = BOFFER1). Si Y era distinto de O antes de entrar,
ese valor pasa a X en el nuevo nivel. Si Y era O, pero la
opción era de tipo "rama", el valor de X será 1. Luego de
colocar estos valores se salta al mismo punto al que se
llega directamente si no se cumplió ninguna de las
condiciones anteriores. Esta dirección tiene la etiqueta
"c_002" en el programa. Pocas lineas después hablaremos de
lo que ocurre en esta dirección, pues"también forma parte
de la otra forma de ingresar a una rutina.
Esta segunda forma es digitar una tecla distinta de
las flechas o ESC o SNTER o "K3 "P o "O. El código ASCII
de la opción digitada es analizado para ver si se trata de
una de las opciones del menú por .la rutina Válida?. Si la
opción no fue correcta se regresa para recibir otra
entrada del teclado. Pero si fue válida el número de
opción regresa en AL y ese valor es ingresado en BUFFER
(previamente se incrementa NIVEL en 1) . Notese que en este
40
Desarrollo
caso EtlFFEF puede no ser igual a BÜFFERi. Para uso
posterior se pone en uno una bandera que indica el paso
por este camino y no por el de la digitación de la T.ecia
ENTES. En este purito está la dirección "c_002" que fue
mencionada hace poco.
En la dirección o_002 se calcula la posición del
nuevo BUFFER formado por medio de la función
Bufcla(Nclave,Buffer). Obtenido NCLAVE se ordena la
ejecución de la rutina asociada a este número clave,
usando la función Rutina(Nclave).
La rutina se corre y al terminar debe devolver el
control por rrjedio del rnacro Retorno. Aquí todavía seguimos
dentro del rnacro Rutina, que por último nos entrega en AL
el tipo de opción que se eligió: 1 para rutinas normales,
2 para rutinas inversas y 3 para rutinas rama. Con el
valor que está en AL se corre el raacro Actuar para cumplir
los pasos respectivos al tipo de opción.
- En la rutinas normales se recuperan las variables
BUFFER . y NIVEL de los respaldos que habían sido
elaborados antes de entrar en la parte en que el
41
Desarrollo
usuario hace su opción. Con los valores previos se
regresa a b_subnivel,
- En las opciones inversas se procede del mismo modo
que para las rutinas normales, pero en lugar de ir a
b_subnivel se salta a "d_supernivel", donde se emerge
al nivel superior. Esta parte del código será
explicada más adelante cuando hablemos sobre la
opción ESC.
- En las opciones rama se ve primero si la forma de
entrar fue por medio de la tecla ERTEB o por una
opción válida del menú. Si esto último fue lo
ocurrido (lo que se puede saber pues se puso una
banderee que indicaba el paso por la parte que atiende
a las opciones válidas del menú) se hace X=I para el
nuevo menú. Recordemos que si lo digitado fue ENTEfí
ya en la parte inicial de la rutina respectiva se
preparó el valor de X. Una ves puesto el valor de X
se salta a la dirección a_nivel.
Otra, de las opciones disponibles es la tecla ESC. Es
•atendida en la dirección d_supernivel, ya mencionada
antes. El nombre se debe a que se encarga se subir un
42
Desarrollo
nivel en los menúes. Esta rutina primero busca en BUFFER
el número de opción que el "padre" tenía en el menú
superior. Luego se introduce un O en el buffer en ves del
úii i roo nibble diferente de O, que representa al inenú del
que se desea salir, se disminuye NIVEL en 1 y se hace X
igual al número de opción del padre en el nuevo menú. El
objetivo de ésto es que al emerger quedemos ubicados sobre
la opción que originó al menú del que salimos.
Al ejecutarse esta parte del código puede darse el
caso de que al disminuir NIVEL en 1 se llegue a obtener
NIVEL = OFFH. Esto significa que estábamos en NIVEL = O y
en este caso ESC o una rutina inversa indica que se desea
abandonar el programa. En este -caso se pide una
confirmación de esa decisión ("Quieres terminar?"). Si la
respuesta es negativa se ponen condiciones similares a las
de iniciación y se salta a a_nivel. Pero si la respuesta
es afirmativa el programa llama a La rutina final de la
aplicación, para que el usuario realice cualquier función
necesaria antes de abandonar el programa. De esta
subrutina se regresa por un simple BETN y de inmediato se
termina el programa.
Desarrolle
Este es el controlador de flujo. Una opción más nos
resta por explicar, pero por ser más compleja que las
otras, requiere, una explicación aparte.
Macros de comandos en el controlador de flujo. La
idea de los macros en este programa aparece porque hay una
rutina central en el programa que se encarga de recibir
las opciones hechas por el usuario. Esta rutina puede
complicarse un poco para que no solo sea capas de leer el
teclado sino que, al detectarse la presencia de la bandera
de macros. pueda leer -cambien de algún buffer presente en
memoria y ejecutar de corrido. Cuando la bandera de
grabación esté "puest-a", la rutina debe guardar las
opciones en un buffer. Cuando la bandera de prueba de
macros esté en 1, debería leer sus opciones del buffer y-
esperar cierta tecla para continuar u otra en especial
para abandonar la prueba.
En el controlador de flujo se ingresa a los macros
con ~K, digitado en el menú principal. Por qué solo desde
ese menú? La razón es la forma sencilla que se ha querido
dar a estos macros, como una simple secuencia de opciones
guardadas en un área de memoria. Así, esta secuencia solo
tiene sentido si su grabación y su ejecución empiezan
44
Desarrollo
desde el misino punto y en las mismas condiciones. Por éso
se elige corno sitio de partida el menú principal y, coirto
se puede notar si se analiza el listado, se hace X = 1 (la
primera opción), Y = O, y se pone la bandera de opciones
en Ü.
El área destinada a rnacros tiene el formato dado en
la tabla 1. El primer espacio es un índice en el que a
cada macro se le destina 8 byces, el primero para
almacenar el número de opciones que tiene el rnacro y los 7
restantes para el nombre del rnacro. Ocho rnacros es el
máximo que se puede tener simultáneamente en memoria
aunque, corno se explicará luego, la aplicación puede hacer
un uso mucho mayor en extensión y en calidad de los
inacros. Desp~üés del Índice está el área de datos de los
macros, en la que se asignan. 64 words a cada uno. Cada
word (2 bytes) contendrá una opción hecha por el usuario
en respuesta a un menú presentado por el controlador de
flujo.
45
Desarrollo
Tabla 1: Área de macros del coritrolador de flujo
Areamac
Offset
018g
5657
64192
960
10881089
Parámetro
# de opciones rnacro 1Nombre macro 1#• de opciones macro 2Nombre rnacro 2
# de opciones macro 8Nombre macro 8
64 words de macro 164 words de macro 2
64 words de macro 8
índice
Datos
# de macro actualContador de posición en macroactual y byte de interfas.
En este momento conviene aclarar que los macros del
controiador solo alroacenan las opciones que son dirigidas
a él, y no los valores, respuestas, etc. ingresados a
rutinas de la aplicación. Sobre ellas no tiene ningún
conocimiento el controiador. Es la propia aplicación la
que deberá manejar esas respuestas.
Al programa que es controlado le es entregado un
grupo de variables declaradas PUBLIC en el controlador,
qué le ayudarán en la propia implementación que cada
programador quiera hacer. Los datos pasados son: AREAMAC,
que es la etiqueta colocada al inicio del área de raacros,
46
Desarrollo
y BMAC, BGMAC y 3VES, que son las banderas de macros.
Aparx.e de la información dada hasta aquí, hay dos byt.es
más de suma importancia para el uso de macros del programa
controlado. Al final del área de datos de los macros está
un byte en que el controlador pone el número de macro que
se está grabando, probando o corriendo. Este da^o puede
ser utilisado por la rutina de sacros de la aplicación
para saber el número de macro actual. El siguiente byte es
el único ifiedio de comunicación entre las rutinas internas
y externas de macros. El controlador usa este byte para
llevar la cuenta de la posición en al que estarnos dentro
del macro, ya sea en grabación o ejecución. Pero si la
rutina externa de macros pone est.e byt-e en OFFH, le indica
a la rutina interna que la aplicación considera imperativo
terminar el macero en ese momento. Es por éso que este byte
es llamado byte de interías. Cada ves que se digit-a "K
este byte se pone en cero, listo para empezar a grabar o
correr macros. No se debe alterar ningún otro valor (como
las banderas) para ordenar al controlador la terminación
del macro.
Otro detalle interesante es este: Hay rutinas,
especialmente de tipo rama, q.ue antes de permitir el paso
al menú del nivel inferior, hacen alguna pregunta o algún
47
Desarrollo
chequeo critico. Si no se pasa este chequeo, no se debería
permitir la prcíundiaación. Pero hasta ahora hemos visto
que el flujo es predefinido y no hemos visto forma alguna
de alterarlo en caso necesario. Esto se puede hacer
cambiando la variable T1PRUT declarada PUBLIC en el
controlador. Esta variable tiene el tipo de la opción que
estarnos corriendo. • Si alteramos este valor, el flujo se
altera. Pero ésto tiene una implicación para los macros.
Habíamos dicho que el conjunto de opciones que conforman
un macro tiene sentido si las condiciones iniciales son
las mismas. Aquí encontrarnos otra condición: un macro
pierde su sentido cuando el flujo es alterado en inedia de
la ejecución. Para evitar problemas, la rutina de macros
del controlador chequea siempre si TIPHUT vuelve con si
mismo valor corr el que ineresó a la rutina del programa
controlado. Si ésto no ocurre se da un mensaje y se ordena
la inmediata terminación de la grabación o ejecución del
macro, porque el macro deja de ser confiable el momento
en que puede haber ambigüedad en el flujo.
Lo anteriormente dicho explica las características de
los macros desde el punto de vista del controlador. La
aplicación externamente puede tener muchas variantes. La
adoptada para el depurador es tener un área externa de
48
Desarrollo
mecroa en la que se guardan las respuestas del usuario a
requerimientos ajenos al controlador. Se destinan 256
bytes a cada rnac.ro. Tanto el área de rnacros interna corno
la externa son grabados en disco al final de la sesión de
trabajo con el depurador, de manera que los macros que
hayan estado definidos no se pierdan. Al inicio de cada
sesión se busca el archivo de macros y se lo lee en las
áreas correspondientes: interna y externa. Si el archivo
no es encontrado, se crea uno.
Otras variantes pueden ser: tener varios archivos de
rnacros (a manera de una librería) que puedan ser leídos en
cualquier roomeirto. Esta opción fue probada en el depurador
pero no result-ó útil pues, ocurriendo en el proceso de
depuración continuas Terminaciones de" programas, los
archivos abiertos durante la depuración de est-os programas
se cerraban también continuamente y sin dar la posibilidad
de salvar la información. Solo los archivos abiertos no en
el nivel del programa depurado (Child Process, según la
convención del DOS) sino en el nivel superior (Paren-t
Prooess) se mantienen abiertos y son, por lo -tan-feo,
útiles. Más sobre ésto se hablará al tratar sobre el
depurador. Una variante más para los macros puede ser
49
Desarrollo
tener un archivo que contenga más macros, pero que los
traiga y los salve en grupos de ocho.
Expliquemos las rutinas de macros internas del
controlador. Cuando digitamos " K en el menú principal
aparece una pantalla en al que se explica con brevedad las
características de los macros y se pide el nombre de un
macro. Si el nombre digitado no existe se ernpiesa la
grabación del nuevo macro, siempre que aún exista espacio
para otro nombre. Si el nombre es preexistente, se
pregunta si se desea probar, correr o borrar el macro, y
se hace lo que la respuesta del usuario indique.
Corno ya se dijo antes, la grabación de un macro no es
más que el almacenamiento de las opciones pulsadas en el
buffer respectivo. Por supuesto se debe revisar
continuamente si no se ha excedido el tamaño máximo del
buffer o si el usuario ha digitado otra ves "K para
terminar el macro.
La prueba y la ejecución son muy parecidas excepto
por el hecho de que al probar un macro se debe digitar la
tecla ENTEK para seguir viendo cómo trabaja el macro. Aqui
la rutina que lee las opciones debe hacerlo de un buffer
• 50
Desarro}lo
previamente grabado, En el caso de la corrida de un macro
ésta no termina hasta la producción de una condición de
error (opción ambigua detectada o byte de interfaz en
OFFH) o el fin natural del macro. En la prueba de macros,
también se puede hacerlo si en vea de ENTER se dígita "K.
La rutina de escape opcional. Esta carácteristica
está contenida en los rnacros Opción? y Válida?. El macro
Opción? envía cualquier tecla que posiblemente pertenezca
a un Tíienú (es decir que no sea una de aquellas con función
predefinida) con el mismo código de salida. El macro
Actuar hace entonces un salto a la rutina que maneja las
posibles opciones válidas del menú. AQUÍ pasamos primero
por el macro Válida? que busca en el formato del menú si
al final de las opciones existe un byte con el valor
OFFK, que indica que existe la opción de escape. Si la
tecla pulsada es parte del menú, sale con el número de la
opción respectiva, y si no lo es, sale con ZF - O que
indica error o con Z51 = 1 y el número de la última opción
si se había habilitado la rutina de escape. La utilidad de
esta rutina es manejar todos los códigos ASCII, normales o
extendidos, que no son parte de un menú ni funciones
predefinidas del controlador. Por ejemplo, si lo que se
está haciendo es un editor de texto, todas las teclas
51
Desarrollo
normales serán manejadas por una misma rutina y solo los
controles establecidos por el propio usuario son manejados
por rutinas diferentes. En el programa de flujo se dio a
la rutina de escape la responsabilidad de manejar las
teclas de función del teclado. Todas las demás teclas que
se dirijan a esta rutina, excepto "F", "f" o ENTER, son
descartadas sin procesar. Y esas tres teclas despliegan en
pantalla un cuadro del uso de las teclas de función. Se
puso esa rutina de escape en todos los menúes.
Flujo del depurador.
El módulo que maneja (por medio del controlador de
flujo) a todas las rutinas del depurador es PRO.ASM. Es
este módulo el que debe contener las tablas indicadas
anteriormente y que se definen en base a las labores que
debe hacer el depurador.
En la tabla 2 presentamos el esquema de menúes y
opciones del depurador. Es un esquema que puede servir de
modelo a quien desee usar el controlador. La información
que el diagrama entrega es la siguiente:
- El número que antecede al nombre de la opción es su
posición dentro del menú.
52
Desarrollo
- Luego está el nombre de la opción en el cual,
escrita con mayúscula, está la letra con la que va a
ser llamada la opción. Anotemos que rio debe ser
necesariamente una letra del nombre, ni siquiera una
letra. Cualquier código ASCII no extendido puede ser
usado corno "tecla clave" para llamar a una opción.
Lo siguiente que vemos es un número entre
paréntesis, que representa el tipo de función,
numerado de la forma que ya hemos indicado en páginas
anteriores.
- Si la opción tiene subopciones (observe que ésto
ocurre siempre" en las rutinas de tipo 3), se escriben
a continuación éstas, con la misma notación indicada
pero recorridas algunos espacios a la derecha para
diferenciarlas del nivel superior. El punto puesto a
la isquierda indica que todas esas rutinas descienden
de la opción bajo la cual están los puntos.
- Finalmente, se observa en algunas opciones, que
siempre son las últimas de su respectivo menú, un
53
Desarrollo
asxerisco antecediendo al nombre. Este asterisco
indica que se trata de la rutina de escape del menú.
Tabla 2: Esquema de opciones del depurador
1: Archivos (3)1; Nombre (i)2: Tamaño (1)3: Lee (2)4: Graba (2)5: ^Funciones (1)
2: Información (1)
3: Depurador (3)1: Paso (1)2: Corre (1)3: ©Jecuta (1)4: Rupturas (3)
1: Crea (1)2: Activa/Desactiva (1)3: Borra (1)4: Muestra (1)5: '"i-Funciones (1)
5: Ins (I)6: Ens (3)
1: Ensambla (1)2: Busca (1)3: ^Funciones (1)
7: Mera (3)1: Llena (1)2: Busca (1)3: Copia (1)4: ^Funciones (1)
8: ^Funciones (1)
4: Termina (2)
5: ^Funciones (1)
Los buffers que aparecen en. el listado son solo una
descripción de cómo llegar a cada opción del programa
54
Desarrollo
expresada en forma de-números de opción. El menú principal
tiene este bufier:
01h,OOh,OOh,OQh,OOh,OQh,OOh,nQh
Y todos los demás buffers tendrán ese 1 ubicado en el
mismo nibble, pues T.QQOS descienden del menú principal.
Por ejemplo el buffer correspondiente a Depurador se
forma a partir del principal incluyendo un 3 en el segundo
nibble:
Slh.QO^OOh.onh.OOhjOOhjOOh.OOh
Y el correspondiente a la opción Iris del menú del
Depurador se forma ponieTido un 5 en el tercer nibble:
3lh, 05h, OOh, OOh, OOh, OQh, OOb, OOh
De esta manera se construye la tabla TABBÜF 'del
depurador, coroo se la ve en el listado del archivo
PRO.ASM. Esta tabla puede construirse en el orden que se
quiera, por ejemplo podrían ir primero todas las opciones
del menú principal, incluso puede hacerse en desorden.
Pero la siguiente tabla, TABINF, se debe construir, como
55
Desarrollo
ya se dijo antes, estrictamente en el mismo orden que
TABBUF. TABIMF es una colección de las direcciones
(offsets dentro de los segmentos de código, para las
rutinas, y datos. para los menúes y explicaciones) de las
informaciones asociadas a cada opción. Además, consta el
tipo de opción.
Por último, este es el formato de un menú:
- Primero, un string con las opciones tal como se
quiere que sean vistas en la linea 23. Las opciones
deben estar separadas al menos por un espacio, y el
string no deberla exceder los 74 bytes, pues los
últimos 6 espacios de la linea se usan para -mostrar
el status del programa.
- Un byte de O para indicar el fin del menú.
.- Una lista de las opciones válidas del menú, sea en
hexadecimal o en forma de códigos ASCII encerrados
entre comillas. Las opciones válidas no deben ser
necesariamente letras, pero si una letra se usa se
debe indicar el código de la letra mayúscula.
56
Desarrollo
Cualquier código ASCII no extendido puede ser una
opei ón val ida.
- Finalmente está la posición para un by^e de OFFH si
se quiere que la última opción sea de escape. Corno
una seguridad se puede poner un byte de O si no se
necesita la rutina de escape para evitar que algún
dato que esté después del menú adopte por asar el
valor de OFFH.
Como ejemplo, el menú principal del depurador es:
"Archivos Información Depurador Termina Funciones',O,
- "AIDTF'.Offh
Con ésto hemos completado nuestra descripción del
ambiente en que se desarrolló el depurador y pasarnos a la
descripción de la 'manera en que funciona.
57
Desarrollo
3 .3 Il^s^rxallo cié Jja£_j£iiruaiojri£LSJ _ rn.6dul.os individuales .. -
Todos los módulos están comentados en los listados
que se incluyen en el apéndice A; sin embargo, a
continuación exponemos las funciones que desempeña cada
módulo, e incluimos diagramas de los flujos principales en
dicho apéndice.
Módulo Flujo. Asm:
Es el gue controla el flujo de es^e programa. Su
trabajo xue ampliamente explicado en páginas previas.
Módulo Pro. Asm:
Este módulo es el encargado de invocar a todas
las rutinas de depuración. En él se encuentran las
tablas usadas por Flujo. Asm. El esquema de las
opciones de este módulo fue definido anteriormente;
de él "hablaremos luego, como el módulo que integra a
los demás.
58
Desarro!lo
Módulo Desens. Asm:
Este es el desensarnblador , capas de convertir
cualquier código de máquina del 8086 en una tira
alianumérica que contenga su mnernotécnico
equivalente. Contiene varios submódulos, siendo
DesensDet el de más alto nivel; lo que hace es llamar
a Desens, y luego reformatea la tira de caracteres
que este último pasa a fin de responder a la
necesidad del inódulo Pro, que la requiere de cierta
forma para poder colocarla en la ventana de código.
Desens es el que realmente genera la tira
alf-anuioerica que representa el mnernotécnico, y
adicionalioente proporciona la-longitud en bytes del
código de máquina desensamblado (para que el
procedimiento'invocante pueda localisar la siguiente
instrucción).
Hay varios otros submódulos utilizados por
Desens cuya función no se explica aquí. Para ver su
detalle, referirse a los diagramas de flujo adjuntos
en el apéndice A.
59
Desarrollo
Módulo Assem. Asrn:
Este es el módulo ensamblador, capas de
convertir cualquier mnemotécnico válido del 8086 en
su código de máquina correspondiente, y además,
proporcionar la longitud de este código en bytes. Su
subrnódulo de más alto nivel es Assem, que invoca
sucesivamente a los dos pasos de compilación.
Estos dos pasos son EnsPasol y EnsPaso2; el
primero genera lo que denominamos un "pseudocódigo",
es decir! una representación codificada del
ronernotécnico que no es el código de máquina;
simplemente, se reduce cada simbolo a un código
numérico. El segundo es el que convierte el
pseudocódigo al código de máquina verdadero.
El pseudocódigo es totalmente arbitrario, y se
elaboró buscando simplemente una forma sencilla de
interpretar una tira de caracteres respetando su
sintaxis. A continuación incluimos la convención
utilizada para cada uno de los diferentes sirnbolos
que puede encontrarse en un mnemotécnico de 8086. La
convención está a nivel de bits (ver tabla 3).
60
Desarrollo
Tabla 3 (Definición del pseudocódigo)
(Las X son No Importa)
Instrucción:
ü 0 0 X X J u L Número
J ~ 1 si la instrucción es JMP o CALLO en otro caso.
U - 1 si la instrucción admite únicamente un parámetro(corno por ejemplo NOT o DEC)
O en otro caso.L = 1 si la instrucción no admite parámetros (porejemplo AAD o CBW)
() en otro caso.Número es el número de la instrucción, arbitrariamentepredefinido.
Registro:
0 0 1 X w Muro
W = 1 si se trata de un registro de 16 bits (no seincluye registros de segmento)
O si se trata de un registro de 8 bits.Nura sori~3 bit.s que representan el número del registro.
Registro de segmento:
0 1 0 X X X Nú m
Num son 2 bits que representan el número del registrode segmento.
• igue. . .
61
Desarrollo
Tabla 3 ... Fin
Memoria:
0 1 1 Mod Mero |x1
S Num W X X X Des pías amiento
Hod son 2 bits que representan el modo dedireccionamiento.Mera son 3 bits que representan la forma de acceso amemoria.5 = 1 si hay un prefijo de redefinición de segmento
O de lo contrario.Nurn es el número del registro de segmento del prefijo.W = 1 si el desplazamiento es de 16 bits (de haberlo)
O si es de 8 bits.
Dato de 8 bits:
1 0 0 X X X X X Dato
Dato de 16 bits:
1 0 1 X X X X X Dato
Fin de pseudocódigo
1 1 1 1 1 1 1 1
En todos los casos X = No Importa. Por ejemplo, la
instrucción
MOV CX.ES: [SI4-BP+1437] :13D
62
Desarrollo
•tendrá el siguiente pseudocódigo en hexadecimal, haciendo O
t-odos los No Importa:
00 88 29 72 48 37 14 AO 3D 01 FF
Los números de las instrucciones están listados en la
siguiente tabla:
Tabla 4: Números de instrucciones
ADDPUSHPOPOSADCSBBANDDAASUBDASXORAAACMPNEARFARPTRBYTEWORDDWORDAÁSINCDECSHORTQWORDNOTNEGMÜLIMÜLDIVIDIVJOJNO
0006070310182027282F303738393A3B3C3D3E3F404850515253545556577071
JNAEJBJCJNBJAEJNCJZJEJNZJHEJNAJBSJNBEJAJSJNSJPEJPJPOJNPJNGE
- JLJNLJGSJNGJLEJHLEJGDBDWTESTXCHG
727272
. 7373737474757575767777787S7A7A7B -7B7C7C7D7D7E7E7F7F80818486
MOVLEANOPCBWCWDCALLWAITPUSHFPOPFSAHFLAHFMOVSBMOVSWCMPSBCMPSWSTOSBSTOSWLODSBLODSWSCASBSCASWRETRETNLESLDSRETFINTINTOIEETROLROHRCL
888D9098999A9B9C9D9E9FA4A5A6A7AAABACADASAF
-C2C2C4C5CAceCE
. CFDODID2
RCRAAMAÁDXLATESCSHLSALSHRSAFLOOPHELOOPNZLOOPSLOOPZLOOPJCXZ 'INOUTJMPLOCKREPNEREPNZREPREPEREPZHLTCMCCLCSTCCLISTICLDSTD
D3D4D5D7DSDCI)CDDDFEOEOElElE2E3E4E6EAEOF2F2F3F3F3'F4F5F8F9FAFBFCFD
63
Desarrollo
líebe notarse que, por conveniencia, se asignaron
pseudocódigos iguales a los códigos cíe. máquina
siempre que fue posible, y cuando no, se "tornaron
números que se podían transformar fácilmente en los
códigos verdaderos.
Los registros tienen los siguientes números binarios
Tabla 5t Húmeros de registro:
Num
000001010Olí100101i 10111
w = 1
ÁXCXDXBXSPBPSIDI
w = 0
ALCLDLBLAHCHDHBH
Los registros de segmento tienen los siguientes
códigos binarios:
Tabla 6: Números de registros de segmento
Num
00011011
Eeg
ESCSSSDS
64
Desarrollo
Los modos de direccionarniento y las formas de
acceso a memoria son los siguient.es en binario:
Tabla 7: Modos de direccionamiento yformas de acceso a memoria
Meto
000001010Olí100101110111
Mod 00
SI-t-BXDI+BXSI-KBPDI-f-BP
SIDI
DesplSBX
01
SI+BX+DespSDI+BX-KDespSSI-rBP-í-DespSDI+BP+DespB
Sl-í-DespSDI-f-Desp8BP+Desi>8BX-i-DespS
10
BX+Sl-f-Despl6DI+BX-rDesplSSI+BP+Despl6DI-KBP-MJesplo
SI+Despl6DI-i-Despl6-BP+Despl6BX+Despl6
Es~tos bits se generan en el pseudocódigo
haciendo un análisis lógico de la expresión entre
corchetes, a fin de determinar los símbolos
existentes en esta expresión. Este análisis es
realizado por el submódulo Encuero de la siguiente
manera:
65
Desarrollo
Tabla 9: Obtención del modo de direccionamiento
FEDCBA
ÜOOOÜ1000010000100001000000101000110001001001010010001010010010100011000010101010110011001011010100001300010100100101000100101100110101001101010010000100000Otro
Mod
00no000100000000010101010101010110101010101010100000XX
Mera
100101111110000001010Olí100101111110000001010Olí100101111110000001010Olí110110XXX
Error
00000Ü000000000000000 -000001
De esta tabla de verdad, mediante reducción de
expresiones booleanas a través de mapas de Karnaugh
se obtuvo las fórmulas lógicas que constan en el
listado del procedimiento que las evalúa. A manera de
ejemplo analizaremos manualmente " la expresión
[bx+si+17]. Veremos que están presentes los registros
67
Pesarrolio
EX, SI y un desplazamiento de 8 bits, por lo que A -
C - E - 1, mientras gue B = D = F = 0. Por tanto, la
entrada en la tabla es 010101, 3 la que corresponden
Mod - O i y Mero = 000.
Módulo Ejecutor. Asín:
Contiene un conjunto de procedimientos de
control de flujo de subprograraas (a fin de
posibilitar la depuración) y de manejo de archivos y
de memoria. A continuación explicamos brevemente los
irías importantes:
El procedimiento TestTrap hace una prueba del
comportamiento de la interrupción 1, que se debe
•oroducir cuando la Trap Fias CT) sea 1. Lo que<
debería ocurrir es que, inmediatamente después de la
instrucción que hiso 1 a T, se ejecute una
instrucción más del código y de inmediato se produzca
la interrupción. Sin embargo, detectamos que en
algunas computadoras esta interrupción se demora dos
instrucciones, y no una, en ocurrir. Por ello, es
necesario detectar corno se va "a comportar la máquina
antes de utilizar esta interrupción.
68
Desarrollo
El procedimiento ExUniq ejecuta una instrucción
del código del programa del usuario. Para ello, carga
ios registros a los valores en que se quedaron tras
la instrucción anterior, pone T en 1, y luego
transfiere el control a dicha instrucción (si
TestTrap detectó que la interrupción demora una
instrucción de más, entonces se ejecuta un NOP antes
de transferir el control). La interrupción 1 está
interceptada, y devuelve el control al
procedimiento.
Hemos detectado otro tipo de comportamiento
anómalo • en ciertas computadoras: algunas
instrucciones involucradas con registros de segmento
parecen ser ignoradas por la interrupción 1, asi que
cuando _ ExUniq se encuentra con una de estas
instrucciones, transfiere el control a ExPaso, que
es un procedimiento del que hablaremos más adelante.
El procedimiento ExHasta ejecuta el código del
usuario desde una dirección inicial hasta otra de
terminación. Para ello", inserta un INT 3 en la
Desarrollo
dirección hasta la que se quiere ejecutar, el cual
devuelve el control.
El procedimiento ExFaso ejecuta desde una
instrucción inicial del código del usuario hasta la
instrucción consecutiva exclusive; es útil para, por
ejemplo, ejecutar una subrutina sin tener que seguir
su detalle. Opera calculando la longitud de la
instrucción de inicio mediante el procedimiento
Desens a fin de encontrar la dirección de la
siguiente instrucción, para, con esta información,
invocar al procedimiento BxNasta.
El procedimiento ExCond ejecuta el código del
usuario hasta encontrar el cumplimiento de una
condición determinada. Para hacer ésto
alternativamente invoca a ExUniq y verifica la
condición; cuando ésto ocurre, toraa nuevamente el
control.
El procedimiento ExTotal ejecuta el código del
usuario hasta encontrar un punto de ruptura. Para
ello, lee de una tabla en que están estos puntos e
inserta un IKT 3 en la dirección de cada uno de
70
Desarrollo
ellos, y luego transfiere el control. La interrupción
está interceptada, y devuelve el control al
procedimiento. Para definir la tabla hay tres
procedimientos'. AddBrkPt, que añade un punto de
rupr.ura a la tabla; BelBrkPt, que borra un elemento
de la tabla, y TogBrkPt, que activa o desactiva un
punto de ruptura.
El procedimiento Exlns ejecuta una instrucción
fuera del código del usuario, aceptando coioo
parámetro de entrada su mnemotécnico. Para hacerlo,
invoca a Asseiu, que genera el código de máquina, y
luego pasa este código a Exüniq3 al que invoca.
El procedimiento FeduceLevel invoca" a la función
EXEC del DOS a fin de ejecutar un subprograiria,
Child.Exe, que simplemente devuelve el control sin
finalizar. De esta forma, conseguimos 'bajar de
nivel', es deci-r, engañar al sistema operativo para
que, si se llega a ejecutar la función EXIT no se
retorne al DOS sino que se siga teniendo el control.
La respuesta del programa a un EXIT es invocar
nuevamente a BeduceLeyel para estar preparado para un
nuevo EXIT. Debe notarse que "EXEC crea un PSP para el
71
Desarrollo
subproceso a ejecutarse, y es este PSP el que
asignarnos al programa cargado mediante LoadExe.
El procedimiento SaveFile graba una porción de
la memoria del usuario como un archivo. Para
determinar el inicio del bloque que debe grabar
examina el nombre del archivo, y da tratamientos
diferentes si se trata de un .EXE, un . COM u otro
cualquiera. Puesto que los archivos .EXE requieren de
una cabecera con información normalmente generada
por el linker. y no hemos desarrollado una rutina
para crear esta cabecera, SaveFile" no puede crear
dicho tipo de archivos; sin embargo, es posible
modificarlos, es decir, traerlos de disco, hacerles
ciertos cambios y grabarlos después, siempre y cuando
no contengan información de relocalisación (es decir
instrucciones tales como MOV AX,@DATA), pues ésta
seria alterada. Nuestra recomendación es no grabar
archivos de extensión . EXE con PRO. En cambio, sí es
posible crear archivos nuevos . COM o de otros tipos,
siempre que se desee que sean una simple imagen de lo
que se tiene en memoria.
72
Desarrollo
El procedimiento LoadExe carga en memoria un
archivo desde disco. dado un nombre colocado en el
PSP que fue creado por ReduceLevel; la lectura se
hace de forma que ese PSP pasa a corresponder al
archivo cargado, si este archivo es un programa .EXE
o .COM. Este procedimiento hace la carga utilizando
la función EXEC en el caso de archives .EXE, a fin de
permitir al DOS usar la información de
relocalisación proporcionada en la cabecera del
archivo, y utilisando las funciones normales de
archivos (3BH, 3SH, 3FH) para los demás casos.
Módulo Memory. Asm:
Contiene tres procedimientos de trabajo sobre
sonas de memoria. El primero, Fill, permite llenar
una sona con un valor de byte determinado. SI
segundo, Search, busca una tira de bytes en un área
determinada. Y el último, Copy, copia un bloque de un
lugar a otro en la memoria.
73
Desarrollo
En este apartado daremos una breve descripción del
programa, viéndolo corno una entidad única e integrada por
los módulos antes descritos (ver diagrama de bloques A. 5).
El programa contiene una rutina inicial (rinic) , un
laso principal y una rutina final (rfinal). En la rutina
inicial, en primer lugar, se verifica la presencia de los
archivos de ventanas requeridos para operar, ESTÍOS
archivos fueron creados utilizando "vent. exe" , que es un
programa que permite definir recuadros en la pantalla con
información fija y con campos que aceptan información
dinámicamente del usuario o de un programa; llamamos
"ventanas" a estos recuadros , y son grabados como
registros en un archivo. Siguiendo la convención
necesaria, nuestro programa invoca a las ventanas que
necesita (mediante un nombre previamente asignado a cada
una) para proporcionar información al usuario. Los
archivos de ventanas y de macros son abiertos; de no
existir un archivo de macros , uno es creado .
Si la búsqueda de los archivos de ventanas es
exitosa, entonces se procede a reducir la memoria que se
74
i-ien-? disponibit, s fin oe dejar espacio para el programa
•i-/1 'jsuaric t que va a depurar.--^ . Esto se debe nacer
Parque el DOS invooe a los prograrosc mediante la función
EXtC. que otorga tod?. 1* memoria libre al subproceso. Asi
pues, una ves reducida ésta a los reque.riirjien~.os de
nuestro programa (13ÜQH párrafos, es decir, 77824 byT.es J ,
el resto puede ser utilizado por el programa del usuario.
I>e inmediata se instala en memoria un servicio para
Ja interrupción 2FH, oíaf» es la 11 amada ' muí t.ipje>:"; esta
inTerrupción recibe come- parameT.ro un número de función en
AH. y están libres todos los números desde 80H hasta FOK.
Nosotros reconocemos como nuestra la función 8OH, y el
servicio responde a esta función restaurando el staci- (que
fue alterado por efecto de la interrupción") y devolviendo
el control al programa) sin ejecutar jamás un IRET. Una
ves instalado el servicio, invocamos a la función EXEC
para correr el programa Child.Exe, que lo único que hace
es invocar a la función 80H de la interrupción rnultiplex.
Puesto que ya está instalado el servicio a esta
interrupción, y no se llega a ejecutar un EXIT, el DOS
"cree" que seguimos ejecutando un subproceso nuestro. El
efecto de ésto es poder transferir temporalmente el
control al programa del usuario sin T,ernor de que éste
75
Desarrollo
ejecute un EXIT, pues si lo hace, el DOS no torna el
control, sino que lo retorna al proceso que invocó al
último EXEC, es decir, nuestro propio programa, que
entonces volverá a ejecutar Child. Exe para nuevamente
bajar de nivel.
Una ves reducido el nivel del proceso al nivel del
proceso hijo, se examina el P5P del proceso invocante (el
PSP original proporcionado por el DOS a nuestro programa)
para encontrar si el usuario ha pasado parámetros. Be ser
asi, se carga el nombre del archivo cuyo nombre fue
proporcionado; si se encuentran más parámetros, éstos son
pasados al PSP del proceso hijo (que se creó cuando se
corrió Child. Exe) . La carga del archivo se hace de forma
que el PS'P del proceso hijo se convierte en el PSP del
programa contenido en dicho archivo. Con ello nos evitamos
el tener que construir un PSP, ya que EXEC puede hacerlo
por nosotros.
Entonces se pasa al ciclo principal, en. que se
interactüa con el usuario, aceptando los comandos que éste
proporcione. Cada ves que se ejecuta cualquier opción se
llama a uno de los módulos (por ejemplo, si el usuario
desea ejecutar una linea de su código, se invocará Exürtiq
76
Desarrollo
o Expaso "tras haber creado los parámetros de entrada que
estas rutinas necesitan) y luego se actualiza la pantalla
mediante la rutina pdebug, que pone en el video cada una
de las ventanas con los últimos cambios. Asi, cada ves que
se actualiza la ventana de código es necesario invocar
varias veces a DesensDet a fin de obtener los
mnemotécnicos desensamblados correspondientes a la parte
del código del usuario que se está analizando. Corno se
dijo antes, si uno de los procesos ExUniq, SxPaso, ExCond.
ExHasta o ExTotal, en que se pasa temporalmente el control
al código del usuario, esT-e código ejecuta un EXIT, el
control se x-oma e inmediatamente se vuelve a bajar de
nivel. Hemos encontrado en ésto una ventaja inexistente
en programas como Bebug o Codeview," y es la posibilidad de
volver a ejecutar un proceso de usuario que terminó sin
necesidad de traerlo nuevamente de disco.
Debe notarse que antes de bajar de nivel se abren los
archivos de ventanas y de macrcs requeridos por el
programa con el bit de herencia (Inheritance bit) en O, de
suerte que los archivos son pasados abiertos al
subproceso; asi, desde el nivel bajo puede seguirse
llamando a las ventanas y ejecutando macros. Por otro
lado, los archivos que el . proceso del usuario
77
.JEMP.L05 TDTORIALES: EXPERIMENTACIÓN Y.RESOLTADOS
4. 1 Una sepilan -típica de 1 aborat.qri o
Esta herramienta está concebida para trabajar en el
Laboratorio de bíicrocomputadores II. En general el trabajo
empezará con el planteamiento de un problema o necesidad.
La persona que desarrolla la solución deberá primero
elaborar un diagrama de bloques sencillo, indicando las
tareas , que deben hacerse. Luego escribirá el código
adecuado para cada bloque. Luego el programa debe
ensamblarse con el utilitario MASM y hacerse ejecutable
con el LIHK. Casi siempre existirán errores de sintaxis
que el MASM indicará. Estos deben corregirse, inclusive
los "Warning" o avisos, pues son potencialmente errores
que impedirán funcionar al programa. SI LINK suele dar un
"Warning" cuando rio se ha definido el área de stack, pero
éso no impide que un programa funcione, excepto en
aplicaciones muy extensas como Pro,Exe. Esta parte del
trabajo debe ser hecha sin otra ayuda que los mensajes del
MASM, hasta salir sin errores.
El trabajo de Pro empiesa entonces, cuando, a pesar
de no haber errores de sintaxis, generalmente un programa
no funciona. Pro ayudará a encontrar los errores, ahora sí
79
Ejemplos Tutoriales
de lógica o flujo o incluso de cálculo, que subsisten en
el código.
Las correcciones consiguienT.es que se hagan en el
programa harán que caáa ves la corrida avance más por buen
camino, quisa hasta encontrar otro error. El usuario puede
verificar el avance en la depuración con Pro, viendo si
los errores anteriores han sido superados y seguir hasta
que todo el programa esté bien.
El método a seguirse, en resumen, es el siguiente:
1.- Descripción del problema.
2.- Diagrama de bloques y solución inicial.
3.- Corrida inicial: resultados y síntomas.
4.- Depuración con Pro y correcciones sobre la
marcha.
5.- Corrección de errores.
6. - Repetición de los pasos hasta funcionamiento
completo.
7.- Solución definitiva.
80
Ejemplos Tutoriales
4.2 E iemolos de de.-purao.ion de programas
En este punto vamos a presentar dos programas y
llegar hasta su funcionamiento completo. Partimos de un
punto en que ya se hayan superado los errores de
ensamblado, pues en esa etapa solo interviene el usuario
en la corrección.
Programa 1:
i.- Problema: Presentar en la pantalla un cronómetro
que muestre una cuenta en segundos, hasta 60. con un error
máximo aceptable de 1 segundo en total. Para sincronizar
relojes, dar' un BEEP al comenzar y al terminar el
programa.
2.- Diagrama de bloques y solución inicial: constan
en el apéndice A. Él nombre del programa es Crono.EXE. El
diagrama es el A. 6.
3.- Corrida inicial: Aparece una larga serie de
símbolos no esperados en la pantalla, una gran cantidad de
BEEP's y demora demasiado tiempo. Se "cuelga" al intentar
detenerlo con Ctrl-Brk por lo que damos un Ctrl-Alt-Del.
81
Ejemplos Tutoriales
4. - Depurador; con Pro: Corremos Pro con la siguiente
orden:
pro crono.exe
Ingresarnos al depurador y empezamos por buscar
nuestra área de datos en la ventana principal de memoria
para tener una mejor visión. Sin embargo buscamos los
bytes que habíamos inicialisado al escribir el programa
(un Odh y 24h seguíaos) y no los encontrarnos. Para ver si
están en alguna parte, entrarnos a la opción de búsqueda en
memoria y elegimos dar la secuencia en hexadeciroal.
Ingresamos luego:
Od
El depurador encuentra la secuencia en el offset 1SF
del segmento de datos, sin embargo en el listado del
programa vemos que la ubicación de los datos se supone en
un área más ba j a.
Entonces' notamos que lo que falta es inicialisar el
valor de DS con el segmento que el DOS le asigne. Esto
82
Ejemplos Tutoríales
explica que al intentar el programa mostrar la secuencia
de caracteres que forma el número, rio encuentre si
terminador (24H o "$"). Además el programa estaba
trabajando sobre un área un tanto delicada: Vemos aue CS
es superior a US con 1DH. Quien conosca más en profundidad
al DOS sabrá que el DS está apuntando al PSP (Program
Segment Prexix) y que las alteraciones que se haga en esa
sona son peligrosas. A ésto se debe que el programa se
colgara luego del Ctrl-Brk.
5.- Corrección: Salimos de Pro y con un editor de
texto añadimos las siguientes lineas justo al inicio del
progra ma:
mov ax,@data
mov ds, ax
para inicialisar el DS. Compilamos nuevamente el programa
y lo corremos.
6. - Continuación de la depuración: Ahora el programa
corre hasta una terminación, pero en la pantalla aparecen
los gráficos correspondientes a los valores más bajos del
83
Ejemplos Tutoríales
código ASCII, además suenan BEEP's continuamente. Para
oué sucede volvernos a Pro:
pro crono.exe
bo primero que observamos es que en el código ya
constan las dos líneas de inicialisación de DS. Por medio
de Fl ingresamos al editor de valores en pantalla y
presionamos TAB hasta llegar a la ventana de memoria.
Allí, con IB flecha - pasamos al campo de segmento y
ponemos el valor con el que DS se inicialisa. De
inmediato vemos ya un área reconocible (por los bytes QDH
y 24H que teníamos inicialisados). Con ESC salimos del
editor y empezamos a correr el programa paso a paso.
Ingresamos a la subrutina "que" debe convertir el valor
hexadecimal del contador en dos bytes en que el primero
tenga las decenas y el segundo las unidades. Seguimos paso
a paso esta subrutina y encontramos que la transformación
ha sido correcta, pero que los valores almacenados 110 son
ASCII. Por ejemplo, si el número que debía mostrarse era
el 21, las decenas tienen el valor 02 y las unidades 01.
Para convertir en ASCII se', debe sumar 30H (el "O" en
ASCII) luego de "la transformación. Por ésto era que se
Ejemplos Tutoriales
veirm los gráficos de los valores más bajos del código
ASCII y s-? escuchaban los BEEP's {07 en ASCII).
Salimos de Pro y volvemos al editor para poner dos
lint-as'•
add decena,3 Oh
add unidad,3 Oh
Compilamos y ordenamos la corrida del programa. Se ve
que lo* problemas de numeración han sido superados, pero
el eroiiómetro es demasiado rápido. Toma aproximadamente 15
segundas en contar hasta 60. Entramos a Pro para calibrar
la velocidad, ubicamos fácilmente en el código el lazo "de
retardo y vemos que se pone el valor de AL en 2. Para
cuadruplicar el retardo, entramos en la opción Ens, opción
Ensambla. Ponemos como dirección de ensamblado la de la
instrucción que querernos alterar (23) y presionarnos ENTER.
Escribimos:
raov al ,8 -<*—' -4—*
Vernos que el cambio consta ya en el código. Salimos
otra vez al depurador y ordenamos la ejecución en tiempo
85
Ejemplos Tutox~iales
real (JJ. Tomamos el tiempo y vemos que el cronómetro está
calibrado de acuerdo a la tolerancia indicada en el
problema.
7.- Solución: Salimos de Pro, y con el editor
corregimos el valor dado a AL y compilamos otra ves. Ahora
la corrida es completamente satisfactoria. El listado
definitivo consta en el apéndice A. El listado del
prograifia no depurado es Cronol.Asrn y el final es
Crono.Asm. El programa Crono.Exe entregado es la versión
depurada.
Programa 2:
1.- Problema: Pedir al usuario que dé el nombre de un
archivo, recibirlo y mostrar sus 128 primeros bytes.
Ho~üa: La solución inicial es una versión sin errores
de sintaxis de .un programa que empezaba a escribir un
compañero nuestro.
2.- Diagrama de bloques y solución inicial* Constan
en el apéndice A. El programa se llama Test.EXE. El
diagrama es el A. 7.
86
Ejemplos Tutori ales
3.- Corrida inicial: í»a el mensaje inicial pero luego
aparecen más caracteres. Escribimos un nombre de archivo
válido, pero el programa termina de inmediato sin mostrar
los primeros byt.es del archivo.
4.- Depuración con Pro: Corrernos Pro con este
comando:
pro test, exe -*—J
Hacemos, tal como en el ejemplo anterior, que la
ventana principal de memoria muestre el segmento con el
que D5 e's inicinusado. Luego con PageDown y PageUp
buscarnos el área en que se encuentra la pregunta al
usuario. Si hace falta ajustar el área para ver mejor el
mensaje, se lo puede hacer escribiendo un offset adecuado
para la ventana.
En este ejemplo vamos a aplicar las capacidades de
Pro para hacer muchas correcciones sobre la marcha, las
mismas que serán anotadas para luego corregirlas de una
sola vea con un editor.
87
Ejemplos Tutoríales
Erapeaamos la ejecución paso a paso. Llegamos hasta
antes de ejecutar la primera INT 21 que es la que muestra
la pregunta y, al analizar las condiciones de entrada a la
interrupción, encontramos que el bufíer no termina como se
indica en el manual de funciones del DOS, ésto es, con el
signe- "$". Esto es lo que provocó que aparecieran más
caracteres que los esperados.Además, aunque ésto no es tan
crítico, se ve que no existen caracteres para provocar el
cambio de línea (CB y LF).
Entonces decidimos poner los caracteres CR, LF y "$"
en ves de las últimas tres letras de la pregunta. Con
ésto, aunque la pregunta no aparecerá completa, al menos
terminará en el sitio correcto, pasando a la siguiente
línea. No ponemos los caracteres después de la pregunta
pues podemos estar alterando otros valores posteriores.
Para hacer ésto entrarnos al editor con Fl y con TAB o
SHIFT TAB llegamos a la* opción de cambios hexadecimales a
la memoria. Con las flechas vamos a la posición que
querernos cambiar y escribirnos:
Od - -1 Oa -*-J 24
88
Ejemplos TutoríaI es
Salimos cor. ESC y hacemos otro paso para que se
:t~ i-i interrupción. Luego de ésto podemos ver la
prt-;-gunx.a en la pantalla del usuario presionando F4. Para
regresar al depurador, presionamos SSC.
Ahora pasamos a la recepción del nombre del archivo,
revisando siempre que las condiciones de entrada a la
interrupción sean correctas. Ejecutamos la INT 21 y se nos
presenta la pantalla del usuario. Escribimos el nombre de
un archivo que sí exista. Esta vez todo funciona bien, por
lo que intentamos abrir el archivo cuyo nombre hemos
recibido. Sin embargo al ejecutar paso a paso vemos que
DX, que debía hacerse apuntar al nombre del archivo, se
hace apuntar al inicio del bufier en que recibimos el
nombre, sin tomar en cuenta que en ese bufier, antes del
nombre, existen dos bytes usados por el DOS en la función
de recepción de un string. Para continuar sin tener que
salir de Pro, presionamos Fl y con las flechas nos
ubicamos sobre DX. Allí alteramos su valor de OOOE a 0010.
Ahora sí DX apunta al nombre. Pero existe otro problema.
En el nombre la función de lectura de teclado del DOS ha
añadido al final un CR que hará que nuestro archivo no sea
encontrado, provocando 'la terminación inmediata. Como
seguirnos en el editor, nos movemos con TAB o SHIFT TAB
89
Ejemplos Tutori&Ií-3
haste ia opción que permite cambios de memorias en
hexaóecimcti. Ñor ubicamos sobre el 01) al final del nombre
y p-sr-ribimos O sobre él. Con ésto, además, aseguramos que
el nombre recibido se ha convertido en un ASCIIZ. Salimos
al depurador y seguirnos paso a paso hasta ejecutar la I NT
21. Vemos que la apertura es exitosa pues CF=0. Además
vemos que en AX hemos recibido el File Handle.
Siguiendo paso a paso, llegamos a la lectura de los
128 bytes, que se hace correctamente. Esto lo podemos
confirmar entrando con Fi al editor y llegando a alguna de
las opciones de memoria con TAB o SHIFT TAB. Allí, con
PageUp o PageDown buscarnos el área en la que leímos y
debemos encontrar allí los datos.
Seguimos con la ejecución paso a paso. El archivo se
cierra ahora sin problemas, y entramos al laso que muestra
los 128 bytes. Podemos seguir paso a paso algunas
iteraciones, pero si ya queremos ver terminada la etapa,
entramos a la opción Corre, en la que indicamos la
dirección en la que querernos parar: 6A. El programa se
ejecuta hasta ese punto. For un instante se ve la pantalla
que el programa depurado elaboró. Si queremos ver la
pantalla en detalle, pasarnos con F4 a la página de
90
Ejemplos TuT-oriales
usuario. Con ESC regresarnos al depurador. Finalmente se
observa la Terminación normal del programa al seguir la
ejecución. En unf pola corrida baje- Pro, el programa ha
jüost-radc muchos errores, al parecer. -LOÓOS.
5.- Corrección: Salimos de Pro y con un edit.or
escribirnos luego de la pregunta los bytes OPK, OAH y 24H
(o "$").
Hacemos que, al abrir el archivo, DX apunte dos bytes
arriba del inicio del buffer, es decir al nombre.
Finalmente escribimos una pequeña rutina que pone un
cero en vez del CR al final del nombre del archivo, con lo
que, de paso, convertimos al nombre en un ASCIIZ.
6.- Continuación de la depuración: El programa es
compilado y enviado a ejecución. La prueba es por completo
satisfactoria.
7.- Solución definitiva: El listado con el programa
tal como quedó finalmente se presenta en el apéndice A.
Testl.Asm es el listado corregido de Test. Asrn. Test. Exe es
la versión del programa que funciona.
91
Ejemplos Tutoríales
tres salidas independientes de las cuales una es dedicada
a realisar una cuenta descendente desde un valor
programable que, al llegar a cero, envía una señal al
controlador de DMA, el cual lee todas las localidades de
memoria y las vuelve a escribir con el mismo valor
(refrescamiento). El tiempo que se ocupa en el
refrescamiento de memoria es "muerto" para el computador.
Por otro lado, los fabricantes de microcompuT-adores
suelen diseñar sus equipos suponiendo las condiciones más
adversas posibles. Así, por ejemplo, supondrán que la
memoria va a tener la volatilidad más alta de las
indicadas por el fabricante en sus hojas de dat-os y, por
lo tantoj habrá que refrescarla muy a menudo. Por éso el
tiempo entre una y otra operación de -refrescamiento de
memoria será relativamente corto. Sin embargo casi nunca
un cMp llega a los límites dados por el fabricante.
En base a esta idea, podernos suponer que nada
ocurrirá en el computador si aumentamos ligeramente el
período de refrescamiento. Esto se refleja en un mayor
porcentaje del tiempo dedicado a procesamiento y, en
consecuencia, en un aumento de velocidad. De igual manera,
93
Ejemplos Tutoriales
si reducimos ese periodo el computador se volverá más
len-c-o.
El limite estará en el punto en que los
refrescamientos sean tari separados que la memoria en
efecto se descargue, provocando que los chequeos de
paridad que periódicamente hace el computador por medio de
un Generador/Verificador de Paridad 74ALS280 fallen. Este
provoca un NMI y un mensaje de "Parity Error" aparece,
caso en el cual no hay más remedio que hacer un BESST.
El tiempo entre refrescamientos es prograrnable, y se
lo fija dando el valor deseado (en microsegundos) al
registro correspondiente del Contador.
Hemos probado esta técnica con Pro, empleando como
muestra dos programas. SI primero es el Crono.Exe,
desarrollado en la segunda parte de este capítulo, y el
segundo fue un simple laso en el que internamente pusimos
dos lasos.
94
Ejemplos Tutoríales
Primero entramos en Pro y, basándonos en el ejemplo
que da Roermnele, ensamblarnos un archivo Qfresh. Coro desde
IQOh, con estas instrucciones (números en bexadecimal):
mov al, 74 ;Seleccionamos Timer 1ont 43 , al ; para contar hacia abajo,
bajo: mov al,15 ;Valor inicial para elOUT. 41, al ; by te menos significativo
alto: mov al,O ;y para el byte másout 4i,al ;significativo,
fin: mov ah,4cint 21
SI valor dado a AL en "bajo" y en "alto" define las
partes menos y más significativa del valor con el que se
inicialisa el contador. Después áe algunas pruebas hemos
visto que aparentemente esos valores son los que tiene
normalmente una de las dos computadoras en que
desarrollarnos esta Tesis, pues no producen cambios de
velocidad en las pruebas. Equivalen a un refrescamiento
cada 21 rnicrosegundos.
Grabamos este archivo en disco con el nombre
Qfresh. Com y el tamaño de 10 (hexadecirnal) .
Definimos un macro que cargue Qfresh. Corrí y nos deje
listos para ensamblar una instrucción en la dirección que
arriba marcamos corno "bajo". Con ésto podemos cambiar
Ejemplos Tutoría les
Luego hicimos otra prueba. Creamos un programa con el
nombre de Veloz.Com. Su listado es éste:
;inicio del laso
;ler laso interior
;2do laso interior
;BEEP
laso:
lasol:
laso£:
fin:
movmovloopmovloopdecjnsmovmovintmovint
al,FFcx,FFFFlasolcx,FFFFlasoSallasoah,2di ,121ah,4C21
Las etiquetas que se ven aquí obviamente no se
escriben en el ensamblador sino que sirven para saber a
dónde debe ser algún salto. Los valores están en
hexadecimal.
Salvarnos el programa con nombre Velos. Com y tamaño
1A. Creamos un macro similar a CRONO con nombre VELOZ.
Probamos el tiempo que toma este macro sin alteraciones y
es de unos 82 segundos. Hacemos las mismas pruebas que
para CRONO y anotamos los resultados.
97
Ejemplos Tutoríales
Tabla 30: Resultados del experimento
Periodo derefrescamiento (us)
0203040815214396
512
(02h)(03h)(04h)(08h) '(Ofh)(15h) , . normal.(30h)(60h)(Iffh)
Tiempo deCrono. Exe
107797365 '6160. . . .585757
ejecución (s )Velos. Exe
1138577686462616060
Un gráfico muestra los resultados en el apéndice A.
Las conclusiones son claras y demuestran la verdad de
las hipótesis, aunque las medidas no han sido exactas,
pues no era el objetivo del ejemplo. Se puede ver que del
valor inicial obtenido no se obtiene una ganancia mayor al
5 % . Sin embargo las diferencias son dramáticas cuando
reducimos el periodo de refrescamiento. La relación
inversa que existe entre el periodo de refrescamiento y el
tiempo total de ejecución es evidente.
El gráfico muestra que, en estado normal, los valores
del periodo de refrescamiento nos ubican en la parte plana
de la curva. Por ello podemos ganar muy poco en velocidad,
pero perder mucho. Este- resultado hace evidente el
criterio que tuvo el fabricante para elegir el periodo.
98
V.
El programa PRO. EXE es una herramienta de depuración
bastante útil, pues presenta una gran cantidad de
información simultáneamente en le pantalla, y actualiza
esta información automáticamente. Se compara muy
favorablemente con otros programas similares existentes en
el mercado, y creemos que es el primer paquete de este
tipo desarrollado en el Ecuador; existen buenas
posibilidades de comercialízalo, con un consecuente
beneficio para la Facultad.
PRO. EXE es un programa muy probado y útil como
herramienta de depuración y de investigación; el apartado
de ejemplos de depuración (4.2) de esta Tesis tiene dos
ejemplos muy claros que muestran su .utilidad para corregir
prograjnas escritos en lenguaje Assembly del 8086.
Sin embargo, hasta el momento de la culminación de
esta Tesis de Grado, no podemos -considerarlo como un
paquete acabado , pues son innumerables las mejoras que
tenemos pensado procurarle, además de corregir algunos
pequeños defectos que heraos detectado y que puedan
seguirse descubriendo; para ello, contamos con el gran
aporte que seria la utilización del paquete en Laboratorio
de íáicrocomputadoras II, pues el uso intensivo del
100
Conclusiones
programa por parte de los estudiantes producirá sin duda
muchas sugerencias.
En la etapa de desarrollo de la Tesis se suscitaron
algunas situaciones y problemas cuya solución son el
aporte de este trabajo. Hablemos de ellas brevemente.
Se encontraron diferencias importantes en la forma
corno el DOS maneja los archivos ejecutables de extensiones
.EXE y .COM: el primero tiene una cabecera de longitud
variable con información de iternes de relocalisación,
valores iniciales de registros y otros; el segundo es una
imagen de cómo queda el programa en la memoria al ser
'cargado, y no tiene ninguna cabecera; por ello, fue
necesario el~ desarrollo de rutinas diferentes de
manipulación de ambos tipos de archivos. Si bien se logró
evitar todos los problemas concernientes a la carga, no
fue posible regenerar los iternes de relocalización en la
cabecera de los programas .EXE; ello será adicionado a.1
programa en el futuro.
Se detectó un comportamiento anómalo no documentado
en algunos inicroprocesadores de la familia del 8085 en
cuanto al número de instrucciones que se retarda la
101
Conclusiones
interrupción 1 en producirse una ves que la bandera de
trampa T se ha hecho 1 (debería ser una sola instrucción,
pero a veces son más). Esto hizo necesario el desarrollo
de una rubina de reconocimiento de- la forma cómo el
microprocesador se comporta, a fin de tomar medidas que
eviten los problemas que la anomalía produciría. Debemos
señalar que en ésto, PRO es superior a otros depuradores
(como DEBOG o Codeview), que eventualraente fallan en
algunas computadoras.
Puesto que la ejecución de un programa de usuario por
porciones implica la intervención de su código
(restaurándolo cada ves que el depurador recupera el
control), no fue posible permitir al usuario seguir el
flujo de programas en ROM (como el BIOS), puesto que no-
pueden ser alterados; sin embargo, otros depuradores (como
DEBUG) sí son capaces de hacer ésto, e ignoramos la forma
en que proceden (corno es obvio, ésto no está documentado).
Sugerimos este asunto como tema de investigación, pues un
resultado concreto en este aspecto implicaría una mejora
importante a nuestro paquete.
PRO.EXE tiene una habilidad que ningún otro depurador
que conozcamos posee, y es el poder conservar la pantalla
102
Conclusiones
del usuario a tal punto que la presencia del depurador es
totalmente transparente a cualquier aplicación de usuario,
incluso aunque maneje directamente la. Video RAM (VRAM).
Conseguirnos ésto manteniendo aquella pantalla siempre
preservada, y restaurándola cada ves que el programa del
usuario o una porción de éste (aunque s<s -orate de una sola
instrucción) toma el control, y sin u^ilisar las
funciones del DOS ni del BIOS, sino directamente la
memoria de video, que tiene un formato muy sencillo ya
explicado anteriormente. Esto evita el problema que se
presenta cuando el programa depurado no trabaja con las
funciones del DOS y del BIGS sino sobre la VRAM. Pero
tiene su inconveniente cxiando el programa puesto a prueba
cambia el modo de video-, pues este parámetro no ha sido
considerado. Esta podría ser una de las mejoras a
incluirse, pero no es imperativa pues será bastante raro
que programas no comerciales usen es^as características.
El módulo ensamblador representó un paso muy
interesante en la elaboración de PRO, pues implicó el
desarrollo de un analizador de sintaxis de innemotécnicos.
La dificultad que implicaba el generar directamente código
de máquina a partir de un mneiuotécñico nos indujo a
trabajar en dos etapas. En la primera chequeamos la
103
Conclusiones
valides de los elementos sintácticos del mnemotécnico y lo
reducimos a una secuencia de bytes que representa a dichos
elementos en forma condensada, y llamarnos a esta secuencia
"pseudocódigo". En la segunda, generamos el código de
máquina a partir del pseudocódigo. Creemos que este módulo
puede ser tomado como ejemplo para futxiras aplicaciones
que requieran de análisis de sintaxis de instrucciones y
de generación de código.
El desarrollo de PKO no se hizo tratándolo como un
solo programa, sino como un conjunto de módulos que se
integraron posteriormente; esta técnica de programación
modular demostró ser eficiente y cómoda, pues inclusive
permite a varias personas el trabajar en un solo proyecto.
Por ello, recomendamos este estilo de programación a
cualquier persona o grupo de personas que planeen
desarrollar un paquete relativamente extenso.
Complementando este criterio, hemos de decir que los
módulos de esta Tesis están ampliamente documentados y
pueden ser utilizados por otras aplicaciones, lo que
significa ahorro de tiempo y esfuerzo. En general, todo
desarrollo de Software debiera ser orientado, no
estrictamente al programa que se desarrolla actualmente,
104
Conclusiones
sino a su integración a cualquier otro. Por otro lado, de
quienes dirigen el desarrollo de Tesis o trabajos que
involucren a la programación, se requiere que destinen un
gran esfuerzo a la planificación de ellos, para lograr un
avance coordinado y no disperso, sin duplicación de
trebejo, y, sobre todo, con conocimiento de causa y
objetivo.
Aunque el paquete está diseñado para fácil manejo y
aprendizaje, debe notarse que el usuario ha de tener- un
conocimiento relativamente bueno del micr©procesador 8086
y de sus técnicas de programación, el modo de acción del
DOS y la arquitectura de las computadoras de la familia de
la IBM PC para obtener el máximo provecho del depurador.
Sugerimos que, en vista de que esta Tesis provee a la
Facultad de un paquete de depuración más adecuado a sus
necesidades que los existentes, se reoriente el contenido
de algunas materias que actualmente se dictan, a fin de
dar mayor importancia a la comunicación de datos entre
inicrocomputadores, campo al que muchos f utui'os
profesionales se van a encontrar ligados y que hasta ahora
no ha sido abordado con suficiente Ímpetu.
105
FHftC.ASH i i íH!it i i ; ír i íí i n i r n n í U t u r t i í l í t i
• uuí fieros usados =f. E! arcnvc ^UJD.ESÍ.
Parámetros Función
;aviiDS•¡cuida
¡explica
jcetnsac¡geiser¡cusrpin¡iluainsoü
;iappritíBsnabsjssr.arr
JEEfiUVSnt
i E QV buí
jnufiível; opción?j penar
pnclave
dir
salta a una os las dir. en una tabUJir.niip.color presenta ventana cor instrucciones
encuentra Í3 posición de un buíísrpone un "cursor" sn í,24
recibe dato del teclaoo ÍBíCB;da el I riel rasero con nosibre sn NQHBUFobtiena uítiso nibble <>0 en BUFFE3guarda una santal laresalta Is cocían actualrecibe siring desde teclado ÍBIOSída una lisia ds los iacrss en el índiceliepia la cantalÍEcursor abajo sr¡ ventana d= subooc,cursor arribacursor a la derechocursor é ls i^cuierda
pnclave auestra senuíPNCLSVEimuestra s=nu sn íorjEs de ventana
pdír,plin}pcol auestra pregunta y ssosrá raspussiaPBÜF1 <— PBUF2pone atributo norsal en x,24pone ?m en PBÜF(PKIV)espera cus ss elija una opciónescribe CAR (005)Eusstra senu strine apuntado por Ai
pvarKjpvary.tíir convierte pos. de pantalla en direcciónrestaura ultisa pantalla selvadspasa control s¡ usuario y lo recibepush a todos¡iJ55Íra tase del proorasaeuestra datos importante del usuariopop a todovs si una opción es de! aenu del usuariosubrutinas o» todos los «sacros
carpnlin,pealar
j posc i rjrssipantsíldruiiric
;2ta ,usv
¡valida?
¡muí ACTUAR mmmmm;Busca el «L-esiao eleaemto de la tabla de direccionesjqus iré después de HÍA&Lfi pora ssltsr a esa dirección.actuar sacro
laca! ctahleoush bx
Fr.Ar.fi:"
f iov o x , o f f s e t subíscali sact03C bx
;Q: owcrd ptr airartistabia:
¡mu» ftttDfi ¡mmmtmi 16/02/39|EscriDE IÍLÍK lineas separadas ppr c=ro= de=tie Din en COLQFi.¡ücupa CDluínss 1 = 7S y ÍES íüas de! centro de laayuda sacro oír, film, coícr
push axpush ESÍSOV
BOV
SOY
calioopoopen da
ch. color
esax
¡mm BUFCLA¡Busca P9UF en TABBUF y pons su ubicación 2n PN'CLAVEbuícis Ha:rc pnclave.pbuí
push si
aov si.oííset pbufcali abeBOV a l , f t bc fay tesov pnclaye,'! ~pOD 5K
ODp 51
CURS itíUlMlltntí 17/02/8?jpone si atributo as ÍXj241 en inverso,curs sacro .x
push BXaov £lj xBOY ah.b^subbcali scupop axenda
¡titttt EXPLICA ííitHlíUtíUÍ¡presenta explicación de opción cuyo I es pficiaveexplica aiacro pnclave
push cuEOS' C
cali asspop exendffl
jumí SETKEY¡Espera hasts recibir un ¿ate oei teclado y lo canda en BETtiDREgsuey sacro
c a l i iscfcPC-v a x . Q e t w o r d
j i i í t í í 5E7M5C míimmíi í t U/02/e?jObiisne N U f j f í f i C ir.uiüero del aacro en eí índ ice /; buscando su nosbrs KGHSUF en SBB indic=,
sacrocal! ecr
;iíiiíi EEnPñ iiUírtiUítítt ÍO/02/S9¡Obtiene de BUFFER eí ultiao nibblc distinto de C, 5n IPBEV.¡Sirve para regresar ícon "i o rutina inversa! 2Ü5 opciar. sus dio origen a cierto aenu.sstxpr ca:rc
cali CCKende
BUARPflHTALLft líttttrtfíicusrda la pantalla sn PftSSL'FGuarpantclls cacro
cali agp
;tiitH ILUHIHAQP;ñe=£lta la opción actual (indicada por U variable Iíiiusinaop sacro
cali sio
INBUFF iifUitutííni 17/02/S9¡Recibe desde el teclado el buííer DIR cuya longitud se indica en¡el priser byie del buííer. En el segundo byte 59 obtendrá E!¡nuaero de bytss recibióos. Solo se aceptan letras o nuaeros,¡Para edición, solo Backspace, Pita si 5= ha llegaco al iiaite.iíibufí sacro dir
push siaov sijoítsei dircali albpop siendis
INDHAC ííiimmiiiíi 1&/02/89jllena U lista USHftC en bass al Índice de iscrosjen ñREAHñC. REcaplsza ías csros por espacios Í20H).indaac sacro
cali sis
erice
¡fcarra U oaníá lUispcni sacro
piish dipush es
BOY
aov&OV
reopopDOD
popendi
exdi2X
siaxexdi
,2001',(:
,072CnOS*
;UUf! HEHA9A í í t i í í iUUÍUíífiuevs cursor abaio =n U ventana de subopciones,
sacroC = l l 055D
5HDE
•.iiítH HENflRR¡Siailar s KENABA.asnarr sacro
cal i as
HENDER;hu°ve cursor tís opción acíiiél a le derecha.
caliends
; t i í l i j HEHiZl? t n í t f t l l í í r i t í;Siíi!ar a HENDER.
sacrocali sai
HENULINEñ ijnuesiró senu (PNCLAVE)aenulirtea sacro pnclave
push exaov c ! ,pnc lavecaí! Bftlpop exends
; i ; i iH MENUVEííT ( t U i l t i t t t i t t¡Muestra ffienuíXCLAVED En íorec de ventano,
sunüav, ftcril ;.'j, líe? face :
eeven o E.
ÍÍOSTfiAñra pregunte apun tada per PD1R y espers respuesta. L?tener esta -forc3; hsnssj5,0.i de recuestas, listé ceestas. En AL sale si misero 09 la respuesta slr s.acrc p Q Í r , o l i n , D c o ¡
sush £scov a h , D i i nQOv d l ¡ O C D l
BOV eoslir , ,ahzcv fflD5:oi,a¡(BOV ax,oHsBt odircali asesOOD 2K
aov a!. anuosende
¡i ltrtt KDVBÜF;Hueve DsllFí a PBÜF2,sovbiií ffiHLrc píiUT2,pb!¡T!
ou=h siDU5h OÍ
fiov si, o f f se t flburificv di,oÍTset pbu;2ca l i ssbDQD dipOp 51
endo
NQCUííB r i T n i í í t t U í U 17/02/89¡pane el atributo de Uj24) en noraal .nocurs aacro s
push axSOY aljX
aov ahjbnnorircali saipop =ssnds
;iíí¡íi NUH1VELjPane PNÜK en el bufíer PSUF En el nivel PKIV.nunivel aacro pbuí,pniv,pnuB
push expush dxf f i O V C l j p ñ Í Y
aov ch,pnu&soy dxjoí í se i pbuícsll afínpop dx
Xe QOG
xq dadX3 CCC
xq'jtpd AQB
Jippoa'xq Aoo
ptíg |¡SD
"tq AQI13 AOB
SD usndsq qsnd
xs qsndjTpsod
g púaXD dadxp dod
U3a fTS3
(qp AOBJTI'JC'p AQ«
x3 jsnd^2 usnd
JQTCM'UTTUd DJI35» niJSSQ
J3g ODSni álAq j3BIJd {30 UOIDÜSJtp 5{ 5p!
j t{ss ¡y "0 jod ooEiunde nu=s sjisan^:
SO 3CC
JSD'JQ AOB
xp usndJ?3 OJ35B1
iJEd ={¡Q [5P JQTDU11
iitntnnntn
-UDU3
JC O J3JJ02 i? COB|351 ¡SO Z=A Uc QJ3s8 [5p U53Í 55 Aí
JrqsjQ r s soi?p =OT u2U5:93;s 35 spuop inc? sa ==B3Díí:
A dv'lv'^y'Ov^BiNr'35^-3^ íuQ5 sauoiDcc SET 'üc::da:33 cjaanu la ¿"íduií y3 s-5s -tiopcc sun aiióip =s ánb sjsas^i
3DJ3
dea
*r
o
e
"-i
u:
a.
w
=1
r-o
<u
ra
ni.—
o .a
ni
u
ui
ui
ro
ni
••-
.-« c
e. <r
(K,:i:
es
i.-:
i— ixi
--
1/1 e
l-sl
iu
ro
III
-(
—
- m
oí
u .a
u
J , .»
t- •rl cz
• -•
>
K .
ni
u
>
.—
••*- O
-.T
ni
iii
'0 ti
.-<
.--t
in
u
ni
—
i~
ui
a
n
•-•
=3
k- •2 -u
•v-4 X =3
lí 1U
• 1-
U
L-1
X
SO
«—
,-.
in.ra
'a
CJ.
••»-
x>
•-«
tn
jetu
.r
a
IM >t
=1 ™ lO,
»<
-o•a
i-ií
S
19
-0
a
mM
ei
-w
„
i C
n)
ru
Ai
1.1 U
« >
raí D
ci
n
-a
-cj
o
n
a
o
o
c.i
O d
a
cj
o
*
oui
ni
m
tn
ni
1/1
til
in
tn
o.
o.
a.
o.
a. ra
,. c
i. a.
a.
in
na
a.
ai
¡rressriüa 6 bytsá apuntados por FAE=:Tíi en;Se use psrs indicar U fas? actual c=Í orstatus* sacro
cali G=*ene. TI
¡luid S'ATüSv i i j i i J imum 1Ó/C2/89¡Presenta o avies apuniaoos por VftLPTR en (73,24);5s usa pars no5trar iaport3r¡t2E Caros de! usuario,statusv sacro
caí: ESV
¡mm TRAERES:?op 5 toco,traereg sacro
aop ==DOp 55
pop 05
pop ciCCD 51
pop bppop dspe-: espop bxpop axende
¡Íí¡i;i VftLIDA?;Si en OPCIÓN? ss dígito una opción distinta de las que¡noríalaente, ACTUAR Randa el ílujo acs para ver si ss una opciónjpuesta por si usuario en el aeriií, Si es asi, AL=nu»Bro de opción.;5i el prifter byte después 05 la ultUa opción del aenu ES FF se¡supone que la ultisa es la "opción 05 sscapE* para todas las{posibilidades que no consten en E! BERU,valida? sacro
cali EV?aov al j f iv?auxentjfl¡
SU3RUT;Este es un sacro qus contiene todas ías subrutinas líaaadas por losjotras sacros de este archivo. Se hizo de esta «añera para evitar el;uso de demasiadas banderas, y que su ausencia no produzca "Phasejerrors* al cosento del ensacblado.subrut sacro
satvaregdec al ¡pongo E! AL-esiffio eíeñento ds laÉQV cl,2 ¡tabla en DÍRACí y CS en DIRACTiZaui el jpira hacer el OHP al regresar,
Sjr:a>. *:ri: 30, !9£"
aay!:
SDC;
ase 5:,D;.*:v bo.OTtseí ci'B¿Er. s:p¡:. =i.á¡fflOV t«,C5!ÍSij
sbcO:
abc3:
DOOEOV
ffiOV
traereqretn
piishpushS30V
cavEUD
GE:EOV
oe:E10V
EQV
DttSilU
inc2QV
EOV
osenuincdec
eovpfisnuDOD
pooretn
salvareofiOV
CÍO
jnejf f lpfflOV
BOV
fiOV
aov0DV
EOV
incEOV
xor
51
U S i E b D l . D X
QE: I í ;DT2J , : 5
dxbxbx,asd i , 23 !til , el ;
t;iavlin.ti:fisvhnE3'/:o;,crai:,ofís5t blancDtcvlinjEsycol ;sayhnspsprsj t jxax,«pap.-x ;ftayliri.saycDl :saylin :el
a^oíísei blanconay l in , f t ayco l ;bxtíx
al ,naaxbuí ;j V j
sbcO |ebcí i
~ J J
abcbuíjSi jibcuoí.ofísBt tabibcbyte,0bs.sbcbufa h j t b x lbxbp,ebcpo=ch jCn
:;entro el testo en pantalla:;linsa ir,i:iai= í23-81inss5Í/2 -1
¡orussrD una linea en blanco.
¡Ahora el resto de lineas. íiPHPñ)!¡da ls dirección dei priaer byte:despU5s del 0.
jlines En blanco al final.
jSusca un buíí=r sn la tabla TABBUF;y entrena el nuaero claveiqus servirá para obtener toda lajinforsacion necesario acerca cié la¡opción representada por el ímííer.jSi el buffer no existe, clsvs=FF.
Aon;
RCZD:
ffiDV
in:S3V
CE;jn:cap
JSP
incffiOV
ccp1 CJ -
acóJSP
KQV
fiüV
irasreoretrr
cl.scroyte(tb:&vt=d;.:xan.cs.'íbp^í&D:2ECCI'-'-.r.S
Hc5 ":I"HL
EOCf:2nU
5n,nfiaxbuTah.ctjcsenuSOLÍ
abcpoSjSIDC!al.Oríhaacsyte.al
ecc:
posoíracvnov bh.ahEOV
addincfflCV
traeregretn
Bi,a3¡51
¡Fons si atributo d?do por AH en;la po=icior¡ ÍAL,24í
6BÍ
salvaregBOV a l j n i n í b u fBUl Ci
¡Busca en TAB1HF la dirección oE Í3jexpHcacion y la pone en linea 23.
addEOV
COY
paenutraereoretn
ax,offset tabiníbx.axax,tbs]24,coleXD
entisalvarsgaov ah,0int Ion40V
traeregTEt
;Uso íuncicn de! BIOS que;que ss puíSE una tecla.
suíicsv. Aprii 30, Í S:
0115 P £3 =
DCD
F;DV
incCfSD
SOV
addeovEQV
3D3
in:(ECV
esdh-Oríhchdh.S
íbusci si =1 ricí.bre en NGMBUF esta!2n ia listó de gacroá y ce =u fiiiffiero;rBÍ'n sn K^AC si ESI oci¡--5. Ei 5=
íBi va nc hay ssoacic, 05 Fr.
noabuísi, 2tii,Dal^8dttdi.B
di
;bytsE Ó y 1 =on o= uso de otro aacro,
;byi5 O e» la lonaitud del sacro,
agn2taon2h
jn=3CCÍ
EDV
EGV
incCip
ffiori!dn.SOnRUBKC.dr:
ch.OfthenDh,8
|5i no: e-a E: re
¡Buscc
EDV
-ÍDV
acd
SíOV
BOV
reos
t í Í , o f Í 5 E t s f E E
dh
al, Ocx,8
tí. cooparo
libre.
fiOV
J E p E(0ii4
BOV nusff iac ,OHhpop SEtraeregrstn
nusvo.
;s5-:ro nuevo sin sitie,
=2Ív£reg¡sov el ¿nivelshr el, ixor chCh
sddeovsovshrshr
=i,Dffssl buíísrsi.cíal, [si]ah.alah, 1ah,Í
;SE divide KIVEL/2; se suai 3 direcciorijinicisl de BUFFER, y se obtiene el asn¡distinto de O sn ESE byte.jEss ES el ultieo nibbleOO sn BüFFER
cas
;1¡ P.OViraeregrstn
al ,sn
:gp:¡caso oantallá a PANBUF,
xorsovffiOV
S3V
aovEOV
£1,51
di,offset panDui
sa vareoÍ3V
di, collar;BOV
«oís: posdir í.23,aiodiraov • si.ttiodirsov di,sipush espop o=
aioI3l! lodswcap al,20hJS BÍ0131
sub si ,2
j:gioH:
usedec
aioló
cap al,20hjíie aioiílodsKcap al,20h
sisielaiol4di.si
inzROY
lodsxBOV ahjdlcap sl,20h
;R°=aÍia ía DCiCiori actual, a=
jtrabajo directo en pantalla,¡busco la )!-eáisa palabra en U¡linea 23 y caubio su atributo.
¡salto espacioE iniciales.
;salto palabras.
;resalto palabra.
Face 1¿
JE SlOl;
tac a; , OJE eicl?
jap f i ló lo[¡la!?; tra?rec
reír;
eic:
Eibl¡
SÍD/I
aib2l
fiib22:
aib31i
salvarse ¡aotsngD string desde te^Iaoc ,AOV
E C V
E9V
arfdposdiraovaovinccur=QstkeyCSL
jnsjapCE;J H E
MÍ
jéCíp
jnbc&pj bcipj bCSG
jbccpjb5UD
nocurscapJ H B
penarjapBOY
incHOY
addincjapnociirscap
c l ,UiJ ¡B2X1CD i de caracterescíi.C jcaniaocrdx.s: ;ount=ro auitihar=Í j2 jbytEE 0 y 1 de uso dei ffiácro! ,24. f f i ib t i i r ;dir2cciori de sni&sr caractsrb S j ü i b d i rfiibx.cñÍÍDX
&ÍM
al,08h iBacfcsDacs?eib2í0ib4al ,0oh ¡Enter?sib22
ai,30h ¡O"?fiib2élj7bn ])'z"ítib2sl,3éh ;=5 un (iusero?fiib3a l j 4 1 h j ' 9 " < a l < " A * ?£Íb2a l j5bh jes una aayuscula?eib3al,61h ¡ 'Z^aK'a*?¡sib2ai .20h ¡es s inuacula, hacer asyusculaBÍÍ1X
ch,cl |Contatíor=aaxÍBt3?eiib3107h jsi, bs2p.sibltsi],al ¡AL al Bu-f íe r=i j apunto prox. dirsccionE s : [ b x 3 j a l ;ñL a pan t a l l abs j2 japunto prox, direcciónch jcontadorüftiblsibxch.O j b u í f E r vacio?
jrscec
J 5 1 , C5BO,
s: íborrc iilticc carácterÉiyre p t r [s i} ,0 ;en gi curísr
;v sn a n t a l l a
QE: znjsp Bife!nocurs aibíÍ5CV 51, tí
byte ptr s=:í £¡0,20(1iñ ¡cotítatJor-í
: f i r d= rutina: bvts íliriCica i c = bvtss r5c
retn
eie:salvareeQusn
oov
e;Cí
;oon= la lista de sacros actual:sn LISHftC. ReeapUza ios 00 con:2E 1 punios) .
d i . o f f s s t lisoa:di .8
ai,20n
el, 7lodsijCBp El , O
aovstosbdscjnzQSC
jnz
trasregretn
8ÍE2difiiel
salvarensov cKnclavei jBusce E! i de subopcianes que tisneaov sljniníbuí ;e! senu de la opción actual dada portul d' ¡HCLftVEi. Si Y supera 555 i, Y=0.add asjofíset tabinííflC £S
inc aspush bxBOV bs.axsov E
prp &;•leda:CSC 2;, O
;ie Kaes;Icdsbinc i\; v
traerser=:r
íalvaregeov ci.nclavei ¡Busca I 2= =ubopc, CE esEOV él.fliníimT :5i ¥=FF, V igusi z 9=5 ?BU! el'30G aSjoHsei tscinrin: 3sin: axC'dsf. D?
POV í¡x,a¡'aov s i r íb^3poc bu1D05D
cap 21.Í1
JOB fiffia!
dsc ycap y.Oííí;JflE Í&32
fltüv y. al
TBÜ1
eov cljnclave jBu=ca 5 de opciones ds isnu actual,»ov sljninfbuí ;Si I supera ese valafj X=i,
;3iefipre V=C.aulacáincincDusr¡BOV
¡SQV
pop
capjnelodsb
elax.ofaxES
bsbx,axsi, Ibbx
= 1,0ilidí
U!
1X1
111
-kJ
cu
.-)
ai
ru
u
ro
ro
ratn
<se
K
>e
at
x
ro•u
ra ja
IT
I IM
a
.
LJ
t_i
inO
. "p
C
l
(2
a
-M
ffiC5 ír
add ax.o^sst tabiníSÜC 2K,C
SOV DS.5ÍÍ
:c;- byte ptrEbxí.v-
JGp f f iC 'V/
fñDV c l j f l C l í í V S
SOY a i i T i i r i i t ü TBill C!
adc as,offset tacinf
5 tno 3.
¡¿lera DLÍSCC 13 Dirección¡aei aEHü £¡ que osrtensce;=sia c^cicr: sn Tft?;fíF,
zncpuihEDVECVOCD
EOV
EDV
OK
el,Odi,x
;5I apunta ai inicio del EBÍIU.¡Voy a contar los byts=- hasta;la opción actual tsí para saber¡colusna inicial de ven Un a,¡Salto 2=pacio=;D2rc los
¡si x-l ya tciioo la colusíií
ds:EOVisc
JE
GEC
Í50V
EOV
SOV
ffiOV
nulcddííiC
incpushffiOV
covaoo
c!Sf tVKÍj í l !
sav4di
lodsbinc c]eso al,20njns sav32lodsbinc elCSp 5l,20h
«v33di
elsavsí,cl
c!ax.offset tabiníaxa*bxbs,ax
bx
;DL; cuantas opc aas deoc saltar.¡Cuanto DVÍES nasta encontrarítiií SSD2CÍO ECL contsdorí.
esacios sntre ociones
juna opc asnos que saltar
¡Terrsino. Ventana eeDisza snjcoluans anterior,
;ñhora busco dirsccior! oe aenti¡asociado a ia opción actual¡sn TñBINF
;B1 apunta a prissr byts
BBV41J! loóseCtSD
GEC
PDV
Eflvflí ! isIÍSC
cr.cjne«¡IV r
jprsivílO: IP:
cap1 U
BGV
JBt
Gsv42¡ lodsbCffD
je
CflD
jneISOV
jcpEsv43í ific
2QV
tieC
Jfflp
iasv5¡ popfitOV
incincBDV
sub60V
EQV
incposdiraovfeDV
oovIBOV
StüSH
3DV
ftOY
xarrspBOY
5Í05K
fflsv50: incttOV
C6D
zl,20n
5 Í
cs. l
ai,2íih
?;,(!6tt'v41CErvíir,,c;tüiV*
chch.iacvcarEffiv41
Efflvcar,chfflov41
al,20hasv42al,0§fiv43a¡-5vlin,clÉffiVD
Cl
ch.C=1feav4ísiil.fefviinal
El
ah,23ah,aleivlinj3h«6v3in!¡ar¡aevcarEftvxI,aitvlin,SBivdirdi,aavdirSE,videQseaaljEBOBÍ
ah,colven
aljlínsupcljSfiVcarch,cbSÍOSH
Sl(E5qS(í
EtvlinbljSEvlinbl,22
¡no :DEC er: cuen:a ics:=EC2:io= inic:aisí.
;VsD cuantis ÍÜ35 y COÍLJEÍ¡Gcuoa i£ VEPtaní¡Les espacios no cuentan
ítsTflina si AL=0
:t de 5üc:sciQri2= del BURL
;Cn; e ae C5r (35 suDoociDriHKVCAf;: (üanao Ch iograoü
¡saltar espacios
¡teraina si AL=0
ir es siiüoíiciQnsá del ssnu
:ctrs suDOpcior¡í de ca^ = 0
jBusco la lin=s inicia!jtie la ventana incluidas¡des líneas de recuadro,
¡servirá después
;dir. de sspuina superior¡izquierda en pantalla
¡dibujar esa esquine¡en color óe ventana
¡dibuja linea superior
¡dibuja e=q. sup. der.
jproxiaa linea
1 linea inferior si SL=22
tu
u<
o
.o
o
u
-i-1
— *
~&•~
i o.
k.si
o
m
id
aja
_
o c:
•*-"
•*-
*•—
. -a
••
-<•-
« za
m
ai
cu
cu
x..
e:
.-t
—
-s
-.
>.
cr
—.
lü
U
Ul
QI
~-
— e
s>
es
-a
—*
>.-<
—a .o
•—-
x
.n
>u
es
ID
¡aa
ts
ru
ui
a
u
<—t
u
•«-« "a
-a
ta
ui
o
t-j
mU
•"
, tí
U
l 'O
a.
tn
>
s-«
a
o
o
••-1
O
. «1
M
a.
>•
o
ou a i-
o o
llTl
&• ua i»
o<r
> m
- C
i•—
a
.a
(u
ni
u
19
—-•
ui
o
m— a
-
ra^—
LS
>—
« IB
m
ui
a m
ia
ni
a
-Q
133
'O
Ci.
O
í
—.
&
-'
ÍBra
. >•
o.
~«
til
O,
>
Ul.
13
B
s?
rucu
-í
<:
m
o
uiiu
cu
rip
jfi
'O
~K>
111
ta
cu
ni
ri
cr
o-
er
n^j
>••-
a ;r
-x
zx
t~
t —
.zi
™
TJ
—
-...-.-
K.I .
- cji o
o.
o-
n —
— -
a
-t
cu
n
<:
-atu
. i-i-
ni
n
—
ui
o
•u
ITJ
ui
¡-o
o i_
iea
.o
ra
.a
i>l
-i-*
i» U
o_
-~
O
Í3
£1
-C
! U
111
>—i
UJ
U•-i-
JC
rO
lU-~
t-
,tt
M
ifi
--
ce
a- a
.m
ci
o
c¡
ra"C
T
U
I_l
US
«S
ül
--•
--^
"oo
u
u
-u
ci
oo
«-
, en
LJ
131
ft3
IH
1So.
iu
>•
3.
o
o
o L
JU
l II)
III
Oa
ai
a M
oí
ia
<c
-o
reí
ID
u
a
o
o r-
- m
c:
ir-
i
fu
u
LJ—
«
>t
-rl
m
ni
&
ni
oíes
.-u
si
ci
—<
o
.—<
oa
m
ea
ni
aCE
U
S ''i
l ta
^
x.i
-nC
) C
l O
ci.
i;>
ci
fc
C3V
. C
L
>
5*-C
3 O
O
C
lC
J
O
O
-Mcu
tu.
oí
o.
o.
nt>
>
ci
Oe»
ts
.,3 o
•a -u
o.
oí
O
ni
—
C--I
•¿r
-*--
r i
a
- n
(3
c=
oIH
.n
es
EX
-
ci.
a
o o
un
a—
• >
™
13
i>J
ca
ui
"u
in
'ti
ui
m 13
-a
rd
-o
ra
u
in
-a
x
tí
a
•<
m
<
—O
. U
l —
D
S>
(U
r*~
O
O
Ora
a
tu
ni
-n-
ai
n
o-
«i
io
-<-
o
ni
w
ru—
d,
rs
ruD
J
(--.
m
"C3
•a
d.
<:
'O
m
m
m
ro
cut—
C
t'
ID
"a
m
tu
o
a
o
O f
u<
--
<
-i
t—
On
n
i rí
i a.
•< "
••
-
•*in
oj
Q
-s
o.
CT
O
- -r
t i-
- i-
-aa
-
ta.
O-
III
lli
m
ur-
l U
I
m
ttJ
TU
cr
cv":
av?I¡
av?l í :
ev?2;BV?2! !
EY?22:
jn:iraer=;rot r.
salvare£DV
iDV
Kl
BCC
IRC
PUS*
1EDV
HlOV
PDD
}fld5hCfiC
jns
EOV
QQV
oysnQU5ÍÍ
sovxoradd
•n*fiOV
copPOD
SDY
jbcap
jaEübSOY
lodsfactpjedecjn:cap
jeBOY
BOY
xorJ ac-orJBD
Í!5V1
„
CÍ , ( lC t£ ;
a3,nin*¡elax.oHsf
sxesBSjBX
5i,£íix3ÍJK
ai,06V?1
el. aldi. alsití*-
üv?aiisl,ah,ahsit=j;byt° ptr
av?ausl ,a w
sial.mopau
EV?2
21, 'Z'
BV?2
a!,20hbljal
a!,blev?Sc!sv?2!sv?auí;Í1
av?22al,ev?au•v?aux.aEh,an(EV?4
al,lftv?4
• 6
3'J
?t
0
is
ai
»
0
xl1
tá í iznt
¡Busca EÍ 12 Eisccion ssts:=n si aer,!: CE; -j
;8I spunta al aenu
al sturta a oriiera QD:ÍD:AL usos sí i a= opcicn==
51 si oriffier oves DESQU&SGE i e5 GOClOflS
es rr, =ntanc55 evacuarias tecles no validaspor !a ultiaa opción.
jdejo HV7AUX1 coso banc=ra
Jas f f i i
¡las nago mayúsculas.
JYEO 51 oción es valida
jno TUS valida, veo si hayjrutina ds escao£;si hay esa rutinaisaioo con rsspiiEstajy IF=I
;no hay esa rutina¡ZF=0
irmmmt tíísc*!::*.A5K mimtuín: t l I U t tí ÍU i
aart ¡sacrc-c:aanoo=
cerrcicr cierr= srcr.ivo ce E2:ro=crsaatr dirruía CTE? a r c h i v o ¿E aceroscrabscr craí-é v c i & r r a srcruvo tís eiac'05
ÍES teciaoc- D c j í r s r de nacrú?cr tíirnoi: sbr» y I E E ic c r s= í er-rivc oe ita:roE
cons O er ís= arsa= os r»a:rr=rtodo D D D toceSÍtJDÜ DLJSh ZDdt:-
ibrccr sübrutinss os ios otr^s Eacro&
CERRHCR iitUíiiiiHtíi !7/04/e?Lisrra e! archivo cuyo handls == HCRBAND,CErrscr sacre
calíende
CREAMDR musitmmt 10/03/99;Cr=s si arcnivo cuvo nosore esta dado por el ftSCUZÍQÜ* eispiers en DIRNQfi, Pone =1 nandle en KCRHftKD,creaecr fiacrc óirnoa
push disov DXjOfíEeí dirncficali rcacpop ¿K
;íiiííí SRñBHCR U t í i i i U í t í t i i 10/03/8?;6rsba en el archivo cuyo handle =5 HCRHñHD los Í038 faytss quej£ffipiei=n sn AREñnftC y contienen E! ifidics y datos CE! sacro aansjadQ=;por FLUJO; y los 2048 bvtes que sapiezan sn MCR8AT y que coaponen;el ar=a de datoE os ios sacros cue E! usuario ha dado en respuesta;= rutinas del prooranic usuario ds FLUJO,}Codigo5 ds error en Ai: Oj todo bien} i, no h=y archivo abierto,grabscr aacro
cali roaen ti e
;ifm¡ GETKEY r t r i t í t U í u r i i 10/03/89jEE la función os teclado elsasntal intervenida para poderíleer un dato del teclado o del burfer d= aacrosj y poder;grabar un dato en SSE bufíer si es necesario. Su salida:e= 6ETHORD que tiene e! código ASCII extendido de un= tecla.;Ei ss sstaba grabando sacro y se tersino el espacio pars si
«púax? usndxq (fsíidX3 usndxp qsnd15 qsndip qsndQQ u=nd
53 tísnoDJjSffl 000^5
oaois
=3 ooasp doddq dodTP dadTS düdxp dadX3 dadxq dadse dea
OJ3S5 OpGlJ
68/SO/Oi i l J J i i í l l í i i J l t QQOIH jjilílí
IDUS
¡íp dadÍU [¡33
}'"XD AOffl
xp ijsna
un 3C 5IÍD '53?iJolüT 5D ^5 £5 alAQ 31^3105:= ¡5 A Icn
1 ¿¿ = ,(3 5:85 '=a..3S3 9p =5 GU QATÍÍ3-; lili SHD s^
'i y ua «GGiasjsixa ^oj-ia =p scóipcn'^^^^ -5 arsucu -a
; -sisiits : -ÍIAIUDJP ÍB ^TJ;= =s e;sji i=33J-:.'0!J *3 !Jt3: JUjStf -r- K?VÍÍ" ^- ->T1-5!Í ?
ie/2G/OI l iü i imi iuM KHIííI
10 J
•; ua -J.;j3iJ2H A jj tía a^Bijaui ñp ai.: 13 suoa ss
:Ui»t¡ SBfifJC" nmíjíniíiii 10/03/39
iteres:Control
cirneüctv. r-.anccsincrd
rcfscr:
rre;!
rae:
real!
rcsí;
dtdtÜH
Gk
CH
dr
5ÍOdC
BOV
ffiOV
mirtodoreir;
510QC
IfiOV
EOV
int(60V
rtoriDretn
siodoctpjnsBDV
jcpEDV
flOV
ftSV
aovffiDV
SOY
ccvintaovBOY
SOY
intaovSOY
ÍDV
int6DV
rtodoBOY
aov
2X5 duciO) ¡datos E5C£jsao= iur proarai&c uáu0,0 ¡Para ver =1 ercnvc es CE csrrr.t¿' :dire:ciGn * 05 ESC re airtuéJC ¡nancic 05 2rcfiivc OE sscro;0 ¡salida es 5r7f'rV0 ¡Daré sacar ccsicc as error,
bXiícrhanfJ ;obtengo el handí= yeh,3=h ¡cierro el archivo21 n
2h,3cn ¡creo archivo fl= sacros.C K . C
¿\T¡
scrnanc.ax
-
acrnand,0 _ jhébia archivo de sacros abierta?roaí :=IF continuo.cicrerr,! ;no saloo con codioo de errorrg£tcontrolj'F'coniroHl/Q'ah,42h j f i jo puntero de R/!í«¡O ;al inicio del archivo.d X j Obx,icrhanda 1,021hex, 1038 ¡escribo prisera partE úsl archiviox.oíiset areasacahj 40h21hex, 2050 ; escribo ssgunds parted X j Q Í f s e t scrclatah,40h2íhacrerr.O
aljiscrerrah,0 '
r—i
Ü'
n>
ni
in
o.
u;
m
UJ
l_ ss
<s
_ra
.o
.o
- 13
M-
O
-o
k.
i—i
-—i
,c:
31
oí o
—
-'•l-
.^
<
.Cl
•o
cr-
.en
-o -c
i in
-o
reí
ai
eu—
-M
^J
»<
>-.>
.-o
.ex
.13
111
t3
Cr
LJ
"i
&
ai
(a
ai-o
Q
is
ro
u
ea
RJ
O
O
O
O
C"
»
CJ
O ra
. a
ni
ID.
n ni
"<=• o
o
j*
n
hJ
cr
m
n—
i =
r —
~
s»ro
m>
O
J —
•i
o
ri
j ro
O =3'
Oí
3<
X
»—
cj
o-*-
» »*
^^T
* "»
-» Lrl
B
I-.J
n _,.
"o-
T-J »^A
O-í
CI-
o-
.1»
D
ItO
K
í
~l
BJ
' 1
~
TI'
•'-
IDR
> ^ 1
=1
-1O
.
'T*
(Jl •-
~u
n"
"c-
fV>
ry
"w CL 1
SI
oí n
—
of^
i -i .
en
-t-
Oii
ui
r^-
=1 O.
n o
":ri:av, *sy 1, l íEí rere
I i i i Ú t i l RU7Ví iT . f i=KumwimmíU ^'.'titís car?
n=?£s: no-;; e:; AL — ' .asen en tí.iovrít c iTssc .EJi r res . longres ioentiíica arciíivc v ares as veníanas3CDal l DCC e ÍOCC
32=dir s,y cakiiU cirsccior. sn ffgiBoria fl= vídsscu=hail push = codovnt nofiorej i iao au=strs o actualiza une van tana
subrutinss de la= otros ffiíc
HEXAS: tmumuwí io/03/e?Ei byte en AL ss convierte en dos bytes ñSCIl en BX,
cali ' rrí=ende
¡muí IDVHT i ju f ímai í i i oe/03/89;Esi= sacro recibe ei noaors del archivo os ventanas er. un ASCI 12 qu=¡inicia sn BIRABC. Acre si archivo, tras todos los grupos onncipaissjal área que eapieza sn D1R3ES y guarda D1HRES y LOH6RES er el indics.;En AX salen códigos de error: 00 todo bisn, 01 -error al abrir arcrávo,¡02 =i se encuentra que no es un archivo de ventanas, yi.03 error por íalts de espacio (LOHGP.E5= 6 grupas para Índice T I de¡grupos principales * 1 grupo pars una tabla de residencia actu=Í T aijoenos 4 grupos para secundarios, a senos que todas Iss ventanas sean¡principales), fíate; Un grupo=25£ bytes.iávnt aacro
push tíipush bxsov düjofíset dirascBOV éi.oííset dirresEDV bljlongrescal! rivpop bxpop di
pop dX
en da:
,„„,, POPALL UUííUMiíUi 10/03/89popall sacro
pop sspop bxpop espop OK
.-•
i=
in
ni
•-"
m
tu• II
Ql
•—i
Ul
III
I—
-O
. 01
(U
E
3
"ti
*-*
-M
Oí
Oí
111
-C>
Ll
>-«
Cr-
cn
-t-1
oí
p
ni
•~~.
- o
in
en
ni
ni
ni
ra
tn
•<-«
u
u
ai
—
^«
ül
^¡a
ni
ni
ai
ui
tit
m
m
c:
ui
ÜJ
ai
ni
"oo
—
< o
•*-
"-D
ni
LJ
«E
" a:
tn
m
in
ui
m
O.
«4
Q
•ra
in
c:
>•:
ni
••
ui
ro
inni
a
(3
LJ íli
•**•
•M'
d.
IXI
SK
wo
o a,
a i_ ü.
^c= i_ ni
c iii 111
IU
Ul
i_ (O
ta ni
rti
-M e:
tu >
<E l_ O a.
«t m Ul
-M in ai
ia BS
5-t
-CE
11J
C
o,
-<
o.
•<:
-e
•<
•<
a,
-tín
r;
i C
UBt
O
E
? a
in
rs
i
—
tu
n
cu
ni
ra
in
=j
a
a
ni
cr
n
o,
to.
-i
oía
' ><
x
x
x
*•>•
x~
lf¡
r-, „
.J
ex
-t
- •>
)-
>
O-
Oí
1O
!-
•
-
-
-£ ..
-
iu
iu
rt
CJ,
-I-
d-
10
IU
EU
ID
nanea;. ",av i. !?B:
rur-f;
pcci-
segvsroírvartisvntcirantnu&orpcoíiifinalinssnnsbyte
rvnt:
rvnti :
rvntlO;
.-ti:BOV
se;pe:retn
e*
BÜSh
E1DV
EUl
=dd63V
BtOV
poppopretn
osdv.dbQh
dbdedbos
pusnallEQV
BOV
sovSDV
addpushpushpopBDV
BOV
addBOV
incsovBGV
fiOV
inclodsbdecJ2
capjneC5Q
riv:as.í-tí:.
í'
CS
al.lcüchcl.clch,0
pddir,a)!es5"
000&A
fi(i0
55gvar.5!íQffV3r,51
di,dirinddi,Edi-f23di, 48a=ds55
dii.2ap,dibp,2Adijbpühsijbxes 93h,es;ídi]di
exrvnt 11ít,¿r,rvulOal,0
;SOi2 bytss por linee
:í- 2 vecs= B! * de cclusna
¡BagosncD donas 9=t3R Us¡cí-fset c= la variable actusi¡tipa: 'h't '5' o 'i1¡dirección de entrada de vsnt, actúa":it de grupos que faltan por trssr;coiuina sEcnia a:iuatssnt°:linea escrita actuslssate:í oe byt= lastrado oel grupa actts^i
¡dirección del índicejultifis ventana valida;voy a buscar E! noabre en las entradas;ds! Índice.
juóico entrada indicada por;DH
¡noabre de 8 faytes;leo ! byts del noübre ds una ventana
¡leo í byte del noibre buscado
jnoebrss iguales?
jnQfflbres diíerentss;iouales?
JffiC
rvrt!0: carj isPCD
SCY
rvnt '1
120V
fflCV
ffiül
atícffiOV
EDV
cspjn=JÍP
rvnt2: cap
rvni26: aovE a YBOYaov
eovfflOV
addBDVODV
rvni2ii cspjeaovpusfiaddHOY
Cip
JE
pushaovfiUl
addiOV
poprvní22; «ov
ffiDV
popincaovsubcap
rvntílrvr,t!0dn.dlrviítlesn u a b y t e , írvntf
3i,dir:rd
tíhdi,axdirent,di
dh.3rvnt2rvnt4dh ,2rvnt20
¡busco er, tacas la= vsntsnaE"¡no, =190,¡53, noitare nc esiste,¡error = 1
j g u a r t l D í ven tana a:tua!
:uDico entrada actual v;DS:DI apunte a ventana actual
¡veo si es F o S,
;5?curtdari5. Reside?
di.íci-íj ¡íio, ubicar ia ventana.byte ptrtdi-:-S3,2 :QDV resicencia a ls ventanasi,d:rintí ;DS¡SI apunta al indic=ah.[5ÍTl2] ¡ubico tabla OE residencisan ;AI tiene el offset oe la taolsal,O jrespecto dsl inicio d=! Índice
bpjss ;DS:BP apunta a la tabiacljÍ5Í-t-153 ;CL = í oruoo que va a s=r dadobSjló ;5 la ventaría actualbyts ptrldiibsl.O ítEraino ventana?rvnt3 ;EÍ.
bpbp,cx
al,Orvnt22si
jnüj ÍBsr valor en tabla
jorupo estabc libre?
¡no, quita reEÍdsncic = U ventana
ansi.axbyte ptrUKSÍjOsi3l,[5Í*63 jven tana actualds¡íbp],al ¡a la tabla de residenciabpel jpreparo proxiao grupo a usarse
c l a h
rvní23:
rvnu:nmt31:
rvntí;
rvnt41i
rvnt42:
JieftOV
£GC
H3V
aovincCDp
J H =
n\v
cae
;9E3V
CDV
AOV
ffiOV
GU=h
fltDV
iniDDp
SGV
CCV
asoSOY
aovpt!5h
fiQV
intpopincctpj(teBOY
ÍOV
eovfiOV
fflDV
aovBOY
aovacvftOV
addposoirfiEV
lod=ncapJ E
StOSí*
jsppushEOV
rvnt23ah , [= ÍT?3St i . fc
c i . ahl31rl5J.cl
bl01.20rvT.tiiD S . i o
d h . í á i T b x ]d h . Orvnt4d i .Oc x . Os i .Oah(42nbxox,[5üI332ihbxdh .LÓl rbü r í ]
dhüC X , 51
cs,,2565h,3írtbxDx.Is iTl3321 hbxfalbls20rvnt31ax, tdi i l23linea, =hcolu6na,£lal .[tii-í-93nuagrp ,a lniiff lbytE,0si jdirindah,[cíir203b p j d i«1,0s i j axcoluina . l inEadi,pddir
a l , lrvnt«
rvnt4 ídibs .oí fvar
i iernnc 2^=i ds r2=id=nte5:==> voy 2 inicio d= ar=a os;s9Eunri3ri25
:YÓ revise cuairo grupos7
;na, volver.
l iso ? d= q rupc! tsrsinC' ';s:." f l C í CX í3í=DTÍ52t tíSBDr
;inicio de arcnivo
¡LSEhtí
:D5 :DX apunta a fauftsr os lectura¡Leo un oruoo del EJÍBCG
;READ
:ya leyc 4 grupos?;no, sigo leyendo.;esq. =up. izo.
¡5 os crupo=
;l ds byts actual
;ñü posición priser grupo
;SI apunta al grupo
¡variable?js i .jno, sosirar carácter.
J!EO uns veriable
rvní43:
rvp.431 :
rvni44s
rvnt5;rvntí:
rvntO:
rvntOÍ :
aovffiOV
DQD
in:Cit
J5
SIOSK
n=xa=:fiOV
5105K
iQGsü
BQV
StOSIí
incEDV
caliCEp
3£adtícasJS
caliCSC
J£
incftOV
C*P
jgeincSOY
ÍOY
posdirÍSOV
SOY
cepj bjapSOY
popal 1sovretnpUáh
sddcspjboecCíp
jn5BOY
jfipBOY
os.segvsra i , [ í ) K ÍDs
ot tvart ipvm, ' f t !
rvntí ^
s l .b l
co lunnatíX,51
rvntOd x , = irvn^Slsi. 2= 1.1rvntsrvnííal,!rvntScolufinaal ,G5:tbpí-14]al jcoluisnarvntí llineaa l jd s i t bpM?}colu ianá ,a lcoluaina, l ineadi • Dooiral 1 05 1 í opT¡ j]a l , linearvntarvntí lnutbyte.O
ax ,nu i sby tE
bpnueby te j2nusbyte,100hrvntOZnuagrpnujsarpjOrvntOÍ5l,l
rvnt03sh,nuflgrp
Ii•
!
¡
i!
j
);'¡,;,
;
;!:
•J
í;;
J
¡l:•
J !
j
i "i¡
r͡
í
5 1
J :
j
i ';
J
jvBntana hExadeciaal?I 3» .
;nc, ventana ascii,
;fti =e conviene en ascii en 9X
isuestro sitad aas signiíicativa.jLeo étrióute siguiente.Susonoo;que Al=í (otra variable) vÍBUBstro la otra sitad,
)Con DX veré si hubo csebio tís grupc,;vs si grupo actual ya rebino.:Ht¡bo caabic de grupo?¡no, SI spunia correcüaeiente,:EI, hago oue SI apuriis bien,
ino la Yentanar'¡ai, salir.:nof seguir,termino ventana?;=i.
jtereiíio liosa?
i no, continuar,:=i, nueva linea.jprUerá colupna.
jteriino ventana?
;no, continuar,
jvaria cantadores y ve si es necesariojeapezar otro grupo. Altera ftX,¡tersino un grupo?¡no,jsij un grupo aenos por aostrarjterisino?;no.
5£Íao con ft!_=l,
j leo un í de grupo
ace
NACPR&.A3*
¡K=;rc rÉrssíirc? Función
u:V-ír Salís = lí AL-»S:JÍC cir . de ur¡= tabis¡-ir . ' jCro tersiris £>¿cro y dé un jsen=aj?jg e i c r t s r ¡9= un A3C1Ijggtcs té K t v , y u - T , t i p ! j !es un bin¡ hsí; o riec;c=t i iRe OUÍT ¡55 un string áe! teclado •íliir.íir, ncs.atr ib " 'oorrá uric íin?ajlcippní borra pantclls¡print S jy ,d3r ,5 Í r ib pone ar tsxio en s an t a l I s:r£=;23 ¡restauré linea 23;salva23 :=alva linsa 23
intercasbia psntaHss ds ususrio y PRGsubrutÍTias de lo» otros EEcros
í l i i i l t ACTUAR r íUínii i iuíi 30/03/5-;l£= =1 AL-esiso sÍ9fflsniD ce U tabla TfiBACT y salís s J a Qireccion;dads cor sse eÍ9E°nío. AL-0 pars °i pnaer eisaento tí» Is taóls.actuar sacro
local tebactpu=-h sifflov 3h,0atíd sx,sxECV sifOríset tabacttídÓ 5Íi5S
fiov ax,cs:[=i3pop si
tabsct!
FiNHACRo íítmmmíí'20/04/e?;Ba un asn5SJE de fin ds sscro y espera un ESC para seguiríifissrrü iscro
cali ríitisende
j i i U í l EETCHftR nnttií-ííiUíl 23/03/39;Les £ 6CASCII un A5CI1 05! teclado o buffer de sacros. En 6CCOD¡salee! siguiente código; O, hay dato valido en 6CASCII. i, ENTES, 2,;TA3. 3, SH!fT TAS. í, ESC, 5} alguna Tunciorj o tecla especial, cuyo¡ASCII extendido sais pn 6CASCII. Pars cus kNTEñ, TA3, SHIFT TAS y;ESC :=an aceptados coao datos noriales, se debe presionar antes FIO.gstcííé' sacro
cali rgchsnda
ti-
o
^
i ti
u
i-
:«!•;
iii
ni
ui
t:
uj
11 ca
--•
cu tu
u
ai
tu
ok»
k.
l_
tU
i—•
II)
o-
- o
m
i_
t: ji
LJ
13
ti-
••-*
k-,.
új
^
"i.£
= ci
ni
- •—
< oí
o
M
c
a_
1.1
«i
m
ai
LJ
ríi
LO
—i
•—«
,-i
LÍ
n
—•
-CJ
CJi
C
J
I\ —
I
•o
•• m
w-
M-
oí—
=i ti
ni
a.
_t;
-*
a>
m
f—
o.
Jl li- li ]I
-i
'•I :j •í •ll '1 ^1 -- — -1 ."1 p.
^1 :i 11
k- L_ t3 ri OJ
ül
U)
uU O
J1
U»"
•!! • n i" ^
u •-4lll ai
.. Cl
k'
•u u c;
=1 u..
<ii
i¿_ k.
r-1
••*
^
|' O kl
.u k- •u
IU tr.
m •H =.1 cu t-i
tu o — < di
k- k. ~i
u o •• •
iíi
a
IU .d u Ul
r— *
•<
- V*
r-i • <u ,ii f* k_ k.
fli
4U
-IZ
L J ni
— .
.Í3
.1
•31
1-
l —
I.L.
V—
*ur
in•*»
-a•
»^a
PÍÜ
t~~ ».
llT
-
III
k. ai
>- >u k- F1I
a.
o "iri ni
m ni
Ul
O u.; a.
m ai
-S Ul
ai
o -M m -a C
£=3
'i-* Ul
tt. LU
LU m c:
t/J
111
re:
t^3
en lU c:
"*i
^^ =3
<.n> ^j
tu id *« ni
O ni
(Jt
ni
ni
^> •n:
a Ul
Cl
*— t o c »-.
o Ul
ai
•-^ if)
•a
ni
ra
ora
111
m
u
-.
k-
ni
i_i
c:
ni
o
—
in
ni
iriin
ci. ii
oí ^-
oí
O
fil
>-
LLl
-O
ai
m
m
az UJ
i— =K
O>
-X
IU m
ai
-a
---i
ui
ai
(U
ai
o
a-
-•
!i"i
_J
Ll
tlJt—
ai
a.
ni
tn
-i
-ra
ai
uJ
i-oui
ai
-a
e
- LU
x
in
—.
c«
a
o
ni
u
u
ni
o. ra
, -o
ia
ra
3=
ao
oa
rt
ic
io
_.
o
o.
a.
na
>B
oí
LJ o,
a.
ai
i tU
•+
"*
ccv
cal ípoc
a l . n u= h a ic«i i fl i. j
LHPPNT niiitvmmU 15/04/89isarrs ¡a pantallaífSDcnt íuacrc
push expu=h dipusn axBDV cu,2000BOY 01,0
flov ax,0720h5ÍQ5W
3X
diex
repDCD
DOEJ
DOE
snds
¡iííiíf PRIK7 líííitttííínU 2B/C3/B9¡EseriDE si issto apuniadc ncr OÍR =n lo pantalla ó partí" deííí.Y) con atributo ATRIE. El testo debe tErcmar con un 0.print ffiacrc x,y,cir,atrib
P05í3ir X,V
aov sijO-fiset dirsor ah-otribcali rprtpop =xpop siends
¡ttítii SftLVA23salva23. sacro
cali rsal23
21/04/9?
¡ííttít SE5T23 r 21/04/G?
cal! rrs=23en da
¡ittttl USRPRO líUUtttHiiit 09/OA/89:!ntsrceaibia las pantallas de usuario y delusrpro ftscro
csll rií=rpen da
íUUI 5BRPRQ Í U Í ¡in
i—
ui
LJ tu 11 O
O
—"
*^
l^
f<Z
t -^
> C
>C
- -
CM
C
--I
-o
.O
Uu
i-
ai
ti
U
l L
t -D
a ni
in
ra
->
•1-
1
O
U 'U
ra
¡U
ITJ.
PtOV
CS0
CfiD
£OV
rcch3!¡ cov
dh.an£h,óSrgch3íaí.,15rocr.fd i , 3
TAE?
Cffipl /ÍC
J Ü p
"BCr:32í i3V
Bi)V
CEC
CfiD
jeCip
JOS
ErDV
iGV
popDDp
r=tn
rccn-j
aí . ibhrgchíal.OdñrgchíEÍ.9rgchírgchlQccod.di
jEKTER
510QE3
cap gdrsset.ljne rgd2sov dhjEbx]EDV Si, O
SOY tbs+13,31
EOY SÍ.2
aov al.'O'rgo'i: aov Esi+bKJjñi
inc siÍÍBC dhjnz rgdl
rgd2: g=tkeySOY gccod,0csp scrsrr,!jne rgd21íinaacrojap rgd2fflOV 3
cap aljOjne rgd4BDV gccodj!csp ah,72je rgd3í
rgd2
¡iniciaüso variablES?;no,
;inici«ii:o buf íer
errar EÍÍ (sacros?
jtecla 2ED2CÍal?
¡ílechs arriba? 4-Ín
•13 ll
•-.
Cl
—U LJ
<-
---o C
Ji
ti
U u
r-o
r--
>i_
-oi C
l
¿i
cu
r>->
en i-t
ra
-El
CT
Y
^1
Oí
C3i
•-^
Kll
a>
—- •
—.
-ra
•-
<
-—
-o
j^
i>(
-o«t
- -a o
ti
1
w
n-
-u-
o
•-<-
— •
-a-
o
-*-
tJ
"1
3
— -C
l "O
«•• 13
LJ
T3
" -C
l U
"O
a<
cu
•— i
131
i»''—
' C
T<
u
ai
•— <
cu
u
ai
,C1
-s
i-
OrO •T •a
— -
ai—
* O
*
-o-£
3
"OC
l-
131
Ic:
m •u-
c-t
- i/i
«i-
^
O >
-'•«
-
-
-^1 .
— 1
oí
ni
LJ
• ri
-^
-I U
e_-
ea
sí «
c;
--1
-'-I
•".
U '1
•r-,
U
•-—
, ffit "-.
U
I1J
>•
CX
Cl. III
e:
o
«i
a
e;
-^-, s .
, u
•—
iO
O
iü
O
í
Cí
t'~J
UI
«1-
-i
—
.1
SI
r— 1
- U
U
LJ
d.
a.
cio
-a a
p.
ni
«i
u
K
ID
ira
ni
«r
-«i-
« -r
a -o
O
O
23 a
ía
«
tn
tati
ni
ra
.
'31313QÍ
ÍOPÓ.J
ai.tq
dif
OB3
dif
I i"difdod
¡ppÓJ
3p
JÍOIÍJSAQ:
¿ ' IP
xpcpoj
xp¡oxp
TS
GüÓJ
XD
50
A05Í
AQ3
ijsnd :cp5j5UC
dai3H21
A.oaAQI :<^pÓJdoddoddodA03
3UI JjQypÓJ
GBf
doddeadan ¡CC^QDJaiaso
«QTiJSAQ!
¡O'lP PE3?
XQ qsndU p ( p AOB
sp dadGBf
31"
=uqaUt
Q5f3 '
auf
3üT :t?C7?3.
31
fav 1. í95=> FUE?? 52
" ú j s í cisr C . , h i J i s ü TJ; rcco ,5 ios Díñanos no los t r ans fo rmo yj & D r:;.-' ; io= dsc.
r,:v
d!.2
a&v = i . íbs j - - . j ¡convierte HSBcal; rc¿03aov c ¡ , 45Eil Oh, el
f iov i s i - i - i J .dnEOV = Í , t b ^ - í - 3 3c= l l rc:&3adc í = : r i j , t í r , ¡HSB t rans í
raes¿: srv ó .ac r^JJ !convi£rio tsbcsll rcá03EDV el.4shl tír.cl10V t = l] .G'h
sov al , [bx^3jcali rcd03add Í5i3 ,üh
rodt: riodor=tn
rgdO: push bspu=h exsoy s l j t D S J jpQns 9H En E! buííer spunt, por BAcísp a l . C b ü M j ;ya no hay espscio?EOV s i , 1
inc byTs p i rEbxf í ] jincrsaento contadorEOV 51.05!
aov bs , ícffip byie p t r t s i J j íJE rgiOr,
rodOh fiov a l , í bxT5Í f2 ] ;rots a la izquierda n-1 VECÍSlov t h « f s i - f í ] í 3 l ¡donde R=Í de datos pedidüs,inc bíeso b l , í = i 3jb rcdOl
radOfi: eov íb - s f=ÍTÍ3 .dh ¡incluyo nuevo dsto,sov a l « O
rodOi; pDp espop bsrain
rgdOl ; psish es ;prsssnto burísr En p a n t a l l a
'Hü "a OQTSJl Aí
-IH O3sngí
qPTP
Oíl!P
¡SQPaj
XQ
surG3D
3UT
AQB
13 ÁQ9
U1BJ
xq tiodAOS :3UC
AQS
: IZO?"
AG3
A09
AOS
usndU13J
aoddod
[5 aji=3ng
OJJOO OJ5ÍTJQ!
0';cj;X2!
S3f
aq1
X3f
£'ÍO'
Pp
TPSD
TPTsÍ5T5
¿33
AG3
ppsT no
Aul
022
PP3
AG3
AG5!
TP j'Jtaszis
1 TO íi-j
'U3 AÚ3
'da ACJ(TP AGÍ
'p JTp=CC
>—• •
m
u
E*
utro
o
'_
i13
F>
*
-•o
u a
<
< n
o
u
u
o
o<
ru
TI
<
-e
[1.
Cl.
ira
-tn
n n
n -i
n —i
n o-
0- '0
•i-
vy
a-
n
*i
ni
0,1
d-
LU 'd
-i -i
un
<r
aO
J
t-*
ti o• o Í.
-J
n o
-i • o r-3
n a
cr
n
-—
r-i
a.
ra»
cu ni
n c= Ul
nO
IP
••: •
<
in in
u>
mi-
. \
<"•
D
.I
DI
r
o
i n
O
r' r-C
L
III
l'l
ui
- -
O
M
O.
•-
a-
-u-
o-
*-
e^j
i-t-
ui
n
oí
" 3
x
d-
o
ea.
o
rti
o
ci
ID
on-
-o
-o ta
-í
O
O
r-<"
Oo
m
-Q
s?
o
. P
' 53
si
a.
o
o
a
o
ni
ti.
o
o
rn•<
<
n
i •<
n
ci.
«e
-í
(i
a.
in
ri
m
O
—
~-U
l D
33T ^
n
n
ci.
iu n.
ri
-í
t[I
ITI
-T
>o
—i
r-J
iii
o.
-Tira
ri
>o
•-•
•• ;T
I- —
na
13.
III
t.»
|~
J
-.J
(-»
- a
- a.
C-
HI
?*'
>-•
•I-
•!•
Ul
I-
ni
ni
tu
--<
J*
ÍClil
I/)
1.1
A
l -C
J
ui
oO
-J
3D
I -•
-
tii iz
i ni
13
in "o
u
u
>i
i -1
3 ui
ni
1/1
-d
U
11
1
— .
'-
t*
IT-I
-ci
i- -a
ca
a
a
nja.
ex.
ci.
L.o
o
o
rj_
>
>
>
ct
LU
o
o
o
ai,
fea
cu
<a
d,
ui
ni
:>
o.
oí >
=1
¡3
O
«
C
OO
. C
l.
tíl
u
.i~!
Id
•—•
-U
-oOí
10
•ci
-O
fu
ci
LJ
<n,
LJ
O
ÍT.
10
LJ
e:
- i-
zi
ni
ui
se
LJ o
.i-i
&
LJ)
iu
Ul
ai
ai
ai
ru
nj
ni
m
*aI™
L
_ l_
L
.üi
tu
ai
ai
•-
'~a
o
-o -a
ai
c
•=
c:
r:
>-n]
m
ni
ni
-*
H.C
i .o
ci
.o
c:
rtl
ni
roo
a.
tv>
-.
in
10
in
-o
>o
«TÍ
ai
ca
co
en
-a
.a
.Cl
-u 'o
T
Jx
s-
-a
ja
ai
ni
(u
C3,
ni
ni
tu
ai
aiM
•-
* r-i
c:
c:
r=
ÍM
" 3
3
M
>•-
O
íni
a
a
rui-
ni
o
n.
Q.
l_l
r-
O
-_
IO
-Oci
. a.
LJ
o
ra
un
ui
•-•-
O
=i
£3 .a
U
LJ
tj
O
(J
LT1 ID
UJ •«
ü.
m a•ci
o.
i -.
u
s
ni
o-
ui
CJ -a
ni
•.-*
Z
3
Ok.
>-
. k.
iu U
l.
-i
i—
a-
LU
>
— ••
>n
m.»
-,-(
rn
ui
ai
k.
oí
ni
ZJ
•>>! iii
ro
ci, a.
.—i
">
LJ
Cl
"O
' IZI
• r*
•,">
-c-
-^
ivj
c%j
*z>
^,
L,-f
<z>
c> -^
O<^
0. C
i•
.í
fll
-9• -
f ^^ ?
i u.
Ul
r-C
lO 1»
.
e"
1 k.
L-
Cl
C.)
CJ k. I.J UJ
H
O-
d,
^J
=1
ifi
-ci
LU
1
Cil
r~>
H
b iiu
i:
o u
-O
r_i
a
•"> tn
i,
a-Ll
Ul
<
<C
l a• .
a
u
u
• -<
k.
(II
ifl
ni
m
u
a
«5
üi
•o
ni
ai
rü o.
111 *>--
•*-
-o o
ni -ta Til
U •*H
•a K:
• •-•
CS m T
Zl
lll ai k. ru 3
ni "Cl o u_ ni c:
irit
ería
celo
ngitu
dco
ntad
or
.!-• Ul
Itl O LJ ia tí
ai k, .0 ai a c:
u o.
-Z3 e: ni e U'l
ÜJ
TZ
l
Q Cl
12 P ÍLI
•a m ra.
a.4
-J—
1
a u LJ m ni -a LJ
ITl
.Cl
oí L-
cj
-a
ra
, *n
r
ra
ei.
k, .e
u
ti
1C
LJ
-o
ci
xa
-o
iri
ni
m ri
-oca
o
ct.
i_
i ^-
t«
te
&
13 «
•CJ
"Ip
"C
J 'L
J
-d
rn
LJ
L.
IZ,
CJi
O
. UJ
•o
*o t3
-O
ia
-c l_
U
L
J
LJ
U
LJ
LJ
na
ni
n)
n1ni
o
IH
«i
tx
e*u
iü
rn
i_
i e
K
c:
Fas; ti
ccrruaceraisa:sjtcace=:::r
inssac
Hs»acpcbaa:coívsncciliinCCÍBSS
co!a:tcolla:?
niníbuílonolifiílederíleizqílearrusaba
crctrloctrlpctrlictrlfcesqsilinsupesqsd
linlatssqiiesqidonnorebnsubbbninvaaxasc
iictcbnr
c:dbri l-
cbd:cbdest¿D
dedbdbtíbdbdDtíotíc
,CDÜc
estrnestrn
eauEGU
equeoiiequSGU
5DU
equsquBOU
equEQU
equeauequequEQU
equequEQU
equ
*rr£±j : -¿ .'5 te:. á. ' .«'rBarri este «c»-c • .5. ' ís íT I . í )2. t5 ' 1 l
"iricio oruEL¿ OP r:5:ri-. 5?Qü;r: tr.TEF.. Tgroiner! '•;•.•;'inicio CQTIOÓ CE c,ó:rG. fresionf uri3 IE:Í£/.-"Fin d=Í bufie* v íin oe! sacre, -rssicna EsC. ' .C-33 tí'jp í20h)J-hf tCR05." ,0E se Q'jsden usar ñásta 3 aatrns ag ¿í *
"opciones caí ico.' ,0* Ingresa desas aeml crinciDal con AK.''.01 EscriD= ei nofr!br'E es1, enero. Tsrfiína con ENTEf;.t'.(1
' Si e= nueve, defínalo, " .018 si es viejo io cusfles c^otjr, ccrrsr c narrar.*,í'
v £si£ ss el íntíícs actcs! tic siseros/. v6 dúo (2Qh;64 dúo !20fí¡,&*Probar...P Correr.., C Borrar.. .Bp, 0,3, 'PCP*bnnont ¡atributos: color de ventanabnnont jcolor d= Hnssbnnoris jcolcr de explicaciónensebe ¡coior de suoopcisn actualbnnv iccíor OE cocicr. actual
ríniciííBar.ríinalsnsarnaaxbuíjsíis
7 - jiníoraaciones asociadas 0 bufíerlóO :30í2 tincluvEntio atrioutos)77 j teclas oulsatías: —T =
728013!5U0
HÜdah ;codÍQos pars dibujo de cuadre
<MhObíhObíhOcOhOd9h7 ¡video noraal (B/tí)0?h ¡subrayado intenso •7Síi jinvsrsíí64 ¡sacros de 64 Hord5 saxiio
inclutís TBS
flujo proc near
¡sjorutinas ss -¡aero; ce! MABíl,
.Sdata ¡:ricia;izc 15 i' - -
acvPCV
BOY
csp
JÉsed
vidadflr!aov
\ EOV
SOY
EOV
cidXQr
TSDfiOv
i_í: pcr.ár
QSC
jn:sovaovcali
es.axax.es-.Ce3h]
«!3b4?0h
vid=tíírds.BOOh
vidBossgjOkes.dxax,072í'n
es. 20&:
oí. diEIDSts
el ,25Oa tiLl
ijíaseptrjOrrvalptr,QT-5rinic
;2Cm ~ * ", 07ñ = VÍQ30 norsai
íDorro pariLtí l la
;=5cribo 25 LF para poner¡cursor al íir, de patítalU
rrSEL inoreíancc¡rutina inieisl d? usuario,
guarpanta l la ;¡au5Stro insiruccioíiEslisppntavuds insprDg.E.collsctqstfesyrsstpantalla
niv-1.0 jinicialiio var iables qusbuf íe r , ! ;sín=j2fi í lu jo del proarsüa,
tsov bopc f O
GOV bver,C' ¡no varit icarEOV bgsBC.O :r|Q 9ró'D5r ¡sacros,EDV x , l jopcion actual
ajiivsl:soy y, O ¡subopcion actual
b_suQnivel!buida nclavs.b.TÍKr ^Variables del aenu actualísovbuf rsspbjT.ruftBr
KOV al,nivelÍSDV re=prave..alBOVCUÍ butrE'-í . j i íTTerEQV al,nivsiBDV nivelljc". jVarisbles OE opción actualinc nivel 3
ta-
E?
n n
i-t-
•ia
o-
-io
o -o
a
n n
" | I
—
O
O
»—
SI
OJ
o.
o.
a.
-i-.
-*.
ni
in
in
uiru
rn
ro
ru
a
o
o
o
in
in
niiti
m
m
O
O
O
Ul
111
Ul
a a r:
O
.—
1..
i n
i- -3-
\
•e»
ni
el
•-*-
ni
ui
-i-1
ul
-i->
3 oí
c:
1/1
u
ul
>-.
rj
>-
je
K
.ra
u
L_
Ul
—
ai
ai
ai
—
a.
u
u M
o LJ
ua.
a-
OI o -
u .a
í-~
a
c:
a
a
—
c-í
ÍEBOf i í
evuds insproz,B,eolia".cs t reyrestsanialls:CD b_5uonivel
EDV csniccr.Oauarpant=ÍlaÍ-QV ss.OTÍsst bienco
CÍO
¡Rutinas 6~ sacros.¡resal s íjyts d= interíacs,
snivei actual e
aov ax,offset noca:
c oty¡
aetkey¿IB
ffiOV
• DV
ECV
esv
misheossoyincftavrepSOV
40Y
repaovfiDV
SOY
rsppopiridiase1 eppntayudaBOV
ptenuaovstatusíinbufífflOV
incaovcapjnsEOV
statusí
c_ok=
s.l íloá (aacros ss deben iniciary, 6 :d5SQ2 el eisac punto d= oartidiconc.üss.C ¡borrar srsa de noibre os sacro
ds=5
di.o-iíset nDebij-fdiCK.9
stosbcx,53Xfiac jborro buHsr Q£ Raeros.dijoHást burísacstoswcontsac.Oex, 7 ¡borro nonbrs actual.di, offset rioibaacstosb
¡prepara un Índice de sacros.
irisase, Sjtcllact j instrucciones de sacros.ax. offset Escrnft23,collactíassptr,QfTBet fsac
¡EUEstra Í555 dsl prooraaa.íio&buí ;rscibe un nofibre.sijoítsst nofibuísi2lj[SÍ3
al, (I ¡se dio nocbre?c_oH01 ¡si.íaseptrjOTÍset inora ;no, salir.
XS'1
'OJ35Í JSaOJQ B
3ESTUT
'3=31 JSJ1SOSÍ qtJJCj
'a_132<fl JBqGjdí 35
•ofau
'UQnsasjti ap EJapusqí
7'IS
;5}}o-ts
ADZ
AQffl
AO«AGS(Jod
P
sa
sa qsíio
]~D daf?3G AQV
AGÍ)
1^555
AQ5
HU55Q
AGÍ)
ap
qns :£H° -
AOÍdcdaaJAQVAQUÍ
AQffl
dea=o usno53 qsnc
4.5^1515
«G'J
'OASP.Ü OJ3S3 JSQ3JC 'GÜ! AS3 :?'13 3
¿onói+ae
cu:30JOU 13 * * n • v D A r ".r* -J ft - ¡\<J J
I'lO 2 cu'
3? jjp.ü £y3
jSiiuaaó ¡io"cía": -TüC
re*150 v
r.úv
l"\C
!5DV
íiDv
iticcovr¡c-vr=p
C-QVS*si.ofai. núCi tCr •
si , byi ano E51
di, oíL'¿ ,1
sovsb
í tEv arEEí'9í.3:
ts Qtrisi]ac,al
Í59t TiCEuMi
pop esreírGOV áü-ofíset pierascossiiu 23,coliactccv -faseptriOÍTset -fcorr5Í£Íl!S:
"EÍK6Vc=Il if i imacEOV
'.ablenao datoe ds sacro actual,
;corr=r sacro.
jtianoeras par= ccrrsr sacroE2V biatíZ. 1
: ÍQV Tfiora
eostrarsí.l
jr\SQV
puáhpu=hDDD
acvauladdSOY
KOV
Korrepsovaov
c_okDai;,B5 E-j-
55
cl,nusaacelax jo í fss tdi jsscs,Bas, as510 =b
3X,2l«BXfi
cunusaac:
ssí aresasc
§ul eladd dSjof fsei ase!aov tíi,axS3V CXjBaKESC
xor aXja1,:rep =to5Kpop 95
_ok5: restpantallsjap b^subnivsl
¡borrar escrc
-'rasrasa
mn ttn¡
==:rs: ctcí?r¡ dboc=r2 tí &
DDBr4 dbQpBTu db
oDsro ODoper? db
opsr? dboDsrp: dtDoarix diOD=rfL: deoperleí dDOperíé; Gt
GQsrcc dtopsrjc dfcOD5TK21 dÍ3
operes íSCopsrsto dbopsr=i dboperrn dboperrí dbopsrll dboperiS dbcperint dbopsrÍD dbcp=rir dboperaa dbaperxlE dbopérese dbaperj! dbopéralo dbDpfirU dbcpErrrr dboperhlt dbocercuc dbopernop dbreoi dbrsg2 " dbiodos db
c ~ - i '
•fiCDÍORlfiflC.SBS.fiíiL'.S^.XCíi.CtíF.-'Bfift,DfiS.AAA.ftA£.-
•Ó'jÍQ.MC.Z.NMÉ.fijijHS.PjKP.L^E^E.e.-'PUSH,PQP,SAH,LAn, '•RQLÍROR,FÍCL,RCR1SHL,SHR,???.3AF;,'ITESTI???)HQTfHEB,KULJIHUL,DÍVtlblV,-
'INC^HC,CALL.CftLL FftR.3KP.JKP FAR,PUSH}??''PÜ3H ,°2£ ,'JTEBTJC^j,''RG^,??rt
'Leí.. ''KCHc Ak.'CRD.DBW,''OHP,CALL}''üAIT,''CHPSjfíOVS,1'ST03,'•SCASjLBDS/'RETN.'-•RETF",''LD3,LE5,'•IHT 03.''1HT ,''ItiíG,'•IRET,''AAD,AAK,''XLAT,''£3C ,''JCXljLOOP,''QUT ,1« ,OÜT DX,''LOCK,'•REPE.REP^.EPHE,''HIT,1'CHC/'HOP,''ALjCL.DLjBLjAHjCH.OHjBH,''AX^Ü.DXjB^SP.BPjSIjQl,''SHBXjDlTBXjSJrSPjDHBPjSI^IjBPíBX,'
casos db Wh160h,70hfBOh,84h,88h,8chl90hdb í l h s h ^ á h b h ^ c ^ O a O
III
Ul
11)
ill
O
1 J
01
U^
.1
CZ
*--
a
-a
ti
co
u
LJ ni
-v
1_"
l'.
*/
_
£~
o-
••>
.u
o
1 1
-1
11
) II
..-
(11
i- -J
11
11
111
- É
-r-
ri
••..'
. i
11
> i
i u
• «
>Ü
ít
t , .
.U
LJ
-, 1
1
ti
u
va u
1. 1
t-
LJ
Cl
i-
r-iu
ru
111
Ul
10
TO
LJ
IJ
m
u.
ui
m
LI
(1
á o
í¡o
-a
* •
*. •
ni
ai
O
o
TJ
U
1 1i
>m
'[' t -3 13 a u 01
IJ 111
111
••!-
• ri
ai
i-i
ai
m a
na a LI
rn ai
ni
ai
u ai
ni
O IJ u ui ai
L>l
ru ai
m Q
cr-
eí
o- ai
LI ai
Ul
a Ul
ra -M ai
ul
o
o- rjj
IU LJ Qi
111
a u- o -i-*
u J
Cl- cu IU ai
Ul
a -o
Cl~ ti u ll- ai
Ul
rd LI ai
m a a- nt Ul
nj
ai
Ul o Cl
•11
O -»a" ni
ni
ni
LJ
III
Ul
a o m Ui
ul
no Ul
ill O V
rn n i j
ra ra ni
Ul
ra u ai
ni
M- o Cl
' a •i-j
Ca ni ni
Ul
rd at ai
•4
- a o
O 4 J
Ul
111
m LJ
IU a o .1-*
LI
m ai
Ul
ru Ul
Ul
O o
U a -M
Oí
LJ ai
Ul
ni
m in Q a Oí u ni
ni
ni
t-j
m Ul
Q ti
L4 in ni ni ru Oí
Lll
•1-
C3
UT O -hí
-a- u Ul
ni
• M O
í11
1 o
LJ
O LJ m 111
ni
u ul
O a" a co u in ni ni
-i-i m ni a
LJ
Uai
ni
Ul
Ul
LJ
LI
ai
ai
id
ni
•H -
•-!
Cl
Q
LJ
ai
L.I
1 1
ni
airr
j íJ
.4-'
-I-1
ui
ai1/1
U
l
ra o
U 'U
•u £1
til
111
•11
LJ ni
Ul
íl
CJ
*.*
"[1 ai
Ul
ni
ai
ul
CJ
Cl
U
O)
ai
ai
m
ni
ni
(ti
Ul
1.1
ili
ili
Ifl
Lll Cl
u•;i
n>O
í l|i
III
LTl
"1
-IJ
m
DI
ni
in
„„
ai
CJ
O) ai
Oí
in ni
LJ ai
m o i • a i ••
«d-
01
Ul
ni
m ai
Ul
Cl
ai m m «i LJ ni m a •u ill ai in ID m m in 1
3
ai
Ul
ra LJ ai
1/1
• i- a o LJ ni ni
1/1 ru ai LA o
• i- ni
Ul
ni
u ni
Lfl o ni
Ul
m m Ul
O
In ai
Ul
rd LJ ai
Ul
« i- o wr
M- ai
m ai
Ul
M- a
's 2 ai
ni
ni
LJ
111
m a i--. o •o-- ai
ni
ni
--.
--
ni
nJ
—
r-
C--
c:
-(J
O. U
.01
O.
E)
-3ul
3
-a
13
L.I
^v
nxi
o"1
- £> C
i l-
O
o
¿s>
r-
e*
- i—
(••
• i>
- 17
*1 IN
o.
tli •13
O
ÍJ
ti
1.
1 u
u
11
tj
u
i*
'*
•
;.• IO
»>
e:
es i.
L.
i-ei
'o
.i
•«
*-••
»-'
raa
i-
aL
-i_
uiiíi
-raff)
i
ni
LJ 1
J
-i-J
ni
.O
ni
oí
--•
n
i~
ex
ui
ui
.4-j
-i-j
ni
=1 c:
ni
•u O en
V.
u in ru -o o 1= ai
ai
c: ai
ai
a ni íi 1 1
ai
ti u.
O.
ai
.1-1 in UJ
en ai -a Ul
ai
-a u a u oí Ul
o 01 01 ai LU tn u> \~
,
ó.
XI
o ro •~\ ai
ni
ni
-ni
V,
ra u o fll ni ai
=1 cu Ul
a •o u LJ ai
-o •u ru .u -I Ul.
ni
ni
CJ m k. ID 0,
Ul
ra o LJ ni
in ai
.0 ai
•o o ni
IU OJ
-M c;
111 ai
i— n o ra CJ ai
Ul
Ul
Cl
ni
i*
O
;: 5^3"; ¡í:e-usurera: '.i^scs*" e; siEce";:
¿re =;
ce,E. Syis otrísi.].', ísscsreaD/"'jne buscccsa ¡n:-
ifií Ei ; acutí i 51" si eissEpto sncontrádosnccrit:
lodsb ¡csráctsr =n ALcap al,',' jssparsdor?JE finrEad ;=i, Ünalizar trstíEfsrsncia5tQsb ¡no, trari=7=rir
DOC c?cct svrstr
sndp
public EDnvhss
!
;EstE procsdiEÍEíito genere un siririg cié 2 csractersá GEB-JE ES;DI queirscrs^sritan hsxgdeciaslcsntE si núearc BU AL. DI ES acosotia coso sn si
|tfiraoa¡ l = nüasrc por convertir,
DI = dirEccián d=l ultiso csrácter usnarado T
pu=r¡ exaov ah ,a land a h , 0 f h ;4 Isb en AHf t o v c l j 4shr aljCÍ :4 usb sn Alor ax(3030h jconv. a asciícsp aíj'9'jbs nusal
add a i j ' A ' - ' ? ' - !nusa i i cap ah/9'
jbs nusahadd ah , ' f t ' - '9 ' - I
nursah: stosv;pop expop ax
retr.COnVí iEs EHCC
con vi ti 5!-.
¡Este üracedie isníc ;=riera ur =tnriQ dé 4 ca^ciEres aesde ESiDI que;re[TE5=r>isr, nEsaaenrike":? 5 Í= salabr; = .üun tad= uor US: SUBí. D! as
a :CPG sr¡ rE=o?"-s ,
¡Bshda: D! = dirección es: ü l i i f f l c csr;ci:5r a^nerado Ti
push asSBV a K j í spíisíl Sí;
sov al .aricaií :opDC 2K
C2l l
rcc nsar
:Est= procEdiaÍEnio obtiene el nüaero CE 3 bits de los bits 3, 4 y 5 ¿E;BL, y !Q coloca en B!_. Es de utilidad paraj por eieaplD, obtener rsg:sn E! byie dE tsodo ds direcciünasiEfito.
i¡Entrada; BL
!
;Ss!ida; SI = ÍSL and 3SHÍ/8.
u=h ex
íc-v el, 3shr bljclpop esretfi
codSbit sndo
proc near
jEsts procediEisnto genera el string de aodo de direccionsiüiento [ , . . 3jdesde DBífes t r inq , y lo tsrsina con 0.
¡Entrada; riL - tipo de operarior ívií
i;5alid=i Cí = longitud prEsuaida tíe instrucciónj seeop = í si ss opera con ssioria
Ul
l/l
U
LJja
ja
o.
iii -a
«i
.o
-a
CL
1S
111
(1
&>;
LJ
ti,
UJ
•—,
icí
o
-u
o
«ia,
UF
>
O >
-o
m
c:
a
-u
o -a
o
o
o
o
o
tu
v-. o
u»
n
n
C
C=
IS
RU
! Lll
Ul
UI
^~
ia*
rj~
zr
U.1
ru
ti
iu
a
a •
cr-
ia
r-*
rt-
í-l
•i
ni
m
m
Itl
O.
-
o
\o
v\
O
r\.
ai
o
-«
=Í neí'Cí£:m:c ia Dartu OE ESíDI) ssauít e! bit oe Girscción (DHí v ICEsc; oestes 01 coso er-
atícastr, addbs'.T'
EUSr' áí
icv al.Etos: ¡r^rer unor tíh.dr3: b-first
cali addsstrcov
caí! addbstr:EC snori íinoroer
~éll accüst'RDV a i , " , '
5Í55C
pac axrsin
orcer endp
addstr nroc near
;Est£ praceditienio coloce un string sountado por D8:£i terBinada gn C;óB5de ESiDIj scofiQoantíQ DI coso en readarray.
oush 51puáh óx
KÍEr: lodsbor al,si jíin de strinn?J2 finaddstr ¡sistDsb jno, continuarjsp short síer
-íinaddstr:pop axpop sireb
addstr ertdo
;Lo= 5ÍouÍEnÍ2= dos procediffiisntGS colocan los strinos apun-tarioE por¡astriño o bstrinc desóe £S:Di, acosodando DI COIG sn rsadarray.
aüD2£Ír cree n=ar
c a iDODreír
si, astriñeascstr
ñcíCitr oroc nesrDUah SÍ
aov sijbstri:C2Í1 sddstrpop sirein
addDstr sr.cc
ns=r
Eáis arocsdifaisnio gpfier= un strinc ds oueración de ázue,'JÍ3dor corr d^tosinsEdistC'S. v ic ccÍQL5 a sartir EJS t S í D I , acDiociando DI cccc sr¡ rsafiarray,
Enrrada:
Salida:
ñl = v* íbit de tice CE opEradori
CA = longitud 02 instrucción
, convhsx, conv2hex
•push os_ DU=h dü
push siSOY di.alBDV
sorCOY
or
EQV
catal: calipopSOY
StOEb
sovincorJ2
calijap
dsil: ffiovcali
-finaccdsta:¡aov
:ors5srvar K
jponer ur. Espaciojleer string os scuisulador (AL o fiEJ
si.offsst rsoldi, didatáí
readarraysi
bx,ilbxdl,dldatl
seun
jponsr una cosa después del acustulador
jSI-rBÍ apunta ai dato inssdiato¡•que =5 d° t o 2 bytss según
short finaccdata
convhes
al,di } recuperar u
¡icnoitud figpe: :;::r D--rr.r
Es:? p rac=GiBÍe ruG C S Í C L Í Ó í = :ir£:ció' ree!ccrivisrts en un »irir¡e £ osr::r GC £¿¡1,;, r;
pusn aspusn b,r
Dr a l .e l lasspiazasiento Oe un oyts7
COKji d s p l f a ¡5iecv éh , tEÍ^bs í23 ¡no
d53lb¡ scc £í.ador
add as,ex ;direcciori real er axuiish ax
1 ' Jt3V di,
stosfa —eov il , a r ¡poner =i strinccail convhespao axcali corivhexpop bxpop 3X
retnendp
HOD oro: near
j¡Este procEc3ifti=ntD colote SK'P o "H* EÍÍ ES:D¡ e incrseenU D I , según w. E=jüiil cara cosoletar instrucciofiss de string,ijEntrsda: AH = accede
í¡Salida: ftL = wj CX = longitud de instrucción
iüov al}ahand ai,1 ;AL = woush ax
EOV
al.'K'
¡lonq = í
üs!2:ic cree
ifiEnto Gsr i= r= E: strinc ú= CODO CÍE áirsccicnassisritc íE5:DK Acosnds DI CDÍIQ rsstiBrrav ,
Este crur¡ CDBr
£r,trad3: ftH =EL = 5r, íbits os esísrision ce signo y iipc QB
Sslida: AL = MC)1 = l o n i t u d ss ínEÍ
, addssir, convhes
pusíi bxaov al.afcand al,lEOV DXjoKseí atbsrr*cvcaliDUah 3X
B3v alstosbcal!sov alj','
BDV bX.ll
add bXjCxEDV ax^si-riinc exCBD dlji
jne unbyteinc exHOY 01,51
BOY é l j a h
Cali convhexÍDV al,bl
unbyte: cali convhexpop ax"pop bxrstfi
datadle ends
;obtener w
¡generar t...]
;poner un espacio;poner 1...]¡poner una ccaa
¡apuntar al opeode¡apuntar a los datos
;s=Q y w=l iaplics dato de 2 bytss
-.:•:£.. n .. ::r: f¿:?
Salios: AL = r¡CJí - lene, ú° irstruccior.
;; naydei ¡si si Isb d°! opcüde ES C, nev dstosrv 1
--' Í - K Í -
j:: snort ñndairstfsydá':: na; el . ' ' ;pcnsr un Espacie
5tDED
cov s;;,;l::.: DSC£:; ccr.v2h=x íDDns1- r.£t:CDV ex , 3
inflairet:r:v ai.l ír»=!
rstn
adsoluic prc: nsar
jEste procédisienío pone un string de türección absoluta as=£Í5 H5:DI,DI COBO
AL = wClf = lono. de instruccián
conv2hex
bxaov al,'stcsb ¡poner un espacioacv bx,l!add bXj3 jspuníir =1 segundo par QE bytB=cali conv2he3!SDV al,':'stcsb ¡poner dos puntossub bXj2 ¡apuntar si prissr par de bytsscaü convíhessev es,5BOV al, 2pop bs
\o
CUV
pu=r.flUSh
ffiOV
fiDV
EOV
rspCDV
EDV
ccvCDV
ffiOV
andC6E
jriEfiDV
£n:5D1.
snrpushaovxorsddfiDV
popaovjap
nopre1: eovAOV
proced: eov
3:
diBSjSÍ
dijQííset oDCodec s f ?
ÍOVSS
cs.ai;addrjbxtiiDtísst opcodeal,[5i3ah,a!
ar.,úe7nari,2óhnopre1
n'.íai.lflrc3 ,1ai, elEÍ
5Í,QÍT5et segrsgsh.an5i,axal.lsi}síBílÉ.Qi
short proced11,0QíiS.O
CEftüpjO
aoveovCÍD
poppoppiishcaliJBP
ieníe: aovsovxor
buscop: scast-jbincjap
Encontrado:pop
¡transferir instrucción si segraentEj de dato;
¡dirección de ia instrucción
¡prsíijo de rede-f. 05 sagren t
ocode un oyie
jopcode en ah
senfedi
short ajustarQÍjOir59t Cc=05
sl,ahbx,bs
encontrado 'fax
shorfc buscop
di
prpreí:
DOD
shiacóD¡J5T.
CEll
CÜL
Jfi
capJ2
pushpush
pushttOV
aovre orí =pushí.orrssürDQp
SUD
fieg
inc
pushpushpopsovGBC
adtístdrspcidpop
80V
aovaovpoppoppopÍfiC
jap
ffiQV
aov60V
BQV
aovBQV
DE
bs.lbs,rfís=; d:r=:::c:
ci ¡incluí'" EÍ :r^i-~ 3= rtscc;:r:':t' -t
íiri£52100,0
prpref
SK
exdial,T'cx,3tscasb ¡buscar un ;ais!,alsc=st ¡buscar un nulíex,cs,ai jcx Oibe tener sí nusero es caracteres ouees ¡van 2 aoverse a la oerecha para que pueósCK ¡Entrar el prefijo de redeíinición DB seo.
dsES
dssi,disidi, 2 ¡preparar el ttovisiento
¡hacia atrásaovsb ¡acoBodar strino
ds
word ptr Es:tdi-lV '•$'allaneeE:Ctíi-2jj2ldiexasex - ;la long. de instrucción incluye al prefijoshort fin
al j uness:[di1,alHord ptr s5iídifl3j*:B'byte per =s:[áH3],0al,255cs.l
ííor.is
JD: sriDrt riñe=eqrs
tifié:
fiaycusb;
ED'1
«vpop;to
ousr»capjaBOV
EOVcalíBOV
ffiSV
calíECV
C; ,1
el.lC 1
shtsrt finOto3í -
Si
bl,3cs3si ,oíís=t oíiarpcES,1
readarray5Í,OÍT5St 55grEQ
c l . b lrsadarrav-1 'S'el i 5
¡cae
hort íln7ca3; tov
EDV
caí lfifi?: sov
BOVpop
TÍnOtoóf:
el,elex, 3readarray
sí
sor5tOSD
popretfi
C25540Í05Í
BOY
andsovshrBOYsoriaovcali .BOV
etosbI5QV
iOV
a l , al
2X
endp
proc fi=arh l , shb l . I S hel,3
cl,blcb,ch
readarray.al,' '. '
opero
i j O f f s E Í reg?
Duáíc:;
sicsb&DV
fiQV
POE
pop -ffCl
DO?
caliCOY
fifiC
calijcc
lífiDDC! I55t
JZ
caliorjzftOV
BOY
caliHOY
5t05b
jip
BSD3B! ODV
fiOV
caliinclaoiJipop
EOV
aovsovcalícalijsp
a=lea; HOY .xorcaliBOY
SDV
aoviOVAflV ^»LJT *
popcali
iin8cto3f:
tíi.OTÍBs: atbstrbstrifiG.iüdie== i . 15Í
aodrídn , óttíí-,,2 :cortJersíiart finSctoór
' ah.,:es teacod3l:incbl . biSSpQD
sijOf-ÍEgt opera?ex, ! ;???reaoarrayál¡' '
shori inclfiodsi jCtíset opErppcs}l ipopreadarreyai
dx,DÍÍ=Et stbEtrbBtriíiQjQS31,1aüdrteddbstrshort finBctoBísijQÍTBst operleaex, ex j leereadarraydx,OTÍ=5t atastrastriño, dxdx,oí{=9t atbstrbstring.dx
siBiodr=ore
*•' A fl P n •
SICSD
retn
EIBSE^O OTDC nsarBOV s i jOí - fse t opsrr.DcX^ .. • C X , C X .. JÍIOp
csll • Tsstíarray * •xor •- al.al .
8PY il.l
•fiOV CXjl
retncase90 ende
proc nB2r
XD^ CS,CX ¡XCP.C a!
cal; rsacarravEiov a l , ' , '51056
scv el, siland ex,76QV 5Í,OÍT55t T5Q2
cali readarrayser =l ,alsto=bÍOV
ÜQV
retni97
)99SOY
xcraovand
al, ic x , J
encip
orocsí, oíex, exal-shilA
opsrcc
jnz vidinc es
«c; csll reatiarrayaov es, IplíSti 5X
xor si,al5tosbpop . ., axretn. .
eridu
proc nsar
O
=1
Cl
,-+-
C3
O•<
o,
<
o
-<
TJ
-c
-e
ui
ui
-T!-••
fD tu o. nri
ui
EB
m
"o
3<
h*t
in
I-" 1
—
—
El
Q
ID
-1
13
Ul
•-*
-1
•<
UI
n
-o
o -i
'o
n
11m
o
o
i-*-
a ro
13
ai
ci
n:
o
nt
ti
o
tn
iri
-op.
. -
-a- n
a
ro
n
ta
n
t o n r s i r . M a y
stcst
endp:
C25SCOIQC.' proc usarcali coti31linc
sov s i ,8TÍ=£i opEra1?sor cs.es ¡eovcr a i ,o í12 BSií'OV
eciv d l . ahand d i , icali datadlepiish axsor si,ai=105G
pop asirstn
casecctoc? encc
proccali incognitrstnic9 entip
casscstocb proc riearpu=h siffiov sijcfíssi op=rrfüü r c S j C X j r e t icali resdarraypop sicali íiatrsipush asxor a l , a l
003 5K
CESSCC proc nsar
O
Ul
U-
ra-i~
i j;
ai
Oí
III
LJ
a.
til
1/1 i o
ni
LJ
.T
I ai
u
>:
tno
1.1
o.
15
—
>
ka
s-•«
rj
u
cj
u
4ta
111
ao-
LJ
^«
i»
ui
ia
—i
•" .e
m
>t
tu
ci
.ti
ru
in
in
.ti
ni
ux
M
—
• o
O
- ti
—
—•O
ru
U
) rn
ru
>e
in
o,
u
m o-
>t
u
Q.
ia
a
m
u1(1
O
tu
rsalatr
StOES
DO: ñí
caseKtaeíccvsntíBOV
test
procaí . ihsi, i
oaeroic
«DV CS ,2
cali réséarrsyBBV cs.ax«e1/ ax , ' f t , 'BtOSk
BOV a;, ') i '
or dl,d:
C1DV
|DUl DX
a l . - L '
jap Eíiort finectoe-faov cs.l ;incsll readarrayBOV ds,ox£ov al,'A' /
sovcr
flOV
=sroas: soy
sov
al.'X'di. dissrnax
ah/,'
ax/XD1
finectoeí:BOV CSjl
sor al,alstosbaov sXjdxrstn
cassectoeí endp
cásefO proc nsar*DV =i,OTÍ5=t operlksor ex.ex jlockcalí readarrayxur 3l,cl
—i
-a
-o
-uu
l rn
ro i»
ni
u
re
ni
. 1=1
">
•r*
111
—*
in
u.,
ra
r-j
=3
O
ai
>
-13
o.
tu
L:
«a.-:.
r~>
í,.
fy 1/1
a.
w
.11
t.
Ul
-Cl
O.
ID
O -a
t_
o
•-•
ra- o
in
ti
ai
uO
O
O
ci
o.
-uu
-•
-» ti
na
u
r-
- o
.a
o
n
i -o
m
=)
o
o
sriti s i , !
CK íil.2
EOV CS,7
jü;c snort T i n í e i o f tnorsal: aov c l . b i
xor d h . d h
j? SEDE:ccp ci,5jri= tin-rstofí
°=pec: ffiov dh,2íinístoH:
csü readsrravOOp 51
BDV d i , a l£Dv ¿1,
BDV b s t r i n o f a vaov as .dscali ffiodrscalí addbstrxor el,5!stosbffiOV tíXjdX
or ah,ah
BOY a l , a hsaasi rEtricasBfstoíí stido
pufalic des5n5D5toroc near
ijEísts procedisierito oeners un string = partir tíal coc-igo de oéquina apuntadojpor DS:£I, ÓEsdc ES;D!, tertinado en ú, consistente sni
- Cuatro caracteres oue repreBentsn el valor inici=l d= SI sn hex-- Cinco caraiersa tísl anaffiotécnico de la instrucción,
; - Veintiún caracteres OE pareitctros del snesctécnico.jñásaas, se retorna:j AL tipo de instrucción tO¡!f2 o 255Jj CX longitud ds instrucción!
push- .. alcidoov ax,=ipush axÍDV o l , ah
U
V.
•"!
• '-i
ai
=ain
in
ra
-
ni
11 n
3
í-j; x
CI- C
J tj
l~l
'II
LJ
•tí
-jafí
a.
, -
f-i
ti,
re.
IKíi
u
u
ui
ci
.n
ul_
l 1X
1 "U
l/l
iii
a tn
t>
u
se
ni
Q
a<
a(
3S
•,-!
X
•-<
LJ
•"
-«If
l 1/
1
"O
—
LJ
—
—
c:
rt
•"<
•—
i •»
•*
Oui
cj
ca
-o ü.
>
-«a
-o
-ra
oa
-a
•i-
' o
•*
-'
¡ilinmimmPRGSRAÍift EK5ANBLfiBOÍl¡íiíírmíimimPQR IvAfc GRDG-"EZ
, fí 3 ¡j E* ; E ü • * 1
.esta
tr5r(=;l ct 32 :•:: •"
Engp.o di) 'AD f l ' .O . 'P i íSh ' t ó j 'POí ' J /Or ' .S
db 'S'Jb'^BH/EAs'^FH.'IOr'^OH,'fifia',37H
ds ' S Y T s ,3CH}'IÍQRd-,3DH, 'DHQRd',3tH, 'fifis' ,3FH• ' INc',40H. '3E:' ,4BH. 'SHORt' .50H, 'QWDRd' ^ÍH, "íiOf ,52H,'NEg1,53K
'HU!' ,54H, ' If.Ul',55H,' Div1.56H,' ID!v' ,57H
ot ' J N A = 1 1 ? 2 H , ' J ! i b ' , 7 3 h , ' J í i ' , 7 2 H l ' J A B < , 7 3 h
Sí JHg' j7Eíí,' JHLS' ,"Fr% ' Je ,70H, 'JtiD' ,7IHCD 'Jc;,72H,:JNc',73h,\i5-,74h, 'ONe'.75HdC ';ae'í7¿H1'3a1.77H,'J=',78Hí'JH5t,79'H
de 'TESi',84Hf'XCHo'¡86K,'HOv*-88H,'LEa',BDH
db •PUSHÍIt9CH.'PQP:")9DHJ'SAHT'J9EH,'LÁHr!9FHdb 'MQVSb',OA4H,'HOVStf',OA5H,'CHPSb',OAáH,'CKPSw',OA7Hfib 'STQBb1,OfiAK,'STOSn'jOABH,'LODBb',OACH,'LQDS«',OADHdb 'SCASb'jOAEH,'SCASw',OAFH,'ñEt*(OC2H,'RETn',OC2Hdb 'LEs1 tOC4H, 'LDí1 ,OC5H, 'RETÍ' jOCAH,' 1HI' ,OCCÍidb 'INTD'jOCEH/IREt'jOCFH.'HQl' ,ODOH,'RQr'.ODlH
db 'RC!')CD2H,'ñCr'JOD3Hl'fiA§'.OD4H,1AAd'1OD5H
db • S A l ' ) í i D C H J ' S ñ r ' J O D F H ! ; L Q Q P N = ' I O E O H J 1 L Q Q P H z ' ! O E O Hdb ' L O O P e ' , O E Í H , ' L O O P í ' . O E S H , ' L O O p ' / JE2H, 'JCX2' ,OE3Hdb ' !n' ,OE4H, 'OUf (OE6H, ' Jlíp' ,OEAH, 'LQCk' ,OFOHdb 'REPNB'jOFZHj'ñEPNz^OFZH/REp'jOnHf'REPB^OFSH.'REPz'.OFSHdb 'KLf lOF4H. 'Cf íc ' .OF5Hl 'CLc ' [OF8HJ 'STc ' !OF9Hdb 'CLi ' .OFAH/STi ' jOFBH.'CLd' .OFCH.'STd^OFDHdb OFFK
reos db 'ftLCLDLBLftHCHBHBH'tib ' f tXCXDXBXSPBPSIDI '
db 'E5CSSSD3'
27HÍ2FH,37K)3FHI90HÍ9BHÍ991ÍI9BH,9CHJ9BH19EHÍ9FHOA4H,OA5HJOAÓHJOA7KJOAAHÍOA3H)OACHJOADHJOAEH)OAFH
f- iri
-.r.
•
t>-l
-i-
.j;
.1;
LJ.I
n r-
. ii
. o
iri
r~-
r-- -
:j"
r-c
:.t:
-a:
—.
m
-o
uj
unle
í r~
- i-
- cr
<
T;
n7
-i.
—.
o-
r >
ti
Til
-C
3
- .ra
tu
u
na
ni
(ti
ra
m
a 111
m
ni
ni
oí
'uc;
cu
=1
.tx.
ui
m
in
u
o-
O u
m
— u
in
ni
ul
iu
tu .a
ai
as
c:
ou
o.
uu<
in
••—
i -a
u
a.cu
o.
d.
-u -o
O
O
O
fcJ
G
••ci
••--
--•
Entran*: Dsíbl apür-Ts ai strinD, aue dése tercinar en -•>,ES:t'l 55 is dirección sn oonde se ponorá el pssuBacctnoa.
DS;£I asista 3! T;-ifJ as! cr.Er.ctScnico - 2 er E; Efirg si
H=:B1 eD'jnis al Tina! ísl 2==u3occí:oo ¿ !C* =E. 1 =1 EÍ BPBflOíécnicc es inválido o si nav error
altéranos lexceptc si nabia espacios QEsde G5;3í¡¿í /"nnTisrí— fi^ ricciftrtnrnni n T W —íí p!-t— ~p>* irít- i_Uii L¿ Cii" - - UjcUJUi-iJUiwU * n*- V i ni r ^.ijv * r
caííKpüshpushpushpush
sovEQV
EiOV
SDV
dslsoc ¡erscofitrar =1 Kn=Eotécniccíin=nc2 jen caso CE error; terainarDKdx5=
diaü.ldata55, ax ;hac&r que i5:Di scunte a los ansso técnica
d* ,of ísDt ffin^™:"oXtSi ¡oreservar si COEISTI~D dsi onsicouecnicD
¡o:=csov an.ss:csp shi'a'js noíinícapinecfr
10Y EÍ.ds
jcp short íinencufí: sov bl,í
and ah,0díhjap short sigcoep
nofinsiriseo:xor bl,Qí
no al,(idíhCiED
•or
íodsbCip
J5
cep
ja
EscorchísiesestE!
decEOVpop
icarácier de: strir¡g sr¡ fiL¡carácter d= U tabla En AH;es una minúscula, iítolicando fin de ansao?;no;e= el -fin QE la tabU?jrto, probar el siauiante síieso ds la tabla¡si, =1 cDoioo era inválido pues no¡constaba en la tabla, £5Í que se debe gsnerar¡un bit ds Error¡indicar íin ds ftrssao naciendo BL - 1jhacer ftayáscula a Atí¡comparar si ultiso carácter
¡indicar cu- todavía no hay Un ds Sñsscí¡hacer sayiiscuía a fiL;son iouales los dos caracteres?
bl.bl
escorch
noesesíeshort 5ÍE
s
d
jno_, iñtenier con eí siguiente fip.Biso;si, sra el uítieso carácter dsl sfieiso?¡no. seguir coaparandojcasparación exitosa, vsriíicar que¡haya un corchete,
¡un sspaciOj Te.B o O después dsl ansie¡si no. intentar con si siauientE
jsn caso de corchete, dsbs dejarse SIjap'JíñandD a éste¡encontrado, obtener el psEüdocódigo
t,-. O
—
•
•u n
o
ri n
o
i o
o
o
o-C
C
L. <
<
•<
o.
ui
-••
=1
in nsa
>-
•
-<;
ui
ui
ni
IU
Cl.
M
ti
-ti
Itl-
K
I--.
II
I >
c >
-•
IU
1-1-
ai a-
m
ID
tu
ai
ca.
o
oí
a
tu
M-
--,
¿'
i 1 m
c NI
IJL.
-1
OO
L
J
=1
U in s-,
ni iffl ro 2C <r e:
DJ k.
01 .tj u «u i_ ID LJ
^m
. Oí
k. m a k. o •-*- m E=
iD k.
-M
1
-CT
ÍC,
-. -4
. .
3<
-ni
«i
•_<
-a
•-»-
a>
<o.c
-
ni
o>
- •>
= -
L- .c
m
.n
--«
k.
.— É
sil
m
•)->
m
ni
ar
iu
[11.
V3
O.
1.1-
ni
si
4j
rz
ra iii u
1
U '"I
lU
U '-I U
4: ni
-iJ m
a LJ
Ul
•=J
>-
ra a ni
<E es 1W k. oí -u u ••
o u.
no UJ
f— • 11J k.
iij
Ul
L-
O -*- 111 r= ni
k.
4-1
,t=
^4»
U1 O
kdt
F—
«
-U
111
Ola
ir••
— .
IT
J
-tJ
-Oí
-O IU Ilí
Oí
111 3C <K c O)
V.
ai rfj Ll
-«)
k.
ro U .— • ai i~ ni
-u Ul
=1 •—i
n)
^ .1= 10 d.
@ LJ
.. Ul
c; k.
— i
<c ¿^ o LJ a tí Ul
•<H «!
O T^
1 T
TO
- C
r-"l
1
.
3
J¿ —
3
—
«C
(U
iK
K ilí
a ti.
.a.o
s> ti
a 3
•—1
Ul
Ll
••-,
1"
-C ra Of
S3
aéri
cc
=a c:
ro r-i
'#•1 U Ul
íO ai
•C3
L,
al
111
IU CL
. O
M¡3
-o
ai
-o
M
— <
v,
.c:
ni
ro
QJ
<u
XI
CX
Ilí
0.
n
<*
m
uU
l U
••
— , U
«**
4 ni
•i ra
a L- ai
tí -3 d *« ar i_ ra m c;
ili •o i=? O LJ
K ai
.— •
.1-
L_ f, ,_
^-4
OJ
U
ro
id
ni
>
*^iM
O
JS
k.
• •-i
a
1/1
o
.—
u-
" < -u
CK
-—
• r-
i •-«
líl
- U
l -O
-
111
- 1O
iii
.,
u,
— -
ai
- cu
C
'U
Líl
lO
'11
C
rtl
U
l
->J
1-
J -H
-1
1-1
ni
>-•
ni
í."
ai
—i
Cl
111 m u a K.*
-ÍJ O cz 01 C*-
Iro in O .+
-*• •
-í 13'
.*-4
"Cl
CN O __,
Ul
•o U'l
Ul
o V.
ni & -n cz
•— •
Ul
'•-1 U
l
~a --• ii „[
•tíC ca 13 .-i •u en
o t- OJ a -o cr _ Ul
•o Oí
IH
-r-f L,
0-M
U
.ui
m lü
r— * -^
ni
n:-o
r-**
-CJ
[U^J
T3
-M •—•
L.
oí
oc;
r--
O
ni
—
>II
II
rr; x
-a;
cis
=3 líl
111
•r* U)
O O t_ ai £9
-n G t= =)
U1 ni
o G •—
ni
en
.i-J
tJl
.asn
L-*
lU
. I--J
a a.
ni -ad 13
m
Ul
ílJ
-J-i
«3c;
=j
ni
Cl- 13
ni
oo
i--~
< ni
ÍQ'*-*
~Í
HU
l d
— < II >•
CJ
JC
¿K
>C"a
.0
j^ líl
!„=1
O
13-
3;
ni
u
m.
-t;
sí
o j
:•o
-a
C3
ro
o,
»<
•*
r-4
cJ
a ni
o
n
tu o
o
o
ct
o
n
cu
oo
o
o
nri
ro
ai
n 13
si
»•
st
=r
O •'
--i
SJ
O-
OJ
lli
1/1
OJ
-
-
a»-
in
•-*
ai
ra.
tu
o-
X •I- Ivl
•O
r-i-
Ul
o
ni
ir:es
. u
ai
TU
L
/l13
1 --
U
1J5
1
U3 «
«t
(X-
n -.--
III
til
Ul
II
CM
—
•• L'
M
«r
ÍX
II
II
T" , I
v-
iy
a
• M
- en
in tu
«—
•>—
i o
-o
«J Í-.
O
w:
-c
n
•—•
no
o
o
o-i
-E
l n
a-
o
p:-o
xa
es
ru
re
o-
iner
10
a.
ru
a.'
-<:
-i
m -i
i—
ro
ísi
iri
o
cr
o-
d.
E"
ri
ni
SJ
ILI
ri
ID
n
*-*
"-•
o
n -
ui
ID
oí
C3
Cl
•—-
ni
LJ i.,
o
••—
i ••
—i
ul
c=
u
-in
es
IU
O
Oí
in
c:
:«
tn
-i-
as
a.
e:
-M i
-ain
ai
-o
i—i
- n
in
ai
u,
- o
—i
e
n
—
e:
o
- i_
iIII
.-1
st
r~t
,—i
3
f~t
(U
.t-t
-C
S
.—
(U•T
J M
- -o
na
ra
s:
in
-o
'-t-
1/1
ro
-o
ci
ts
>e
nr
—'
ui
ni
ni
tu
-a
til
m
ui
C:
ni
u>•
"o
>
ra
, ni
o
>
a o.
t= .-i
u "^
LJ "-.
a .
, es
e
«T
I m
u
-—
. o
ni
«
m
EDV sfc.bl5105*
rstr.
Bfíchss ende
ensoBSD
itEte p roe e dirá SEI te ejecuta s! p r i m e r peso GE coapüacion, es de{traducción de un strino slíamüténco E seuoDcádigQs pu= s=rán t;s código V5rdaoerü oor otro prscedieiisntc,
;Fptrsó3'. D5:51 anun t s ai strinc por coisDiiarse, oue ó-oe; sr. í).; EE:Ir¿ apunta ai lugar donas SE csssa el seucccc!
¡Salida; Es:5! ss altaraocI ES:Dí ES alterado1 Cv ssi si hev errof
a
pushpushpushpushcalijeincinccaliaovlotlstcopjnsaovSÍ05D
jfflQ
nosrEgpref;calijec&pjbcapjacalijecali
asbxadsencsrsg ;=s la instrucción un orsíijü coso ES; ?nasregpreí JÍÍGsi :si, proceder en consecuenciasitísispcah,al joresErvar códioü
al,':' ;por sintaxis, dabe habsr ;srrpasoísl.ah
short bisnpssol
encneft jlo priaero debe ser un faneantécnicDerrpasoíah.OÍOh jes un prsíijo REP o LDCK?nopreHr2h,ÚÍ3h
nopretírdslspc jsi, buscar siguiente en eaa técnicobisnpasol jsi no hay ¡B¿S cu° el prsíijo, tereinarencnsfl
L.
fil
QI
"O
o
cu n
m
LJ
U•*
-^
-Mrc
ai
o
o
u
a-
ui
LJ
ra.
ai
.i
ia
c:
oí
ts
-.-:
mn
ni
o. i
L_
r;
L—]i
ai
H -
"O1 *
.n ra
Ul
u_ tn.
o e
1">
M-
7^>
•
.c m
ni UL L.
U-
Ql
a-
13 -.
JZ^
111
c:
US c:
tu ,^4
Jíl
ITJ
\"t
.r= ™
Ul
a.
t— U-
ai
¿: 10_.
.ir:
ra
<ij
Cl.
L-
l_ Ul
,Li
111
1 1
~S
13 ,
• .
k.
1
1—re
í O
í
ni
"ra ~
:;•£ •13
ill
rj .21 -',
>c .a
.„.4
TI — .
vri
"O
"- tn
O
t-*}
— •'
x
se.a
u
.Cl
i_j •»
•Jiz •u
ai c; ol*-4
111
111
t-
TJ
Ul
ni
-o
ie .a
es
fia
es
LJ
<•-,
ra. d,
a.
a.
-i-'
o
o
o
o
mcu
o,
ex o.
L.
-• C
l..-i
xz
o
Lll
--J
G
a
ai
in
t_
í--
d-
it.l re:
1 —
=1
UJ
ui
te
ni o
ill
(-1
(ti
c:
•=>
c:
«i
. ra
10 .o
i/i
ni
o
LJ
1/1• M
.c
a
oin
ni
tu e
>e
cu
¡ai
ni
a
u
oí
U• H
j=
e
cu re
m
tu
m
i/i
tu
u.
a.
a, .-i
kj
í-«
ani
fe!
m
El
ai
sí
tn
K:
-u
LJ
•*->
-i—i
u ~i
u
'"^
•—
> LJ
••—
i o
••-
P in
LJ
u
cu
—*
ec:
Cu
—
••<
U
1
ra
oí
ni
ai .o
t-
U
111
1.1
t.
—•I
•-.
..-*
dU
l 1/
1 -C
l II
I
ni
•»
ni
rti ca
e;
o,
ex-
-ni
.o
ai
,ía
ai
iu
ai
111
.ci
ai
Qi
C.
ril
ij 13
i
c:
«a—
u
o.
Oí
;i.-H ..J
-O
ni
-i c
Trt
O-
II]
ui
ai
-es
o_ai
-o
»r
»<
•-<
u [i
nIII
'O
•o
LJ
ni
-ra
oíQI
ni
di
m
iu
ni
Ul
TI
a
ota
. -
a
o
es
o
sndano
c.cv
?c '
sr,,:-;s r. r *° i r d '•' i i D '
srort re "iIDO
ai.OcOnan,~
al, ohbs , ax
sí recistrc ce
Q=tpre- prc: r;=ár
¡Este DrccEcieisntc ottien? ?1 Drefijc d= reoefinicicrt os Eeaienio a uartir;d°l nuaero de r=giítrc es ssoiaentc.
lEntratíá! BH = xPSrxxn cor- P = argsencia á= prefije
i¡Salida; fifí = O =1 no nay arsíijc, c; pr°iijc-,
sor ah,ññtest bh,40hj: íingtpaov ah,bíisnr =íi,land ah.ífihcr 2h.2¿h
:irigtc: retnQ=tpr5t encp
proc nsar.
¡Este procEiilÍKÍBnto dsisrs.inc =i debe incluirse un. prefijo de rsdehnición;d= 55Qeento antes de! opcode, del cual salo debe hacer 1 byte, y E3:D¡jóebe estar apuntando á la dirección siguisnte a dicho byte. Hace la;inclusión y los-ajusies asi caso tíe ser necesario.
AH O si no debe haber orefijo
oxods del pref i je ~n caso contraríeE£:l'¡ c¿rsccióri osi byi= os QBCCSS -^ I
Ai == inalterado D conusne s\pD¡ e: ajistsbcC* i:i:reii!=ntaóo en ! E: nav ursii't,
cas ín. ; a vJE noprshjosov al.sn ;si, ajustarxcnc a i , E 5 S i í i í - i 3
inc exncpretijo:
r=tr¡
5ÍZE2ÍSC ero:
D=t=rEÍr!í daoos ¡D£ t¿i= c y ? as ñL. ous d=bs ;:=nsr s'. cvce ce Eao=í t3ftsr¡: 3P bytss del 03=DÍ52£EieniD u Qtí55':. Lusgc incluvE sstE
ic sn sj opcoce.-
OL c- Dí. oESDiáZEiisnicfil ovts oé ffioüo d£ direcLionasiíníoE5:DI spunts al lugar as: op'ode donas va si dE=pl222aÍ5ntG
;S=lida: " AK ss aíteraaoES:£I EE alUEtaocCÍE increserttado E=qun el des el a: aai sirte
t95Í
jzandceoJ2
inc -C£0
JBE¡soy
jsp=EpI?; and
al.OcOhdespl?al,0c0hal.OcOhnodespexa!,40ndasbytal, di
short nodsspa!,7
¡obtener si aod;=i £5 00, averiguar si hay desplazseienío
555 !!?
;=i, taEpoco hay d°=piazaí:isntc
¡55 Oí?
:no;si, áespiazaeiento as un byte
i=i iod = 00 y r/c = 110,cs.-p al,6 ;el satío ES directojns noáesp
dosbyt: §ov aK.dx :d55pla:£Ei=nto ds 00= bytss
inc es>; retn
sízsdisD endp
proc near
• —
tu -a
111
Itl
•
r-4
1/1
U
•£>
O.
I!
II
"O
1/1
«u
6S
-i-1
ni
m
ui
m
ul
'&
LJ
ui
ri
•—•
•-i
U
-—t
LJ
CU
til
T±)
«
CJ
I ">
[II
tí
U
ül
ai
—.
LE
••o
tu -d
ja
c:
1:1
se
i-
.c:
a.
ja
ja
.ra
.es.
rd jii
ni
ul
-O
a-
-CJ
-a
ut
es
ai
c-s;:
.c
: jx
r o
a
i c:
in
m
oo
oa
ic
an
ia
o
—
ci
aa
oca
>t
•—
, a
u
es
e
IH -íi
ss
o.
a
n
<~*-
nn
n
•—•
n
cu a
.•c
i -o
-o
e e e
ra,
1/1
ui
(.11
in
ru
inS»
cr
SI
O
i—
-1O
. -1
3
tu
(ii
in
sn
m n -i
o
3
i-o
=1
m
=1
-i-
ui
ni
•—•
ili
rt
rti
cr
rn
i•-• •
n
3
ni
n
o-
a
a
o
ro
•o
=?
a
iu
a
si
tn
TZ>
--
n
•-•• n
T;I
nú
ix-
n
•<•
mo
•—
ai
=>
hj
i-*-
—
Ul ri
d.
PI
10
-i
-ra
-o
1.3
t.j
=a3
nt
o
o
a o
o ni
in
nt-
o
— o
•o
—
-or*
t-
CL. rt
-^
•--. -i
m,
cr
tu
^j
ti.
n
r>-
o ro
o
tí.
n
35:SI es alteradoE5:DI == 2JU3t£d2Cí, iongitua ae¡ céoigc'CV 5=t =: hay ?rrcr, en cuyo caso le; rscistro;
5tarto2:
dasíj:
unb:
prsrg?!
sr2:
rumión;
saltare!
DÜ1Ü
pushpusnpus ticüshssrcsilJCnr
iss:j?L£L
M3
JD5
ÍOV
SÍOSH
addjapstosbin:jscctpjnsSh1:
shlshlor
incj f t B
jap
cepjóCttp
ja•
calijeC60
bs
fapsi
di
CK
c x . c x ¡longitud inicial = CtioD ;d5t°r@ificr tipo tía p=Buciocódigo iriiciai£"2J t Jl T ^ - . ¿ ~ *-L — *,-*.*« £-*)tí!, c* ;E= tiiid ir:=i.rucciuriíprsrc? no. pasd= =5r Er=Dan . l s= un lonsr?nsssior "cal ,0d4h £= AñK'
sl.Odáh EB SfiD?uñó ríe-íhjOsh 5= ñfi'H D A A D j in=trucc:ion55 cuyo opcode es
J O B 2 bytsacx.2 - ;Íncr5¡ÉErit5r iDncítud en 2bisnDa5o2
exbisnoasQ2c l ,2 jsreg?sr2 jno , error31,1
á l , í
al j ía l ,2óh ¡hallar el pret i jo
esbien paso 2errp2
slJOfi jes un ssíto condiciona!?nojcond= l j 7 f hnojcond
¡si
tipoEr2di , 4 ;lo siouientE es data?
a-LUÍ i ir.Ssh';: B-L
:nc. err:^
!caku;3r oisisncir
¡:csp36
noip jcs icapjns
'isp!StQSfa
caliJC
;LQOP o
al,ds3hásltorel3l ,9dh
a l , 3
¡hallar E! códiga tíe los
|ri y w dsosn ser 1
stosbcaliinc
CÜD
jbCCp
ja
exbienpsso2op¿; jcp
eÍTlea: CÍDjb r.oídslescap £l,0c5hJDS
£l,OÍOhalterablesal,OÍ3h
inc eslodsb
aoclc ce d
;LDS c LES?
jprEÍijo RE? o LOCK?
;si, incluir el prefije
jedec
alterables;testjn:jsp
sÍGíier: testjzjap
nojc; capjb
5tartp2
ah,2Eionernoonsrahí ,4no je
al,0c2hnori
¡eapezar otra VES con lo que sigue al prefijo
;JHP o CñLL?
;=s oner.¡si no es REÍ o I NT
-o
n
o
cv.
111
B>
mrt
m
ra
a
«—
n>
F»
nt
— -
ro -
ni
m
o.
ro o
. ai
o-
iu
cu
ID
ni
u
.1
ni
CD
Ci
-i
O
ro
a
m
==:al l l : i :cn:
ti.i-eí
ascal
jcpCüp
JRE
subor
JDÍEH
errjax,2
atí.ah
ari.Oí-fh
¡solo SE admite SHQP.T en Jíi:
:; BDV an.=iaov él.Oebr-stcsv,in: cí
joien:
grrj ;
jnodst:
xcrjspsorjgp
Cffip
jneorjneEOV
ffiOV
inc .ffiDV
andorcap
jeor
Jop.
:n,chbisnpaso2ch,cnsrrp2
-dl.lrioreglidh.dherrjb!,al .al.Offr.
elBi.bl£1,7
al.OcOhchjOeaíiEijepragaljíOhshort íjd
or al,20nf jd! stosb
inc eljap shorí j
ncregUiEff ip dh, ije errjsub 5 i . 4
:rse?
;no dsbe haber restricciones de BYTE =TR, etc
¡aislar nieero del registra¡E-Du = 11
¡es Í2E;, short e= inadalsi
¡rasiaurar
j & í ü*£ i4 ^a?»
C E [i £ 1 b i'"
j = ElESGOv
•Lo Eioulsnts 5= si DrcceEc3V:pUEf: 5Í
cali tipoj: er2fc- d i , d i
sncine; CÍÍDSE5EÍEIÍ
,-1 *
csirec; ts=t £jjnzcaliCE!p
shl bh. l —shl bh, lsíii bh , íBOV di ,al=nd al ,8sor a i , b h ;siz5= contradictorioi?jn: er2s jsi, errorffiDV Si,di
sacsíiy: snr a l j !shr si.Ishr al ,1or a=tosbinc ccal! sDQD 2
DDp
calije nocíjep acaso!
nocí: lods'canti al,í5 jvolvsr 2 obtener =3 rsg
n
j/i
o
in
un
ui
u)
rto
'-•• n
ri
E?
rt
ui
a"
ra
BI
ID
=>•
~l
O
ui«
Is
J O
- i-
-
rn
»
oí
ri
PJ
¡i'
IU
ni
Cu
m
es,
r-t-
3S
ru
-a
1:1
•13
-a
ex
n
o tu
••—>
vo
-o -d
u
•*
-"
tu'U
tii
ru
LJ
iu
(M-c
: .e
; .(2 -u
íi
i,j
u
Ja O
tu
oí
u tu
•ci
m .a
t_
i
i'J
u-
Cl
O
03
U
63
c:
a
o
a
u. .u
.»-.
US
»e
tfí
o
mu
~.
-y
oa
ni
tu
uO
. Ill
1J1
IM
LJ
u
••">
111
O
O
inc ex
c£jD exDCP dipop »iEtC
icp short íinp2
adc sp,6ck
•rinp2; DOC Dppou bKOQD bxDCD SU
rstrsn=pa=o2 enáp
pubiic assea
asESC roc nsar
;£=ts SB si Ensaabísdor, QUE lisas 3 los pesos 1 y 2 ds>íEntrada! DS:£I apunis al strina por coapilarse; ES;DI apunta al luaar dcndE 5= tiesEc E! código
í-.Salida: DS:5Í 55 sltsrado; ES:S! es aíteradü; CX lonDÍtud dsl cótíiocj CV 5=t si hay srror.
push espllsh di
push axcidEQV ax.dsfflDV 55.28
SDV di,of{set transitcali enspasoíje errorsov si,Dff=Bt transitpop 2X
pap diODp 53
calí enr=trt
a==es endperror: pop ax
pop di
Ul
o
t.
1.1
o oí
ni
ui
tu
n
o
ac;
••-
< c:
ra
ía
><
=J e
a
-o
o.
o
u
-ra
in
-o
uU
U
l -O
U
U
-d
u-
-a
u
-a
in
ul
a.
ci
o
o
ui
:£js:ator ce porcionsá as códice. Po^ !Wtf« GftlvítZ.
. c a t a
public Xls rAddr jPo in te rLs t .Vec torZr
publiccubil c
irChillaserüeííaise
PtrDKsLinEüjEcSeq
p^^e,CoaaLine
FÍle5ÍZ5
FiUFtrEseFlagFinNoraa!
nEOlp
R3DLS
RggSp
REsSpñ=q5E
P.scEs
ReqDiP.sgSíRsgDsResCxRsaBüReoAxílan=
R5GlplmcRegCsInicRsgSpInic
TacFin
ú¿dbde
GK
OH
dH
dd
do
dn
^dbdb
d*dri
OK
dwOfi
d>íOH
dsíÜM
dx3K
dwOK
QK
dsdi*OK
'Chile. ese' . O25= t íu Í O í
4 diip (?}
0,0,0
oooo
i3*. Hay :, í
Regépíni:físgL'sinicKBO"sV(ir
ResDilnicFiecSiInic
F.ecí-xlüií:RsgBxInicFiaoñsiríicrlacsinic
ParSpParSs
PSPParsntPSPChild
lenchtíiaseilBytesrakar
FHandlerviíiree
storaorv5Íars~prv2PrsrvfrcPrsrvPsDvectorvsctcr2PaintsrLsiPointsrMstíierAdcrXísrProvnadaPrCodíns
TipoCoapECRegCoapECValCoapEC
RetardoTF
FLoadExsTablaSrk
• cedeeúm
loatíREOB
dwdncud'ri ?Ov, ?
dn ?dw ?OK ?
3K ?
• f.
d. •?
CW ?
du ?
db ^Cir; ?
dti ?dfc 512 dup í?)
d* ?de 256 tíup í?* ficns ds preservación d= inst. aniEriprdb 32 üuc i?»db 255 tíup (?)do- ? ¡arsé d= sreservació1-! de vector=5 di ini,dtí ?dd ? ¡aountador a la últisa inst, t=n EXHASTftide ?dd 7 . jdirección de transferencia tras U =j=c.dd ?db 30 dup (?)
_db lo dup (?)
do ?db ?QW ?
db ? -ibandera indicadora de si se produce retardo en;la interrupciófi ds trap Hag.
db ?db 409ó dup (?)
desensíoroc j ssEEi; srocproc nsar
jEste proctfdiaiento carga los registros con los valores de RBcoria.
pusntSus".
cuínr " v
c:v
?-?»Cv
rnovSOV
ÍBV
*3V
covadí93 v
a-vÍSOV
EOV
p-"'
£QV
andorBOY
reír,storeftegs
aubhcTestírap
CE
at:SJ f . f iCá tE
¿s.axc).
reofiü j a"reg«,b?regCs,cxresllü.d!;regBo.bprscSB.s:rBg5o,12 ¡cccacrisar e! CALI v los PUSHrecSi,siragfli.óirgnC= c:
recSs.ss
a« :ft)'=*iac5 nueve?cs.ílag; 55¿=ÍÍ33S anterioresbs.200h ¡dejar sclc U banders de interrupciónai;,bx ;d=jsr el =átado anterior de I en ílagsflaoá.as
endp
TestTrs: —prc: near
;Este procedimiento dstsrjsina coso sg coeporis h cosputadora en cuante a =:;hav o no retardo en l£ interrupción !, que debería oroducirse en cuanto sea Iila trap ílao, pero qus suele retardarse en una instrucción en cierto:uicroprocesadores. De ser e=te el case, RetardoTF es i, y de lo contrario O,!
DUSh 2X
pü=h bxpush dx
pu=h dspií=h e=aov £s.3501h :get vector 1int 21hBDV £X }S(jgrg
BDV d5,aí
SDV Kord ptr vectQr,bxSOY víord ptr vsctorr2,ea ¡preservar vector orioinel60V 3S,C=
EOV ds.asQOV cx.oHset ñíterlest«3V as,2501h }poner coao vector U direcciór, oe fiFTERTEET
XDr
D'.sr.r, f-, r -
ECV
ñor-
AíterTgst:¿éúEDVESCVEOV
CBF
i e
VaProfeadc:IdsCuV
int
popES c-
x.l
lac? *r. el stac*¡£CE Er: Ai
s oe vuEité ai =u:t
T.ras esta instrucción, aeoe sraoucirsE is int;-i hay retares, se 5jEcut¿ré s t? instrucción
¡restaurar staci;, alterado ai producirse is inT.aj;,5datads.axRetardoTF.O5S.O
YsPrcDadcByts ?^r SetardoTt
dx,vector
21 r.E5
GE
asSii
v=ctor !
rstn
TEátTrap endp
oublic EsüniqExUnlq proc
;-:5tE procEdiaientc1 coloca si cóáigí] d5 SETTRp.-LB inedia tasen te antes 02 iajinstruccián que SE dsssa ejecutar íprasarvando lo que eaiabd antes), Ejecutaídieiía instrücciorij y iueoo restaura eí código. Si la instrucción e= U R Eunterrupcióñ, =1 procedimiento ss diíersttts; se siaula dicha interrupción•,ds íoraa que se recupera =1 control un= ves ejecutada.
Entrad;
Retardo!?:
XFERñDDR:
ReolpReaCs:
DEben contener la dirección absoluta de Uinstrucción qus se quiere Ejecutor,DE'DE =er ! si hay que corisidsrar un retardoen IHT í tras h^csr T-l, O en caso contrario.Debe contener la dirección absoluta donde debetransferirse el control una VEZ íinelizado esttorocedisiento.
Contienen la dir=cciór- de la si
o
f*
C.'
«i
ci
a
u
o
o,
33
:rj
i"
uvac
rn
ID
LI
I -a
rp
m
ra
IGJ
-a
—
—
10
>o
-i n
•— 13
-a (/í
tnes
- ui
t3
oí
ru
oí
-a-o
ÍD
a-
tn
en en
en
o.
a.
a,
;ti
-*.
in
ui
-T3
-o
cu
ea
. u
» ti.
o,
K)
m
m•—
• lo
-a
a>
EU
ui
a^
ai
><
i<
•-
• :j
>e
ni
M
s-
-,-,.,,
M
-- -
--
=>' -
Ti
id
ro
5&
en
t/J
ra
- rt
f r*
- O
id
t.-
J fu
tr>
e/>
i"
in
<-t
r» ti'
ui 'o
i»
-r
a ru
<^
-
[U
ni
o
in
o
d
10
in
r1»
r 'á
,is Sií'.SF.cC-E s i . E s r• H E NüHSrC
;r: EitPé??re ai.;.'Eib
cr.s si.t íoush E co: =rEC:'je Ei f íSrcDüsh C£
ds; side: si :anuniar a ^ oes DVISS ar,;E'io'-E5EDV Q K . = Í ;p r£5f i rvar sstsBDV di ' .ofíset ítorsprv ;ES:DÍ áiunia a tiende SE oreserva E: cooigoflOV5t ;pre=Ervsr lócicn ar.ienor a la instrucciónZOV3D
ftDV 3K,d;
f tcv es.BXir.-...- c l t ¿« :E5:D! eoiirta e íiorid= 5? colocara PE3PFCBV a K . 9 0 9 d n icóoioQ o? rOPr y HOfCP: ci . tjne AlterCcbseno a l . a h jsi no hav retardo, poner el HOP antes flsl POP,-
d:Etosb :coloc=r B; código alteradoBOY al i anstoáb£DV as. 3501 h ;aet vsctG" 1push. os
EOV aJDV u5,t tS
BOV «oro ptr vector, esaov word ptr Y5ctor*2,es ;Er=5Ervar vector originsiBOV 5SjC=
iDV dáiSX
S3V dX,OÍf=et BÍtETEX
BOV ax,2501h iporiEr coi: vector ia dirección ds AFTEREÍint 21hpop osDDO axsav word ptr cs :dir ip ,bxE3v word ptr csidircs.as ¡elección del saitotov as ,£aatatív os , aüBDV ParSp jSpsov ParS5,5=cali loadRegs ;poner lo; valores de ios reoisiros
ouEíir j í l ag i er =1 stackc^sh ax
<<
*;
<•
<:
oa
ca
oa
ao
u
a,
se
tu
itt?
nj
s*
ci-
EI-
—
•-10
O
t.n -^
o
-fr-
eo
\n
rr
ru
rv •ci
ID
m
ra
-i
ui
r™t-
—.
*.
o
sa
ntn
•-
•<
o.
O
ID
o-
1U
C
L .-•
a
EJ
a
[u10
ui
K
n
cj-
o
>-
nim
*-
• ni
a
a
n n
o
n
-o
isj—
n
e=
nM
- n
j n
c:
o-
»-•
=a
=?
jji
o-
ni
ID
=<tu
<
a- -o
iu
»•-•
o ID
a.
ra.
s<
ex
<
ui
*:
-:
>s ií
tn
n
i--
[->•
Ej
10
Eli
5J
rii
x
ni
se
53-
IV
"O
IU
.>•
•: n>
lu
LI
I >
* •—
ri
~«i
ni
ui
ra,
m
rus fiaste vis E?
ftsalp
¡Sahtíe:X^ERADBR:RsqícfteoCs:
o=sa? ié cire:::; DÉ inicie in¡í-a :onc;:::,- nn=rr.inaüí..
í. 'i:¡:iu5ivé '
Deben contener la dirección absoluta ÜE 3ainstrucción oesos ia que se quiere ejecutar,0 si la condición =5 igualdad ae un registro
1 si la condición SE desicualcsd entre un
Ahí sxíífrsg Dará registres ñortales
61: váisr2 =1 la condición =i as fiags, sr est= case:
Dirscuión se tírairiacióri al -finalizar
::truccion ira= cmr.pl irssfipunisn 3 is prosii la condicidRífjQTÍí: Este rocEdiisisntD dsbe invocarse isedisnis 2^. v no Ca l i .
ÍSOV
asv
SDVeovEOV
d=,dí.rDXfXtsrAddr ;ereaervar el Xísrftsdrworc ptr Xí&r?rov,íis
ai,2 jcondicion de TÍao? —ReaConí
•t FlCcndRet ;si, -fijar terainacicr
¡oenerar código d= un Jconditionícaffibiar el códioo para que se proot^c-
8DV
SQV
iñd
or50V
jspRegCond:
soySDV
ffiQV
SDV
ffiQV
jepFlCondREt:
EOVsovcapjeoush
tís}otr5=: ^ICoailRsísord ptr XT5rñdc;r,íixah,Qíh3h,70hfayts ptr cs:cor¡dic,arIxüniíj
dx.o-frset ReqCondRstKord ptr Xterñaftír,dxTipoCaispECialRsoCospEC,ahV=lCogpEC,OxExliniq
ax.idatads.asFinríürealjiBoExitCond
fiaoseor
Condic:
III
fa
M-
-o t.) .o
-o
.-«
n;
.—
•<-• -o
-t
-t
ra
«4
u
13
•!
-*
K
13
-4
->
d
U
•-•,
•-
! 1_
J ••
".
«••»
—
Sí
a.
i_
i-1_
JJ
*J
ai
en.
a.x
-*
-rtf
x
-a *d
— « t
. i_
Ihl
»t
O
O
o
o
ni
o.
ni-u
-a
ra
ru
ja -a
10
111
-O
->-»
m
ai
d.
•a
HI
u
ai
ni
-iJ
->J
in
l=ul
iw
l :Eü dirección atsoiuts csi creai-tcirv
ESI =: ívjct erra--, 5>.ccCier,;-: sí
Borrst<- ! 1
Del&rkFt
eíBrsr.cií car c;re::iQ;. s
slisir*2r taeóiéri ios be noir<Dr=
cu=r axpU5P =1
pusr 55
fiCV
EEJV
PDV
ttOV
55, aic: tc-*5=i
e...
cité ctr S5:íc¿;,'!
01,!:
hrrAriSrjsp snort SrthFí
FinTab: stosbBDV ah,alBOV al.l51050
«JOSO VE fe
BOV
recCDV
sor»ov
c l , a hch.crax.b?.
&DV ax.dxstoswcíejap ' short FinñdBr
ErrñdBr:stcFinAüBrioop
ooppoppoprsín
ftddBrkPí
55
SI
ax
entío
uubii: OslSrkPiOelBrkPt croe near
;si s? líeoó a 256, erro11
jouarcar 2P. IB tabla E! núfssro del brbpt
j tarco activo al nuevo crsatccint
; poner eí noaorB an U tabUrc de retorno
;auardar dir°ccion sn tabla
US
•*•
m
--i
&:
TD
LU
t_>
.c:
i—i
oí
• i
--
U
Ut—
l L.
Ul
OU1
t/1
tu
3K
JS i_iL_ tn
ti
ai
cu
ni11
1
U
U
ra. o
. a.
ti
UJ
1.1
c:
na
ni
u
ta
ui
m
u m
-c
I—
oc:
—
'u,
u
•-,O
¿
a u
»-
13.
tiC
l C
i 11
1--
. a
a
o fi
t ai
a-
m
a.
B.srinrin:nav
ioooFinEncIísE:
cc
CV:
ci
ah.a
m*. riL X i V
=1
ói.ltalian
i FinHsbBrt
adc3 as
FinTsbiaB:suJE?
EnconiradüB:xor byta ptr S5:[di-íl],l
FinHabBrí:;pop S5
DCD ai
pop esqcp a?retn
TogBrkPt endp
j togqls =1 breskpcint
oublic EsxTatal oroc- near
;tste procediiiento ejecuta dssde la dirección ÓB inicio indiceos (inclusive);hasta encontrar slguno de los brsafcDoinU listado en la tabla. Si no hay¡breakpoints, 5= sjecuia hasta el íin asi progresa,
;Eniradai ReglpRsoCs:
XFHRftBBñ:
Debsrt contener U dirección absoluta de Uinstrucción óesce U que 55 ciiiere Ejecutor.Debe contener U dirección steoluts donde dsbstranstsrirse si control una vss -finalizado -SÍoracedisienio.
. T S D Í S Q= b reaKpoin i s . Cada une =5 tir, registrode 1¿ b / i=5, y £"i í inai o» le tabla PS ur* 0.L£ est^ci'arú 3E cada r2gi=:r:; E S S
C-t=éi Longiiu: Ion '.en iceC: I Kuf&ero 1 1 a 2 t j )1 ! ES-LEDO i l = "¡as, í = 2s=h. !
• o r r s c G s >12 4 Sirec:ión ansciuta
IRPQRTAlíTE: £si? procsáisiisnic deoe invocarse aediants un JHP, y ND eetiiantsun CfiLL.
CS.SS
án ,=2h :£ríCGT!ir5r !s dirsccióp áe 's: PS?1
2 ir,PSPChilci.íJX ¡Preservarla, 3suKÍsndo que ssts E= un chiltí
2 X . É C 3 Í É
se» wcrci pir íísrPrDv,fasSG1. Kord ptr )!r2r?rov-r2,B5ác« word ptr H£rñddr,oH5st A--iPríi!n=tso» Kord ptr Xísrf tddr^,c=
" jeJEE^tar la Driaera instrucción por si haoia;un breakpoint aiíi,
!EÍ bx.UsrProva;-, «ors ptr Xí?rí!tJ{Sr(hi!s:. vicrd ptr XT9rAt íd rT2 ,a=ce: Fiiilíorcaljí
jrí NoAcafaojs: dKarc ptr X f B r ñ d d r
NoñcabosfiD' dx.orí=5Í AíterBoToiCE',! SetTsrÉ ;por si hay un E H T j tijo dirección d= tere.irv =i ,QTT5st TablaBrke:v di j0775Bt BtorePrv2
Prsrv! es: byte ptr E5Í3,0JE FinPrsrvCE? byte ptr [=1^13,0ji Nxt&rkPt ¡ignorarlo si esta deshabili tado&:. íis.ÍEÍ-í-123c;v' E=jtsÍTÍÍj ¡obtener dirección del BrkPtK* al,«5:íbxl ;pr25E.rvar lo que hay allí-:v Cdi3,alEV byte pir 5s :Cbs3jOcch ;colscar un breakpoirii ( ÍNT 3)
i*: iii
NxtBrkPt:
e:: =:. ¡tje; Hilar* Prsr \; 2!*
r.cv ax .EOS ' i sr:-v CE. ;?Civ hDrc D;r V ? C t c r ^ . t ^
POV Kcrtí pir vKtorS-i-ijSE ;Dr5=9rv6r vs:ior Dricinalt t D V 5 X . C E
a&k Gá.asr.^v ds.oífsst ftíterb^Tci2cv 2;*.25G3h ¡tener caso vector 3 is ¿ireccicn ti e AFTES50TG1int 21 nf f i O V S S , € c £ L á
csv c=,ax
SQV as. Recio ip reoerer sjecucioriBDV scrí otr Cá iCETci lp .aKso\s
POV t¡o-¡; utr cs;
catíb Oeah ;JHP FAR
ftíterSoTois ;aqui 52 pa=£ si contrc! luego del hrsaiíDointDu=h axniiah a
aov asédateaov os. avECV C0.50
SEJV si.íbpról ¡cntener la direccióri OE rstorrECEC sx ;ior¡or=r =1 brEákoaintBDV word ptr pDíritsrnííí.ixBCV aSjtbpí-3]sov KortJ ptr poirtternxt*2,ax ¡preservar esta direcciónpsc dspop bppop ascali =toreRetj=cidBDV 5S,Soat3
eov ds,axaov Ep.ParSpaov =£,ParSsBOV 2b,ó2hint 21h ¡obtEnoo dirección tis FSP actualcap bs,PSPChild tes sste un proceso hijo?je EsHijo2
IX.
LJ
"Q
11-
ai
oí
m
oa
üT
i T-
Í"-M
.ti
•--
(n
o i-
- in
>-.
ai
tuia
in
ul
,n
»,„
...
tj
a o
Ul
-1
•-*
Oí
'ti
m
a.
•«-•
o
a^ ••--i >t as
ro -
o
-o
ra
-i
ai
«3
-^.
3
i- U
o-
o
i=o.
ai
X
CU
Q
J
in
ui
g.
S.
rescov
pop =1CDC C=
call 35:E£ ieriBascia-, .» t:ens U icnc. ce; tos.
ISDV ax.fiOV tJB.ó
les aíJEOV líc-á otr ):fer?rov,ar.EDV >:cr3 P- f" í-TsrPrDV-í-2.s=EDV v;:r¿ p^r Xts r f tddr .oHss t A r t E x l n s
fcntxlrs:DCE Ci
EOv aí.,Su£I£
fiOV ds,3S
ISE as.ílíerProvuov tinrd ptr X í = r f t d d r , a xBOV «:rd pír X Í E > r A d d r ~ 2 . E s
cap ajns rieátCndKQV s i .KDrd ptrlPrCocinsí-iC
ResíCodiiov E:,ofis9t PrCoálnsaov S3,*»ord ptrEPrCodlns-rl23
trEPrCodln5*103fflOV í'!1
rep c:vs«cíe
Fin£x!n;¡jai; :«=5rd ptr xteraddr
Exlns snop
near
1¡Este procBdiEisr.io TEGUCÉ la ssaoris legalizada para 2! procs=o padre a
•1¡I
O
í -O
-t-
1—
•
I U
ft
T—
M
01
V-
iB
C-l
m
x in
oí
TD
ni
-a
3<:
"o
iti
le -a
na
el
a
a
el
o
ci
o
oex o
.oa. ti
K: él.Ot'Sr : función reservada11': I Í1C'"!SCS'"V
iret ¡51, tir
!E: iir. ranijcit 05 ÉÚSlSr'C
¡s;, cE:ir :¿e VE esis ir.s
pro: 053^
lEEte croc°ci(EÍenta prsssrva U Esgantia üitód d=3 P3P d°Í orocsso Chile,i *
511= h ax
DUS D5
2ü3t! es
E3V 5:,Bt'f
tcv 3i.DCwV 2í tdE
BCV ?5,£í¿
rep EOV5KPDD 55
DCO d=
pop dipop siDOp CS
pop sxretn
SavopEpCnilc endp
public R5=t?=oChiÍQRsstPspCniid proc nsar•
;Ests procsdiffiiefito restaura la ssounds sitad del P3P dsl Child,I
BOV BijOTÍBst PrsrvPspIEOV e5,PS?Chiltíaov di.SOheov cü)4Ührep E3V3V;rein
Estí crccsáiff
ra^ ' £^f Q! J c
::-EiDie :rrrs
eovRQV
EOV
ftOV
adtíEOV
ser2DV
SQV
rscECV
ffiDV
acvfiOV
SDV
BOV
KDV
intEOV
S3V
aovCíQV
rstnChüdProc:
scvSOY
BOV
SOY
BOV
£dd
QDV
BDV
xorsovrepSSOY
intSOY
FiñRedLsviSOY
BDV
r 1 r. ' i " p y fc
a:,.6:auás,3¡;5S.ES
as'.PSPChildas,10hcs.as51 , SI
ai.DTtset PrsrvPrccx . iOn ;oreEsrvar le cue tiabis antes d?5dsaovE« í?BrCr-ild^lO¡Of 32 ovíe=£V. . =5
dsfs>
tíx,oH=st ChildNsuebs.Dííset ParBlochSKjíbCOf'-ParB^ssParSc,=p ; preservo Stact21 R ' ¡EXE:'ax.édJTc ¡El controi nc se trensíiEre si nav error, yds, a* ¡viene acuij as: 2ue recuosro Staci y rétemess.ParSs ;Note5= oue O e= 1 =n este ounco, QDF =1 :sl
sp,Par3p ;ce la función deí DOS.
¿x.ldata
dsjaxssjParSs5p,FarSp ¡Rscuoerir Stactax.PSPChiltías',! Ohes,ax5Í,oííBst Prsrvfrgdi, diCSj lO ÍÉ
BOVSK jRsátaurar lo aiteradc debido al HXEC
ah,62h ¡encontrar la dirección de! P5F de! iñild2íh ;crocs=5PSBChiltí,bs ¡Preservarle
ss^eqlplnicñeaíOi3x
EOV P.eoDs.axflov as,R»3ts3fiov ñ=ots,5í'S3V asov Rfcov aEOV RscSi.a*EOV ax.P.egDslRiccov üeoDs-ñr¡aov ax.RscCí'lr:-:
QOV Regfix,£)!»cv ax.TiaosInicBOV íl5QS,3S
retnñsducsLsvel sndD
¡Uc SetTeríSeiTsra prac
oracBCiEiento fije is dirección de te reí nación oel proceso nijc.
tía: Di! = dirección o= ts
SOY aXjPSPChildaov =;,axEDV e s i Ü Ü l j d xÍDV E£lti2].C=
retnSstTerc ertop
public SsveFilsSavsFile roc ne£
¡hEte proceaifiiofito grsba en el archive se nosbre reorgsentsüa por un ftSCÍÍZ;en FilEiJase tíesdE la oosición indicada por FilePtr, e! misero de bytsssrssultar.te 05 íFüeSizBl-ÍFilsPtr). D£ tretarse dg un ooáulo ,ese i tssFlac=I),;se sraoó dEsde PsrBIocktí5ííf2:0, ds lo contrario, de5ci= RssCsIniciíOOh o Oh;=Eoun sea o no ur. irc'niVQ .coa. Ho se pu=í)e Q=nerér eobulos ,exe nuevos.
iccibanc
BtW G«. lJOt i
ÜEIOS: EDV o=,KeoC5¡r.i:
Dt
intje crr5aV=Fi:=
as.rsFirBaveje
ErrSavsFils:aov as, «sataesv os, asECV bx. -HandUC3v ari,3ehIPÍ 2!rsi::r;r =ri:rt F&8-.
r ir.;: 5 ve;
intFSsv: DDC
03 Ü
DOp
poppappcpretn
tíí
abs
jgratiado iodo 2xitQ52£Bnt&"
r ar^nivc, BX ya tenía el handls
public Lo=jEx5near
¡Este procsdisienta caraa el archive cuyo noibrs se pai¿ COBC píráaeirojs =5te proorsiss sn el PS? del aroceso padre, ai íinsl asi D5P ósl hijc.¡LUEGO calcula ío= valores iniciales de los seiinorEDistrcs, y cesé los¡siguientes psráa=trD= al PS? del hijo, CV es 1 ai 55 BESÓ un noaure 65¡archivo incorrec^n o 51 hubo probleE3= al cargar el archivo.jQbtiene la posición del Load floduls dentro del archivo que se carga.
¡ftdeoos BE rs torna la siguisnts iníorEíación en FLoadtxBi; O si es un archivo .exe; 1 si 55 un archivo .coai 2 E; es un archivo de datos; 3 =i no se =£ especiticó ur¡ nonhr= os archive; 4 E- si archivo especiticaoo no esiste¡ 5 =1 no 55 oudo caraar el archive .ese
O
III
L-
o
-va
« ti 'ti
1.1
•i
m
ni
era
-H
ratí
m o
í j:
.u
».-.
o
j LL
"HJ
f--
li-
o
•»
--i
oa.
—
- .c
-O
t/3
en t-
(_
a •—
•i-
ro
-i-
' a.
—m
-«
o
, tn
a
ü.
LL-
ni
(X.
•—
(a
-o
\j\
O
>"
— *
en
a.
ui
ra c
no
ro
ni
ni
ni
inuJ
t_
iC
" ai
ai
ai(K
ct
:
au
no
o
o
ci «
a
ei
tu a
ej
-o•
-t-
ÍU i-(
- .c
: tu
-t-
i o
o
•-*-
c:
u.
a
-o
a
-w
u
ru
u
»g
ni.
u
111
*l
C3
o
ra
1=
í;
ti1,1
•--,
—,
Hi
(Z
ia
-^H
-r-,
'--^
lll 1 :
lll
*.*
L lll
1
(11
ji u
4-
>
• 1
-ul
*U
II
7*
II
'«-4
' T
Í
.- .
• ; «
>.
i1 — i
r:
^f
-~
' *
- -i
m
>-»
Ql
11
:<-
m
r~»
1-3
.
lll
i; ni ** u '*.'.
" ¿-t CK ni
i— *
~£ • ~t
•-«
l-U
u
X.
0)
r—i
f-l
ai
x r¡
>c.-
, lll
11J '
), t.
t .1
lll
1 1
. 4 •-I
i: u.
-c.
o.
— •
rtj i'ii
L.
1.11
til
H,
ti.
L
L.
in
> i
ip
11
11
L..
t
Ji
TC
•.)
^1
U -*-' ai
• '"
¡u
ri-
i~U
I U
l ti li- -VJ cu • t- o .1.1
L-
I"J
«T
- -. .c:
ni
t*-i
-CJ rs
^-O
O
C 14-
m
•*-"
ni
ro 'O •tu 10
^-4 - ra
fO
Ll.
• -
oí-a
la
j
•« .e k,É
^ -•
•-*.J
í
Ot
ÍH
••*-
JM
"¿
.a i —
m
ti-, k,
t— i
.t-i
.£=
d -C
i
-—
a*
" -«
S
i— '
™ C
J
rn .a
xi
ce
M J3
r-
<-
J5
u
ai-•
-i»
— .
-^
LJ
l-J
o>
-ai
xi
ii -m
ai
-.
Oí
.0 n;
Cl
tu iS ro
"U -— *
-•" i
- IX
jXl
O_
Lt:
ni
ni -
UJ
fí
-
1=
1
a:
X
íll
<!'
—
Cl
3C
Ql
n)
ra
rú
ai
tu
ni
ÍJ
Cl
.í=
id
«s
uo
o
o>
5-
>
>
>•
ni
io
m
(-•J =r
es
.f-
i>i
M —
es
c*i
f\na
--
J —
i •»
-! ~~
J —
j cr
- ra
-
es
^~
^ es
c^
" es
es es
c>
oe
se
se
se
so
es
or »• :ir
u
- X
3-
=T-
=3-
=r-
e? o-
c? o
'o
e> o
O
O
-HJ
C?
<2;
e>
<?
O
O
e>
es
un
-i»O
e>
es
O
<
<^*
-O
•:-
"*'K
P
—
«U O
O
í -c
» i...
Jsr
»•
13"
ÍT »'
n
i
es
<=
• es
•o o-
í-
>J>
o
Cí
O
r:i
ní
e» es
«^ '
rr
-sr
sr
¡3
^i^
> «•-
,-. e:
>
es o
o
e>
eso-
e?
es o
o
=r
3-
^i-
nr
rr<=
• c:
- es
es
o
^"
C5
ri
-i-
rr
es
e:'
es o
O O
o
es
es
e? o
o
«•
es
=1-
=3-
=1-
-r
=ye>
e>
<^ o-
o-
es
es O
o es o
o
o o o
o^r
Si'
n-
í?-
O
'
n
>-••
cu
>n
-o
ca
cu
a
—l
~fi
TI
ex.
trj
t-i
le-
ix>
o
o
•-
fa
ni
r-t-
ss
tO
'/.I
3
i-
(13
O
'I
.-—
"I
-
.11
m
tv-t
-o
-&
ra.
C3, a.
r-t
--
en tu
tri
a.
tn-
o,
a.
ex o
.a
es. a
n.
n.
a.
nú.
ni
fU
"O
U
Cl
ra
rs•-<
ti
O
o
oí
ta
>ti
ni
-Jti
_ c:
=s
ai
ni
o
Ci
ni
O
ai
11
o ni
CJ
Cl.
Cl
-O
ili
iliiu
cj
u-
-u a.
3 -
u
—ai
ca
ro
•—
ra
ro
ura
ru
ra
>--
a>
oítn
u
o
ni
ra
-i-
\j.
u.
la.
..l•M
ui
ai
m
ni
o
=1
rd
c:
m
u.
u>
ai
*«
-el
-o
_
tu
ai
ai
ai
Hi
ui
n*
ru
ai
oí
ni
m
m
ru
111•C
) T
J
CJ
1J
LJ
Q
o-
(-•
r^-
«i LJ i.< r*i
. *
-i LJ
r -.
(-- ir:
•tu o a • i- £ : X]
•> l.T U.,
1.1 O C-
Cl
« t> iz: >
L.
O
i-.•"• II
0 tí
O
ti
L-
i.ci
-i
u•c
iL. O
1
n E
!u
i.:
*•'
LJ
f : i
;-
ra
O.
íT>
•=>
;->
—•
ir>
•=>
•se <n ta
llj
IJ.1
-J
^ ;
~'
~i
C3
I'L:
-_J
_J
CJ
IJ.
-l.i
T.í
TZI
1O
',
^
*~4
e
e
13
a"
»H
O
U-
.•-
— i
LJ
ra.
:-•
>
>
5-
c:i
i '-
ia •^^4 a i— a
en a:
i — en en
tu n:
"a cu ru L.
í^ ^£ en Cl.
-a ^e in a.
>
<U> - O
na ,
L73
ixC
.J
t_3
ti-
<cuí
tn
TU
C
J
LJ". .it
1)1
Ifl
> >
—<
C-l
a-n
a:
a:
ij.i
i-u u
íK
n
X.T
at1
CJ
(._
) —
i.o-
a.
ur
C3
Cl
T
-CJ
-13
"IJ
-— *
C
"'l
69
U!
ri .
u
LJO
LJ
t.>
>
>
-J
-C
.»
-^>
CI) IL
.3,
: '
- - U
í uu
IU
Cf)
C
DÜ
.
V .
• - i'
1 t-'l
t»
i. . i-
i lU
. rj
.
Ci, C
utu
i_
í rr
i cj
o
c3<:i
(_1 !„! tj
(..5
O
•^j
-ca
"in 'ij
x)
til
uí
Otj
l..
••-
t"t
O-I
C
-l
(U
l~l
1.3
1.1
U
LJ
' IX
0
*«
en o-
o.
<^
- -^
LJJ iii
- -•
•;_>
-
• C
íC
-.J.
CH
| X
C
_J
-
3E l-
-
C.)
u.
ü.
MI
un
ci)
—
< uí
Í.M ar
en
ra
nt: «a: i.u
cu
«a: ai
ncí
ca
ra
ca
Q: d
.x.
LJI
r_j
iu-x
j"c
i"u
j"C
J"e
i^c
j'O
''3
i t=
1JL
: -ib
•
uí
ni
cc-i
Oí
-J=
"J
'''i
c:
oL
J L.I ti
T.5
V
- -E
J (T
III
LJ
> >
>
>
>
>
>
•» >
íi
<r i» LJ
^3 ur >u .a u •>•
.1^
ce:
ca
•—
•a:
1=3
Ü.
U.
— i m
ü-
ii:
•Vi
TJ
iá
i~o
•••<
c:
-ul- U
> >
— vi*
(K.
._!
O
---i:
»:
=»S
K
O)
i—.
UJ
u-
o:
Jín
JT
J-d
-w
tt L_
Ü d >
l*-
U
^>•
>
O
-S'
*i
-
-•
- .e
n<£
X
— .
1>
~1
ffi
Lll
•—
*-'
S3
t.J
U
J
1.1
LJ-
ni
to tn
sa
i35
«r «i:
tu:
•a
-a
*o
-o
— .
£--
JLJ
LJ
t3.
o-
m
uí
S3M
- ni
m
u.
5-
5-
>
?•
.•Sí
n;
ii- t J
«r
o;
«.«
3E
--
*
C J
LU i'i.
SÍT.
_l
m j;j
..J
C_J
11-
13
-Cl
JJI
-ci
-o
-ci
Itl
rt
LJ
n.
e_
o »
^'
U
>-!-
> >
>
•O
-O
Cl,
<l.
>-
;>-
<x
<c
jj
_
D
T;I
-o
t.i. .il
>••
i-
ni
m> >
•O C)
*ir JÉ
X3 -o .">
•'III
>
o-
UJ
s^ •ar. .tí
•ta ni
>~ ra -*
x:
<c
.t3
"t3 t* -K
*m ^-
O
O
(U
(U
TO
tO
O
,
o
o
o
o
ou
t
i a
-a
ot?
w
o
"
o"
et
o
ra
ci
is
»tn.
iu
ui
cv d
.
o
o
a
ci
ci
o
u
ci.
ci.
ra
r. -j
cr
CT
3>0.1
m
iv
t~i
•J-
-'.
rti
•••
—
cu
rn-
ci. ti
e>
a-
iu
o
O
(n
ci
i—:K
rn
—i
ci.
n [
i--
-
a
iv
o
o
'T
a
--
O
Cl
(
C-
a
'c*
ctn
ca
03 «i
t-it
i—i
i/>•i-
-(.
.(-
,|.
i.-
.iK3
t3
en
rj
j
3-
m
tu-
•
(u
ru-
-di
O O
n
O
Cft
Cvl
a.
-i
en
tu
tU
i-
IO
a
t.ci
- O
- ->
-•L.
u
1.1
ra
L.
r:
i:. LJ
U
L3l
1-
1l_
] lil
1.1
LJ
"Cl
LJ
íu
..i
ui
.-1
L.I
i~t
IB
i.u'
IH
L~
-M*a
oí
••ni
a
i—
-
-i
- -
ni
o
t--
ra
01
LJm
ni
(3
ro iij
>ii
c
m u-
" U
J
OL..
o
ci
O
»"•-
k-
t.J
ni
tft
x -i-'
-O ü
u,
«
13-
•«
£>
•"
tj:i
ni
tu i n
-"
j
ci
i_i
«
-i
ci
m
.cu
c:
ai
ai
si
ai
es
íl
-• •
-. i
.u-
ui
-a
ni
ii
t-~
lll
k,
•-«
p,-
L.J
a
'o
irt
U lil
ni
m
in
í)
¡a
ni
ni
1.1
U
O
L.
-Cl
LJ
—
11.1
_J ti)
<X
U
l L
.I
Jí
LU
I.U
U
l C
"
LJJ
3C
Ul
™ II- L
l.
VI
13
"C
S
13
"C
J "X
3
T.J
Tí
-u
-u
-UP
-l
£1
O
ili t,
;*:
LIÍÍ
l.l
Ut
I/I
lll
e,
n
*•:
c:
ni
;»:
ni
uj
EJ
«i
¿>.
.r.]
o
™*!
o.
ii)
c:
oí
ai
oj
aU
l U
l U
l •>
•(-
cu
aiKI
ni
ni
aio,
a.
á., á
. el
a
i—ye
'i
li-O
03
DI
ni
in
o
a
a
o o
ai
e
a»
uj
mac
oa
oo
ai
ii
&
si a
e
•o
LIJ
a
h—ro
LÍ
J
o u,
iu a.
iu
o.
DI
ci-
o.
c;
ut.
tu
ra
a.
ai
in.
ai»
« «
c
U
-—i
M
•«-!
vr t eilCSl" ^ j t r£»'Sr6
ilC-í i f ¡ -¿ ,r.CT3-
r r *-(-.;*•^c ^b. i-cii
es!! p:eii¡5;cp sálica
raír! Jí^D rdíiin
¡ayuda &snii depuradorO ;EílTER, pasar
je rdsícae aopaux,0jne rdxfcep E0pauxl,60 ;F2?jns rdxíECV bíjCttset vsvtjvút ' a 'l i s í n 2¿rev?r=
cnnt i, 23tlecCont, reveráoatcnarcali
rdxíi jap rsfun jotras funciones
rpeí: jóyutía asnu ensaablstio:csp otroaiiXjO jENTERj pj= rdsíícsp sopaus,0ins rdeíícsp ftQpau?.í,&0 ;F2?jne rdef?IQV bSjQÍTsat vsys
vnt '= 'íiffipln 23,rsverslispln 2^}
print ÍQEtcharcaH pdebugjfip sa l ida
rdsíí: jsc rd-fun ¡otras íuncioriss
rtísí: ¡ayudi ssnu isaariccip otroauSjG ¡EtJTERj pasarje rd t t f ícap aopauXjOjne rdatfCBD ED05USl,í)0
jne rd&fíEDV bSjOTÍset vsys
f . cncav . te/ 1, 195: Pac= 203
vm aiifisir: 2 j , ri it-'lr 24 i^
cei: poebuJ£p Sáiiíñ
rccfí; jcp rdfun
jayudi E=nu ruptura :csp o t roóux.O ¡EKTER, oasarje rdrííccp (EQaaux,0jns r d r f ícap 800311x1,60
rdrífbíjoíísst vsyr
hspín 2iispln 5priiít ígetcñarcái i pdECucjap Balicís
r c r f f : jop rdíun jotras íuncionss
r n o :Isopnt :!icpÍQ panta l laBOV diníoí-ZjOaOhBBV d infor7 jOa2hBOV dif j fo- í -SjOtí íhCDV bx , offset v info ¡auestro ayudóf i D Y S X . C 5
aov s i jOÍfse t diníovrit 'a'liBDlr. 23,rEversliapin 2í,nomalprint lj23,T2cCont}revEr=getcharcaU pdebuoBDV sijofíset lOini j preparo y suestro linea Ocal! ffilinOfaov bs (of-fset vlinlSOY ax,á5iov ai, offset Üinivnt 'a 1
j ap sa l ida
cnackl : push axpush diODV d i j o f f s e t preseriíSOY c u ? ?
hcncay, hgy !. 1955
BDV al.Ochd: adc al,ttíi3
inc diiocp chki
je cfeííPUS?' SE
pü=h 05
cov ci.CTÍEei tabbu-i
C3V C
retí ¿tosopop 55
oop dipop asrein
ran: ;r=:ib2 eí ncBbrs dsl Objetiveca l í cfiEd:!haalr 23,r5V£¡r5bacín 24,ncrcal
BOV DQr£55Í,i
rrní: oetline l,24,3rchivo
CSD
jectpjf!2
cap
jeBOY
push
occcd¡flrrnícccodjlrrn!archivD-rírrní5Í,OTÍEst
B5
;E3C?
¡validcí?
,0 ~~ ¡V5CÍD?
archivaí-1jpaso a i
¡valejpaso a PSP dsl padrE y = FilelísitE
oov eSjPSPparsntHOY di,90hBOY ex,30rep soY=baov 2x,SdataBOY ES.asBDV dijOÍísEt FilsNaasaov si,offset archivo??SDV cs,BOrep Eovsbpop es
rrní: j&p salida
ral: ¡Recibo tasano del archivocali rrtOjsp 55lida
rríO: liapln 233reversluspln 24,noraal
i"
a
m
o c
10
-o
*ci
<
in<—
• n
EJ
•—•
=n
n
o n
i-—
m
in
o
o.
o 3
o u
CíJ
c/
J (n
-i
-
i— n
n
to
—
t.
SK
^3
[TI
^
ra>
o.
o-i
-•-.
o-i
)ti
i-t-
ID
Itl
¡a
ru
i-,
o
-i -
t-i-
i
111
É3
U.
—•
CJi
C-
-J
Cl>
¿u .o
nt
K»
V
- L
J,1(
1 tn
—
III
I»
-O
iT3
Ul
-
tí
I.J
C
J.
CJ
. i-\
T~l
U
U
'«-I
U• -i
t-
ni
ui
ci
o
ci.—
. o
. u
•<
-] ea
ff
l s
11
o
o
ta
ni
111 o
ni
-.-t
in
•—
111
ti
V
-. U
..O
í -
-
111
V_
C-l
Q
X
"C3
-J-
Uni
ti.
o
u
[fl
Oí
ti)
u [2
B3
•a
ai
mra
m
-a
es
u
ara
si
m
in
oí
>O
O
«I
xcr¡c £¡.5-s:hg faí.trrrv suí1 • 3"
C5V SUÍ-^ .Dí ,
PD: diaov di.i : ¡13-DL=i- ds lit&a ¡0-121K3V dh .OHñ ;? hnsa a r£ = 2 l t £ r= =
r:atíO: cal! chEúi2sov sx.ssgcoijc a l i pcrOCSE cK,reces ¡chinela? el CS9;re p:odGl:cp íi.regic reincide E! I??jns pccdO!ccv dh, I3 ¡si aEDo= coi r ic idEn, iir¡=£ dshesufa dh.tí!
pcodOl: GOV a^ ,auK jesiricc seosentc=to suaov ax ,aux^2S105K
acv ds.SBa:occal: d=5=nad=t ideáensasbio linea
f l O V Q E t O X
ad¿ EÍ.CS
acc di,29CBp bviE ptr ídi-n,1jrsB pcod3 ¡Si 1= íinea no == cuy larasCÍD =1,0 jpongo al tipo de instrucciónjne pcoéí ;AL = O --> byte ptrsav byte otr tdi-13,'3'jisp pcod3
pcodíí cap al,l ;AL = 1 --> nord ptrjne pcod2sov byte ptr ídi-H/W'jip pcod3
pcod2: cmp alj2 ;AL - 2 --> dword ptrjne pccdS jAL = 255 --> nadaaov byt= ptr ídi-11,'0'
pcod3: ose dijni pcodOpop 55pap 05BOV oroxin5,5Í jouardo dir. ds prox. paginssov axjds iventana Código,sov bXjoHset vcodJ10Y = Í , Q Í Í 5 S t COdíOtJ
vnt 'a'cap d h , 0 f f hjs pcod5 ¡no hay !in=a que resaltaradd dh,3f i O V í i i , Í O
Dpstí ir d l . d rf fov oi .ccciri r. i c ir-üv c^2á ¡resalte hne= C£:1Fc:v 31,70!-
p:cd4: stosüIRC diIccp p:oá4
pcod5¡ cal i pcrOO jrE=á!to bl;pt=rsin
checkí: pusn axoush diÍEOV a l . d i n f oxor a!,44hcap si,chi;2!jns ck2saov eS.dinfoiUxor alj¿7ñCED a l ,chk22je ck24
ck2=: ousri BE
DUSÍI ospop esffiov d i .o t í sBt tabbuíEOV £ S , 5
sav EX,2000rep stosbpop °E
ck2f: pop ""dipop 5Xretn
pcrO: ¡veo si fi!£:Sl perteneceri a TABLñBRK y si es asi.jponoo un í en la entrada respectiva de TftBRUP sijes punto activo o 2 sí es inactivos todoaov d i jDi ' t se t TabUBr):fov ch,0 jCH^I ds! bfcpt buscado
pcrOÍ: sov b!,chIEDV b h j Oaov c 1 ,4shi fax,el ;multiplico por locap byte ptrídÍTbx3,0 ¡veo si tersine U tablaje pcrQSCEP Edi+bxíl23,si jof- fse t ioual?jne pcr02 ¡nocep [dÍTbx*M],£x ;si, segaento igual?jns pcr02 jnoSOY a l , Ocap ídi - i -bxi lDj t í l ¡si, hay un fakpt. Dssactivado?jne ocrOl l
fíor.cay, Hay i, líSS F e & 210
p.rCl!;
ocr02:
pcr03¡
ocrÜO:
pc.-OOI:
•
p:r003;
pcr002:
prelin;
prlí:
prlll:
pr!2;
novin:ccvsu i[SOY
?Ctf
63V
jspiritÍK2
rtcdoretn; buscoBQV
HOV
ftOV
SOV
capjeEOV
CCD
jneSDY
fifOV
aodposdir•ovincaovcal!inccapjneretn
BOY
Í5QV
pushpu=hpopÍ30V
oovrspEDY
BOY
lodsbCEp
JB
scosbloopBOY
aov
al,laiDi,!:cí.clCÍ.CÍ-55Í
bn^Ocyts :-tr[p:rC3cripcrOí
BR 7ABHÜPnlinEa,0EljCfíSfit
bljnlineahn l>
byte otrípcr002ól. 1Dyte ptríper 003oi.70hch.blch,3Cjchdijpdtíirdial,d]rdcdOlnlinssníinéa1!3pcrOOl
b«. didijorfsetesdses_ 1 * '«íj
es, 44stosbcx,44dijoílset
aljOprI2
prllles. IBsi.oífset
:si!P.L=í activos, 2 inactivos
Tsb*i.'p|3XrDI apuna a ensaca sn TfiBRÜ^'
c^bsl.al¡salce¡preparo si-guiEFtte Dusouedé
U= lineas que tienen bfepts y U= resalto,
TabRup¡pera CSGB linEa veo si deba resaltar
bx+5iJ,0;no resalto¡resalte
3KT5i],l ;es activo?
;si, vi3£o reverso) no, subrayado.
-
¡resalto ~ casillas.
¡preparo LlNEflOlineaO ..
iprisero borro
íescribo LiNEftOlinead
¡salgo al encontrar un 0
jo escribir 44 byíes¡escribo noabres
díinO
ti,offset liEQVEC
di,cHE2t rssistes : ou-íter BES!ST
pop
xchg51D5B
S3V
xchg5tQ=K
60V
StQSW
BOY
xcrg
acv
tovxcho
SOY
seno
Bá
ss.tegBpi!. sh
ax.RegÜsal j sh
al,ah
as.SsgEssi .an
;LEC ur¡ rsgist-c del usuario;ponoo H5B anies de LSB;y gusríJD er; el buíísr.:E1 orden de los registros es eljadecuicio sra la ventana REGISTRO,
SOYxcho
alahBOYxchu o í jStOSH
BOY 3X,
xcho =1.5ÍQ5K
aiov as,xchg a l } ahStQSH
cov ax,RegSpxchg al,ah
SOY
xcho
popfiOV
flOV
BOY
al,ah
esas.tís jventans Registrobs,offset vreg
i iT
cu
o
ni.,
-. o
ni
ni
u
-o-C
J o.
"I
nt
.a
-ra
o-
ro
ui
in
tiO
til
(J
Cl
O
LJ
O
4-<
O
l_l
O
-t-*
O
U
V
J
¡B38 IBSUQ'TS
5UE1U3A
AOS
AüS
£03533 lí
£?!GOA lí
O'XE
qtisAG8
AQ3Aoa
AQ3
AOB
AQS
a'od
5Uf
23UI{ti DUÍ
{5333
-1554.0 O S Í Í
x ' x eHSAOfi
f X Q ] ! T =
A03
ÓÜ3X
tíajADB
DUDX
AQS
AC9
AOS 13533
GpBnsn ap saisp gp -óss s íiunds 33!
5J5 ínG QJSG3JQ
SP
í p ' x p
A03
AOS
KSAQ3 d=J
X p ' S B AQS)
xp'se nq^sJ T p ' X B AC3
53 GDQ
gsnd.\03
A03
A£33
AG3 !S35üi:
KSÓA Is
S'JSiUcA.!
VJA
ACÓ
AO'J
A05J
:;: *"j 6361 ' I
toncsy. «¿v ¡. i95= ?ao= 2Í4
pstkh
ViiL
EOV
r.cvtOV
vr.i
B'jsn¡ECV
BOV
ÍÜCV
SQV
ÍOV
ffiOV
SiOV
SCE5G
fiOV
subaddí ü ú p
SOV
SOV
KCfiC
fiOV
sufcaddlooppopaovSDV
ffiOV
Vílt
rstfi
aovpushsenoffiQV
«ovCU 5 ti
XCííG
-aovEOV
ffiDV
ÍEOV
poppopQOV
repBOV
aov
TIéx .d ; ¡ventaría ASCEEIÍÓ X . O Í f s S Í V2Í3_ ; ,''--! _ - _ t51 , O T T 5 S t B!5Í2I
' a '
£S
c S j í ; preparo buí- far STCKEl. Í4 ;;2Cüfíria ccluiana.D S j ü í f s s t stckd i ,Cbp,r525p& E , r e G = saa,s5:[bpidi3al , ahEbx- í -= i3 j ax51,4
di , 2ps tk les,: jpriffisra coluisne
51';:_.,ai ,ahíbs-;-5Í3,asE Í , 4
di. 2pstk2ES-U -"- . 'J~r, }---!- C^-af-lrttSjUS ¡ V^ntsUe ÍJL3CK
b X j Q Í T S s t vstks i .Q t ÍEs t sfcci:'h '
ax , rBQC5 ¡pcr.go en EXPCOD ios valores deax ;C5 5 IP del usuario.3 1 } ñh
tiord ptr expcodjaxax , r sDÍpass l .ahword ptr s>;pcod-í-2,iKas,e(!sta ;paso 10 bytsí de código a EíPC1
B5.esd i j o f f s e t pKpcod-T-4=iosex, 10iovibsx.^tiatads.ax
c-edirordl:
ardí!;
prd!2:
prcí3:
p^dH:
prdlS:
prdíó;
prd!7:
prdlS;
prd!9;
prdla;
prdlb;
prdíc:prdlf:
prri2;
flDV
EOV
C.CV
fiOV
Víit
retr.
¡EOV
ravEOV
(SOV
aóddenactuar3H
OH
dwCQV
ja?soyJRD
ecvJC2
aovjapfilOV
jr.cB3V
jfspfiOV~
JfflC
fflOV
japEOV
jspfflOV
ífruffiOV
JKp
ÜOV
addaddBOV
BOV
BOV
decaddacvcíe5hractuar
=5,vi0ecs.egcr, offset vear.fls£i. of fset s"'h '
nhnaa,übl.nhnesbh,0sljOpcseoEbsbx.faxai
of sst prdlloí sel prtíl5cf 5ct prd!9as,RegD=prdlfaü,RecEspriílf"es jfÍEüEs
prílícXfResCsprdlí5K,tieQAxprdlfax.ñegBsprdlf"ex.R=gCxprdlí"3x,RsoDxprdíf"5s,REg3iprdlfaxjReaDiprdlísXjReoBpprdlísx jxxüxsec íbbx,bxbx,2áir2ÍLb3tl,axbl,nlineaal,Qpcoíf[bsalGK,bX
óx,0
al,l
sp: ¡presento verttans
CüíC
ísars cada iinss...¡calcule si secasrito!
] ; }BO cpcion de segraerito
;ía. oacion BS la cero;EÍI base a AL salto a una rutina
, of fset prdi2.afíssl ordl3¡ofÍ55t prdlí, of fset prtíííijDfíaet pr¿!7, offset prdíB, offset ordl2,cff5=t prd¿b;sííEet prdk
:DS
;ES
:S5
;C3
¡AX
¡BU
;CX '
;DX
¡SI
jDI
jBP
si ¡nn
jouardc =! valor del segmento
jcalculo E! Oíísst:3 j leo opción de offset.
;sl despl. sera sutado luego porjío que calculo sin desplaiáffiiento.
;en base 3 AL salto a subrutinaoffset prd2!, offset prd22soíf5&t prd23
dw offset nrd24,offset prd25,oíís5t prd2¿dv. offset prd27,Qíí==t prd2B,offset prd29
pr¿2s: iscv ds,Rsp3Í ;Bí^3!
prc¿7: EDV dx.RegBi ¡EP-i-Sinrr!1?1?! sf;ri rs .nsf í in < 5 D
prd23: aov dZ jRscS i ¡51
jiap prd2aprd24: S3V ds.RegDi ;D1
;sp prd2=prd26: acv ás.RsoDi ;5X-
adtíJSjj
prd23i cov dXjRegDi jBPí-Dl=dd dx.ftsgSpjep prd2s
prd29: aov dx,xxxxofT[bx] jXXXXDrd2s; sov ci.nlinea ;veo si d=bo suasr dsspi.
ÍEDV sí lODCcft íbs3ODV ahjsicncfftbx] ¡leo &1 sigp.D U o -)ado bíijOj;tíec alt°5t al,l ;si es par no necesita dsspi.jz prdStcap 5!í,'-t-Jjne prd¿c
prd2b: add ds,!;£xsoíf[bx3 jáigno T, =USD dsspi.jtp prd2f
prd2c: sub dx.sxxsoffíbs] Asigno -, r=5tD dsspl.prd2f; sdd bx,bx
lov dirSUbxljdx jqu^rdo él offset.prc3: inc nlinsa ¡fin óel lazo
cap nlin=5,5 jíin?je prdíjap prd! jno.
prdí: retn -
preopc: aov ex,75 jpreparo buíísr rtEHQ! en base 5 ÜIRíEQV dijoffssl ffisao2 ¡y «EHG2 en bass a DPC5EB, QPCOFF,fsov al/ ' ¡XXXX5EG y HXXOFF.
es
pop B5
rsp stosb jpriasro borro HEii02HOY di,offset BESO! ¡escriba fíEKQtaov bx,dirH2 jseoasntosoy QXjdirl jofísstoov cXjB .(scv bp.bx ¡guardo Bí!.
popcí: aov bs,bp ¡escribo direccian°5
-O
ÍU
M
f—»
iil
ra
O
ra
i o
oe*
t a.
i —
e>i
10
— •
LI
i»
->i-
o
—
u
oí
ij
xi
o.
ra
id
-c?
-a
ci,
i-u
n.
tura
. ra
-r
a
-ra
ci-
C-.
ttü
X
W
l»<
m
ti
-e
r•a
u
a
s -c
i u
ui
—
• u
10
n» •-
-cr
j^
.-•
_ O
ra
ui
ni
.—.
JC
ni
u
ti
.1:
iJ
HJ
O
tD
Ü
Oí
TTJ
>
>•
13ca
oí
ci
u
>•
j=
O > o
ai
o
u
-o
n
o
*s
O 3
n
ci
nj
a
O19
K
W
V
I E
SI
-
-^
—
c:
a-
o
o
o
o- -a
o
O
O-
-O
o
ri
o
o
o
O
ra
O
es.
a.
ni
••
-i-
Ul
in
ID
in
in•—
id
di
?:
n«C
L
CJ
»•<•
o
o
cr
-ci
w-i
n cr
je
LO,
ta
iti
1 ••
• U
l !•
«•
O
n
ttonaav, tey i, ;9S9
usrorc• - ? ;céli pdsbíic
:Corre nasta i a ocurrencia Cs un evento
EOV «ore ptr x irr&ccr.o; '==i ^sEjh==i^ov worü ptr fcTsradrir-^.csctr.£ íoocccrre.C ¡Ha=:a cirecnon?;s rdcdjcp rdcc
rtíco: icv a>;,R2gC£ ¡Ccrridi hiEta cierto puntoeov word ptr dh?xl*&,a¡isciig aljah ;Haga ous CS usuario 553 seq. prsdei.push as ;para lo que sisulo condicionesr.sxascpop axSCtlQ üljbil
flov woro ptr dhssi-r2.bíBDV ciitcorr,b?EOV a t ,=hnexascxchg bljbhBOV Kortí ptr dhsxí-fíjbxaov bnícorr^2,bseov byts ptr dhexi+1,4
rdcdl: s.ov bx.oííset VÍIEE jVEntana para recibir datosSOY as,ds
~ sov sijDÍíEet buícorrvnt 'a'printaovcep byté ptr buícorr,'_'je rdcdlisov ax,' 'EOV
BOY
jsp rdcd2rdcdll: cali rdcdO
geidata !0,20,dhejfl,'h'resalto caapo de ssgaentorecibo ssoaento
BOV al,atrprev jquito resaltadoaov di,dirprevcali rdcdOIaov gdresEt,0cap occodjO jdato valido?je rdcd2cap gccodj? ;ESC para abortarjiie rdcdí2jap rticf
rdcd!2: cae gccodjS jTA3 para pa=srjnE rdcdü
Koncay, *=v 1, Í^ Pace 22!
rc:¿2l: c»li
ftOV
C 2 l í
BOV
CE¡¡J
jecmpjnejaocao
gdreset,!rdcd&O jresélto caapo dé 0-15=1S7,2G,driE¡;2,'h' ¡rscis: oííssta":,=trerev ¡cuno r==3'.ífiocdifflircrsvrocdOi
rricc22:
rdcd3:
ICctO
;E3C pare abortar
;TA3 para pasar
JESusrorcffOV
60 V
2DV
gccotítOrdcd3gccod,7rdcd22rdcfsecad,5rdcd2írdcdl
¡Pantalla ÍÍE usuario<—>PñCóx.HDrti ptr dhBx2í-¿wcrd otr pointerUtjbxas,«aro ptr dhsxH6ward ptr oointEri=ir2,2x
rdccl:
rdf:cí2:
rtícci3:
rdcc2:
jfiD
BOY
vníprintBOV
calicercharftOV
aovcalíCÍO
J2
cepjnejapcipjneCEO
jnedsccapjneffiGY
jspCfip
jneinccapjneBOY
jspcali
=sna=ta•DX, offset vcond'a'Íj23,123ccjrev9fniinea,0rdccO
al,atrorgv_di,dirprevrdccOÍocccdjírdcc2occod,4rdcc!2rdcígccod,5rdcclgcascii,72rdcci3nlifieanlifiEa,Oífhrdcclnlins£,2rdcciQcascii.SOrdccln lineanlin£a,3rdcclíjlinsájOrdcciBSSDC
¡ventana con iss conniciones
-=¡para cad= linea,, .¡resalto Unes actual
¡quito e! resaltado
¡EKTER?
;ESC?
¡abortar¡especial?
¡sij arriba?
¡si
¡ abe jo?-
jsi
¡restauro pantalla
PfiO.ftif hondsy. fey I. !?£9
cali issucap n H n s a , 2 ¡conciciori de bandera?jre rccc2lje? rscc5
rdc:21: CDV b*, oírse! vrv ¡ventara aira condiciónvnt ' 5 'l iapln 23,rfiver5 ; reg i=zrü = c O X S X Kcrint I , r3 ,123rcf i r sv5r=
eco r,hn83,0 j igua ldad?35 rócc22sov iouaH3,0(i8h J R D , ae=igualdad
rílcc22: print 10,20, igüal,norsalDOV gdreset ,!
rdcc223:gBtlin= 10,20,noQrsosov gdrssst jücsp gccod,4 ;ESC?JRE rc¡:c23ja c rdcí
rdcc¿3: cap gccod,! jrecibi un r£g?jne rdcc221IDV si.ofísst ncaregr? ¡si recibij ES TEQ, noraa!?aov el, O ¡en CL enviare una banderacali EncRsgjnc rdcc25sov cl,lcali EncSreo jnc, s= os 529105010?jnc - rtícc25liísplfi 23,rever5 ;no, errorprint 1.23,noé5reg,réVBrs ~
SOY tíctp al ,27
jsp rdcc2irdcc2í: jsp rdcfrdcc25: jaqui.ya tengo el registro, ahora recibo e! valor
aov a u j S j a xlispln 23,reversprint l,23,123capr,rever£soy gdrsset,!
rdcc2¿: cal! rdcc260 ¡resalto el campoc»p el, O ;rsgistro norasl?jne rdcc261test bylE ptr aux,8 jsij 8 o Í& bits?jnz rdcc2Mcetdata 17,2t l J dbyt& ) 'h I ¡3 bitsjap rQCc2ó2
rdcc2£>i¡Q5tdat3 15,20, dliexl/h* ji¿ bitsrdcc2¿2:aov górssetjO
cap cccod,? ;ESC?jns rdcc27
Oí
JT
L~-
l C
¿>U
—
«I J
-i:
.—
-o
co
O,
cu
ii
ni
LJ t
, .a
i.
u
u O
a
—
M O
i_i
u
-.
LJ
—
LJ
Cl
TI
—i
K
,—i
>Cu.
L.
.-a
cu
-u
UI
-i-' .«
iir
> 13
^a
ra
-o
LJ o
u
~
«
LJ
LJ
U—
J
-rf
-d
U
ID
—
••-<
-U
- 11
1-o
u-
j u
IT
J ai
O
LJ
in
u
LJ
u
ro
u
i ui
10
u
in
iuc
u
c
LJ
ni
u
t=-«
U
•—
« U
01 U
•-!
n.
L-I.
ni
1-;
í£
t,
*~i
CJ
*i
rn
ti ti
o
o
ai
tí
oC
L
>.
-*J
>LJ
ra
. tu
i—
ui
£9e»
o»
m
ra
o.
nx. n
n
O-
n n n
n -i
"-
~-
~~
Jt3
13
c.n
•=• -i -i
=?-
i— a.
-J
'fu
m
--
—~
—
C3.
O_
O
í !-
-•^—
< S
J-
i_J
o.
CL -=>
10
—
n
-
n,
o.
i--.
o,
»—n
•-
n
raC
-'l
ID
O
=1 n
PR3.A5ÍÍ ÍÍDiiday, «ay I, !95? Paos 225
Jff lprdcc2-iO:pc?stíir
fflDV
in:IÍOV
rdccJG215.20rii,pdtíirdiaí,70hrdcdOl
jaqui ya £E hace el RüTN¡resalto caaoo de dirección
tatfui va se race ?! RETÍJ
¡ejecuta n£5i£ ruptura o -fina!
rdj ! :
rora:
rdrc:
T-drb:rarbl;
rafalla:rdblí:
rdbÍ2;
rdb!3¡
eovaovaovjspeov«oveov
calijep
2Cv
EOV
1 f
ffiovjfipAOV
BOY
liaplnlisplnoriniSOY
flQV
fflOV
vntaovcaliüetlineBDV
ccpjnejapCQD
jneC60
jnejopccpjnecspjecap
as.QÍfset rdjl«ord pir )¡T2rAadr,3sworfl ptr Xrsrfidtír^jCSExl o tal5K,^dstari=,ax55,VÍQe05ED
pdebugsalida
;=:tivD/GE5a:iivo bkptdhnü,4iihorno,! ¡bandera BRÜP=1 para activar/dessctivarrdrblbrup,2 ¡crear brspt, BRUP=2rdrbíbrupj3 ;borro brkp.t, 8RU?=3rupactjO írselos nosbre del irkpt23.revers ;RÜPACT=ruptura aciusl-124jnoraall,23,123bkp. reverábXjOtíset vrnoíi ¡ventana para nos-brsax,dssijoííset iiline'a'gdresetjlrdrO ¡Biiestra ventana de bfepts12,19,noabrk ;recibo nosbre del brkpígdresetjOgccod,4 ;ESC?rdb!2rdrbf2gccodjí ¡vals?rdb!5byie ptr nosbrtElljO ;si, pero esta vacio?rdb!4ríirbí2 ¡sijtersinoüccodjS ¡especial?rdbí!ocascii^S ;PGÜP?rdbí32DC55CÍÍ,81 ¡PSDH?
-cj
=i
,—.
-.
U,
CJl
>t
o --•
•o
u
iu
o
-a
oi.
•-
!•
.4J
—
—
-» -
u -^
--%
in
x
a. .c
>.
>
.3
ai
ci
u
Q
o
ni
u
o
a
o
o
h a - ; a > . Hay 1, 1939 P5o= Til
C'DV
C B D bvte ptr burcoT.1 '
rsicll:
rup!2:
n¡p2:rcp2i:
ruo22:
rtipS:
rdrb4:
rdrbfl:
rdrbí;rdrbf2:
BOV
rcv
_ . 1 *
getáataOOV
acvcaliBOV
CDp
j£
CCp
JI3B
jspcaejriEÉCV
cal:ceiddtaEOV
SOY
caliBOV
CSC
jeCED
jnsjspcapjnejepaovffiOV
EOV
cal!J6p
calijnclíflplnprifítJfiO
calical)lÍEplfl
printgetcharcalijap
ai,,'
¿u'r^rr!:"5
rup&29,2l,dhsxlal.atrprevdi,dirarsvrdcdOlgdrasetjOgccotí,0rup2cccod.7rup!2rdrbt'2x í
rupllgdrsset,!rupOÜ3É,21,dhex2ái.atrprevdijdirprsvrdcdOÍQiÍrS55t,0
cccotíjOrup3gccod,?rup22rdrbf2gcLcd,5rup21rupl
v
;rE=5lío caspo de seoasr.tc, 'h' ¡reClDO SSOEBntD
¡cuito rEsaltadc
¡esto vslido?
;ESC pora abortar
:TAB para pasar
jresakc cespo tís cfrsst. 'tí' ¡recibe offset
;ouito resaltado
;datc? valido?
;ESC pars abortar
;TñS para pasar
si, offset noabrk+2 ;ÍDDQ listo para crsar bkptdüjMord ptrOxford ptrftddBrkPtrdrbí íDelBrkPtrdrbí!23, reveráí,23,noesbrrdrbírdrOscod23,revsrsÍj25,li5t0j
pdebugsalida
dhexHidh=x2f6
j borro brkpt
k rpv3rc
jactualho Ventana de rupturas
¡salida QK con esperarsvsr=
jsalida con esperajsaliíjá. Actualiza pantalla
q q ' i q óipx35SX5U
oiuasáas oj^sansí ESi-rdq-rl^'.SQ'iE A0°
X * f [ Í K T P ] A0t
p'H ACÓ-rjpj AOK
' X c AC5
AOS
AOB
[ap saiAq oí oido^í [2itíq^íS]:sp[X5 AOS :i20JPJ
,t,'[2-i-TPij:í^ °^q A0í125-Jp-J af
O'í? ds sa is i UOD ODJS«Í
3S2X51J
}d;(jq ap j cóuooí [ac^isiisp1' js AQS5ST]¡n a¡ anj' tsí
siisp _n ae e .undE ¿grisí XE'OQ ACS
ÍP í"39{(I5 AQ8
=uT¡ ?pe3 ejedí o'Hauuu AQSdn'J¿ng ^asifo'íp AQUÍ
Vg5[q5| 13SJÍQ'I5 ACB
sa dc¿q=D}5 dsj
sa dodsp qsnd55 qsr.d
I)' 12 ACB
891 'H3 Aflí
3=^ejasaa e j- -onj ep 1=15;
acsp ano ja spsan (¡-; ejruanj sp s {a !JG3 ijtfcílíj sást í 335!•taj [3 ooinpuT inos: [i)dnj dnf
ygi'if^ Jicsodiaj 13 e:=s Tr.csí I'-P-pj C'-"
l|E'Aajdj'+9 ACÓ
T i ' s a ' s AOÍ
'Tp ACÓsp adas: c:[3=5JÍ 4SÍ '4Pí -ítpsaá
fiisf, hay I, 3989
£¡DV
KCÍIQ bljbh
-criC cl.bf1
cov ídi^njjbsEOV 2! ,d£í Í5Í-:-&pT!23
xchs D i . D f ;¡tcv íoii í?3,bxinc nhnea ;veo =1 terain» la ventanainc d!add di,2!cep nl inea.S juego a ultisa linea?JE rdr03ccü t i l .O jultiss ruptura?JE rdr03jiEp rdrOi
rdr03: EOV b x , o f f s e t vrup jeuestro la VEr¡t3fi3EOV 3X,tí5
EOV á i j ü f t s s t oiítriipvnt 'e'rstn
rdrü feusstrc vEntane de bkptsaov rupsctjOiispín 23.reverélispln 2í,ipriíít í,
rdrslla:calí rdrO jeuestra ventana QE bbptErdrfiih getchér ¡recibo orden dsl teclado
jns rdrs!2jsp rdríií
jn= rcrellrdr(6!3: cap gcasciij73 ;PBUP?
csp gcdScii.Bi jPBDH?jns rdrfill :no valecep rupact,2í7 jFSDKja rcretíadci rupactfSf f iDV 5 Í j !6
aov dj rupactsul eladd ax,oHset TabíaBri:ffiov si,axcap byte ptr EsiljOjne rdrElia
Pso= 2 -
rucact .EJQQ
c*"" * ¿2 ¡ cf'í'j*SUS
JEC
rcrr.:: calíC£lí
CHll
jffiC
riioact.Brorül ía
}restauro panto i lasre
rtíi:
rdi-i:
rdi3:
rüií:
rdee¡
liSDÍr:
lieplnprintflOV
getünecovecojneT O S
Cff iD
ED'v
DOV
ÍOV
fflOV
ROV
iaov
aovEOV
soyjncluplnprifiíjfipcaílHaplnprintQEtcharjsp
calisoyl ieplnluplnaovaovxchgQUEÍÍ
hexasc
I,24,in5bufodre=at,í!
rtí2ráiíaccoc.lrdii
¡rscibo neaotecnico
| ESC
| ESTER, dato val ico
bytsworé ptr SíEríddr¡Dff55t rdi3 ¡dirección ds retornoKcrd ptr XfgrAddrr2,cstxlnsix,§d05.3S
rdi423, reverá
róiípoehiiq
salida
check2
nesotecnco incorrecto
| todo bien
24, normalEXjP.egCsword ptral,ah
¡ensaffibla una instrucción
¡pongo banderajiifipio lineas 23 y 2í
jensaabU En cierto punto>j3X
jHaao oue CS usuario sea ssq, predeijpara lo que sinulo condiciones
ni
er.
mi_t
ni
iiiru
••+
- ni
U
*•!-
U
l
—•
-d
o
in
u
--i
-O
a
u
ni
ui
ni
ui
-—
o
-1
o
a ci
m
-o
-a
tilui
a
fuu
ui
ai
u"C
I U
"O
«•-•
131
ai
u i-u
-a
o.
ex
ut
o
— i_
i_
ui
<r>
<=>
-4-1
•.-<C
U
"O
l>
í ni
X3
L-l
-O
"O
"C
í I —
.
ni
a iii
o
oí
ni
o
uj
ai
x
LJu
u
u)
i_i
oí
m
u
tu
tu
—c
uin
u
-O
u
"o
"o
u
"o
"a
,ie
ai
U
U
Cl
u
e
e
tso
ta
tu o
o
a is
ta
cu
o
oo
ei
mts
ís
e;
ocu
o
o
.ti
o
aaa,
ai
o.
cu
ui
F?:e
BOV a ? , H D r c ctr d n = í 2 ? 6aov cf.fccü.ó; '
o r in t í,23,!23sn5,rEver5 ¡incicaiüov gírese!,!cal! ffiespccal i estel iEsln 24,norc.£lcali rceEíj ¡actual izoce t l ine l , 2 4 , i f í s b i j f f ¡reciEio n=sov cdresEi.OCE; accod.í ;ES:?je rdesíCDD c:codI ¡Vals?
cov b l , i n = b i ! f f í l 3 ;BX = í da carscter5=:ÍD B l . Ojs rdseísor bhjb í if iOV 5Í .QÍÍ55L ÍnSBl lTf í -2
SDV byi= ptr tsi^bx],0OZV b K j = £
aov =5.KQrd ptr dhsxHóSOY di .word ptr dh=>:2+¿cal í £5=ea j=n=aiiblojnc reas*aov ps.bs ¡neaotscnico incorreEtoliipln 25(rever=prini l,2¿5srren5,revBr5getcñarliapln 23,rev5rsjsp rdssSiadd Norti ptr dhBx2^&,cx jpreparo prox.üov ssjbxcal! scüdcsll pósbugaov gdreset,!jsp rde=isov banen5,0 jouito banderac f i l l pdebug jac tual izo panta l lajap 5fi!iu3
dseOi posdir 12,23BDV d i jpdd i rBOV as,ííDrd ptr dhesH¿ jpone en UHES 23 U direccióncal i rdeeQQadd d i j i dCDV sx,«ord ptrcali rd5=00retn
: xctig a l ,ahDUSh 2X
hexasc
•ñl.A:" f isr iá ' . , '".£>' i, Í T D ?
DDC
CCv
BSV S i . é rfiexasc
rüEb: ¡ensasbla y busüá =n E! segiaentc 22 códicehispir. O.revsrsJ i f t p l n !,reversprint 10.0,en£hl,rpver=print 10,l,ensH2,reversl icpln 23jreverEÜBipln 24,noraalprint í ,23,en5ÍJü5c,rsv2rs ¡indicacionescov gdrcáet. i
rd=bE; l inpln 24.noraalrdscal: getlins !,24,insí3iiTrf ;TBCÍDD n?sD
BDV ccreset.O
jne rcsDS-JÜD
rdüba2! capjnssovcapjnejcp
rdebaS; xorffiOV
sovBOV
fiDV
aovfflOV
caliBDV
jnc
ra°[)ToccQdjl ¡Vale?rd=baibl,in=burf[13 ;EX = i ds c=racter95bl',0rdsbaSrrisbr ~"bhjbhsi, o f fse t insbuíB2byte ptr Csirbxl jO ¡iensino buffsr con 0DS,E=
ssjdses,axd i jo f fse t ínstns.2558IÍÍ
25, bu
rdebxliepln 23,reversprint 1,23,erreos,rsvErsgstchsrjsp rdabf
rdebx: push Rcalpnoy "bx,cx :busco en =1 código
rdsbst: aov ssjRegCs jlnicio ds busquedsaov dijRsglp ;en CS:!P del usuario.
ÍIDV cs,OfíHhcali s=archccp es,O jCX=0 si no encontró
jr:e rües!psp Rec io ;nc encanto:&cv es,v:oec=e-ci:c::r 2Z.reverstrir.t í , 23 ,N3EnEB, r sv5r5etchar
iisDb 23,r=vsr5 ;si encarare,EOV offcod.dipuEh bxpush dicali ecodpop cipop bxorint í,23j5ÍGD?,r=ver5 ¡busco prcsiaa?
rdabih c?tch2r
cep a i . í b hjns rdéb2J2D rdsb3
rdpij2: cifp s í .Odnjne rcESÍ iinc di jEUTEíl, 5Ígo buscandoEOVjsp
rdebS: pop RaglprtíEbí: IEDV si, o f f se t lOini j preparo y suestro l inss O
cali fi l inOSDV bs,üT-fs£t vlinlSOY ax,descv sí.oííset líinivnt 'a'cali pdsbug ; actualiza pantallajip Ealida
rdal: , j lleno un arEa de iseaorialiapln 23,rsver5liapln 24, norialüov bXjoffíeí vil ¡ventana para pedir datoseov sXjdirlxcng =ij2hoov 'bufaH2,axEQV ax,dirH2üchg al,ahaov buíel,axsov as , dsaov si, offset bufe!vnt 'h'print !j23,byte=?,rever5aov gíirBsstjí jrecíbo i de bytss
rdell: cali rdslO ;rs5a!to caspo de íbytes
-
rtl
L.
I,,
.-.
u
«3
(i~'
ci
— .
LU
-t-
—•
l-,
61
-
>
—
CJI
--
ai
ai
.e
C3«
i—
cu
i-
ai
ai -a
u
—É
o.
ai
o.
a.
rS
c;
-.-<
O
ci
o
n)
O-
Ul
CJi
••-•
Uia
13
es
"" " - J *". -
'daiCv!
rzárt ¡
rriEh' '
rdsbí2:
rtísbij;rdib2:
rdab2f;
rdfib22:
rdsb23:
rdflb4i
rdüb4i:
rdeM2:
C!?»
6DV
r:v: *v v
•r «nJ B. k
lic.Dlniiffloinpnntoeich5r2UV
esojnejipCfiip
:Ljecep
copj^E
jfiD
fiDV
prinígstiineS3Y
cepjneJBD
c&pjnsaovc&pjnejftpSDV
jooliaplnpriniDDV
fiOV
iOV
(Slll
incBOY
aovcaligetdaU
R^csv, fíav í, !9S9 p¿
atrprev.ó)dirprev.cial.^vrex , Irüci'}2 ¡este incluye el retr¡
;-u5C£ ur, strinc 5r 5555 ento a:iuci23,rever524,r)oriacl1,23, buscase?, revsrs
j55ssrc r=5DU55t3 H, A ' O ESC
al, Ibh
rdab!2rd»bí2 ;ESCa i f 'ñ -
al , 'a 'rcsbS31 , -H '
ai • li
rdabl jrsspuesta incorrectardab4gQr==Etjl jSEcuBncié sn ftSCII
Íi23^u=c2?.reversÍ,24,in5buíf ;lso sscu^ciagdrEBst.O
gccod,4
rd&b22rdabf2 ¡ESCgccodjlrdnb2!h!,insbuífrl jvale, pero si ssta vacio salgobljOrdab23rdsbí2bhjO ¡preparo BX para llaaar a rutina dE fausoueda
rdab¿23jTEver5 ¡Secuencia »n HEX
l i23Jbu5ca?Jrsvsrs
fax,0cl,blal,3el=1cl,algdresstjírdsbO jresalto EÍÜO actualcl^dbyts.'h1
ÍÍGr¡Cs)p'| "¿V
BCVc;-.-
rflsoCÍ
;q'jií
rdabS:
rüab51¡rcübó:
rdsfo?:
rdeb72:
rosbf:rdabi2:rdsbO:
cnpjsftCV
1DV
inc
jnecepjne
aoveovsov(DOY
aovS3V
sovcalisoyEOV
aovCfip
jnsüaplnprintinc
calicalilittplnprintgetcharaov
cepjecapjneincJBpgstcharjapcjosdir
rdofc42
dbyt?-i-!,0rdcbS
blbi,24rdab41bl,0rdcbSl
bhtOsi,offset ir=5JdirU2dijdirl
tíirH2,5Sdirl .éi ,
¡Ú datos?¡si, pasar a b'jsc;
¡pr=paro ilssada
;CX=0 si no encontró
¡no encontró
ex,Ordfib?23jr5vers
dirirdsbfprsopc ¡Encontró, cuestro en ventana9S26
23,reversÍj23,5igoi)jrevsrs ¡busco prosisa?
¡ESC, salgo
¡enter, busco otra vez
¡resalto caspo para bytE actual
rdfibf2al,0dh
dirlrdsb¿
salidael ,24
r sv i 13^:; 1(0 Y « l 1 I *.
rcveov
a i r p r e v . a l¿i 'prev.d:a l , 7C ih
reir,rose: ¡copie desde la ventana oriricical = otra área
licpla 23,revers ¡lispio lineas 23 y 24iispir 24,ñoras!
xcnceovaov ax,dirH2üchc 5l,2raov btifis^asCDV E" Rení)=
eov «ord ptr isene 3Í,3hpush axBOV bu fcHí j é :hesascpop axxchg bi,bhfiOV
RDV
ffiov a 11=fihesascxchg b l , b hEOV
eiov
jHsgo OUB 05 usuario sea SBG. pred;jpara lo que sieulo condicienes
ptr dnexU5,bxbuícorr ,bx
aov
«ord ptr dnesl+4,bs
byte ptr dher . l r l ,4rdacl: EOV bx,oH=et vcopia ; ven tan a pars recibir dirección
jsov 3S,tísEOV s i .offse t buíf i ívnt 'h 'print i,23,123cc,revsrsCDV cdresei,!cap byt° ptr buícorr,'Jje rdecíO
BDV buícorr,3;HOY buícorr^2,QQV as,Oaov biiteH4,a!jsp rdisc2
rdsdQ: print 15,Í8rdicü: cal! rdacíl ¡resalto csiapo á° segsanto
gettíáta 15,18,dhsxl , 'h ' ¡recibo =£0ffisnto
ai.aírs'-ev ¡cuno Desaliadodi.oirprevrtíKOl
"2v gerese t jO:nr gc:cd,C! ;d5tc vaii t ío?je rdisc2es" cccsd,? ¡ESC para abortarjne rdü;cl2jsp rdf f i t f
r o P C i k i L£Ü G C C 3 E , D ¡ i f i ? pa^s pasarjne rdfsci !
r2!i:2¡ ccv ccresst,!TS"iü21: ca l i rdecOC1 ¡resalte caspo de O T T & S Í
g=tdats 2 0 , ! B , d n e x 2 , 1 h ' ¡recibo orfseícav a Í , a t r D r E v ;Quito resaltadoB D V d i . d i r p r e v
EOV gdrEsst.Ocsp QEcod .O ¡date valido?
cep gccod,7 ;ESC para abortarjne rdEi:22J5p rdffiC'f
ráü-22i ccp occodj5 ¡TAP OSTE B5.=s.rjr¡2 rdnc2ijf f ip rdscl
rdac3¡ print l f23 f byt5a? , rsvEr5 ¡recibo el E de sytesscv bp,vJord ptr dnssHó j l ibero dhsxíaov gdrssst,!cal! rdfflcSO ¡resalto csspo de rbytes
rde¡c3!: getdsta 20,Í9;dhex!,'h'aov gtirsáétjOCfiü gccod,/js rdfficr ¡ESCctp occod jOjne rdac3! ;no vale
rdec4i aov ss,bp ;aquí tengo todo listo, copiosov di,Kord ptr dhes2^6 jES;DÍ—>ds5tinoftDv cx^ord pir dhsxl*6 jíbytesaov 5Í,dir!
cali copy
EOV d5,axfeOV =5jVidBD5SQ
l i f f ip ln 23jre\'Ersprint 1,25,listo,reversc¿H pri&buggetcftsrjsp r d f t c í t
rdscf: cali pdebugrdíscrh jsp 5al id=
fíoricay, hay í, Í T S T
caico d& se
c;
aírprev.aitíirprsvjdiai,70h
rdc,:0!
dirpreVjdisl,70h
rdsc30:
al.ss¡[di33írprsv,aldirprsv,dial70h
rotun:
rtJíunl
rdíI2:
rtíüí:
fiCV
S3V
15 2 V
IftOV
£OY
iíicoovacvcovSOY
posdir 20,19ÍOV Qljpü1
inc dieovgDV
aovÍEDV
JSD rdslOl
SDVctpjnejspcgpjejaipcapjnecalijf ipcap)R5
japcapjnecalíjspesojneUErprooetcharBOVC£p
jneusrcro
oiroaus,0rdíun!
rdíi
rdí!2rd_rcí-fffiopaurdíi3rdH
rdfíírdí3RrdrfsopaurdííS
= 1,27rdu!
;Esto incluye si F.ETK'05 OtÍ
:Estc incluye el RcTK;re=aito cs^po de Ibytes
¡Esto incluye el RETN
j=i se dígito EKTEñ, stístrar funciones
jASCII norsal si AL=0
;F3?
jedi tor en pantal la
jF2?
•F4?
jHue=iro pan ta l la os usuario¡espero ESC para regresar
j ESC?
jvuelvo a pantalla de PRO
oí
O
rrr
ti
*+-
-i-
a.
O
CJ
-a
ri
til
Ul
r—•
3K
10
a
a
u
m
ni
i—>
O
"O
Cl
M-
••-<
—
"
—
-
*4-
•O
JE
X
-^<
1O
"X3
-o
o
ra
ui
rd
-o
—
m
ta
(a
ei
gj
es
tsla
o
o
=i
o>•
-o
>
s*.
a
a
o
o
a
ñnqapd
031^0X3
aun
sus* üs A o^sansí SURJA ^ssíio'xq AGB¿ j suf
o j =a is; BJCJ afxnsdos din
jjpJ díf
5nqspd
¿DSEA 135l¿OfXq AQB
AQSA03
¡si sjaAaj'cg ü]daií
ases
ACB
coACB
Q B| L'5¡
ojisan»: -45^5 5ij2x
3S3JOC A -I '
aapaux.U
rd_: ¡edición en panielia.Order en cue se atenderá a ias ventanas: 1 Registros, 2 Banderas7 COCIDO, 4 dirección pernal, 5 cire:nc-es rj=;.üri£2, 6 es&3ris:irx. 7 aeaorial ascii, £ eeoDri52 nen, $ esEcriaü! escí:.SE usa para ¡eer estos dos rutinas: SETCÍWR y EEIDATA, que 3! salirO3.ii cadioos sobre la íorea en que se produjo la sallds. £n esta,parte de¡ proorsee el usuario teñera apcionss generales coso:
TfiB pasa E proxina ventana.SHIFT TAS .pasa a ventana anterior.ESC sale del editor a! isenu,
Existen opciones aplicables de foroe diferente en cad= rutina,rdj: ;Ca!3t;i?s er ventana que muestra registros.
¡Usar Fleches aara coverse o para no alterar ur¡ registra.eov dJ,0 :reg. actual = 9PBOVraovCEU
rfla:
r d !
23 v 24
si.oííset l&r=Q ¡LltíEAOalir.O
liEpu" ijrst'srs !liri=55iicpin 23,reversliapln 24,ncr¡jalprint 15,1.llrég,reverápnni 3,23,123d_,r9vsr=print 3,24,124d_,r;Drfialsov bx,c?Tset vr ¡ventana paraBOV ax.dssov 5i¡0íí=et uiinevnt 'a'cali rdJO jresalts reo. actualgetdata ífh,6,dhexlj 'h'aov al,atrprev
rdJ2:
rdJ2I:
rd 122 ¡rdJ3:
fiQV
ÍDY
cal-1c:pjbcupjae
capjneinccapjneaovjitpcapjnedec
dijdirpígdresetrdJ02occod,5rdj 2gcco¡í,8
rdj!
QCCOd,3
rdj 3didi, 13rd 122di.,0rdj ígccod,4
rd 14dí
¡siguiente registro
jreüistro anterior
jne rdJS!ccv fll.12
rc_13l: ;n: rd_i!rs_!i¡ CE& occüd,
jr.s rc_í5cap d!,4je rd 14:
;nb rd_¡42add di,4
rtíJ42¡ jap rd_l!r¿_15: ce? flecad," ¡abejo?
jne rri_!6Cffip di,O
jne rdJSÍir.c el
rd_:5í: atíc di,3cao di.12;-- r¿ <~H.luí rC__;j¿
Slib di ,3
rdJ52: jcp rd_Hr¿_iá: oov cdrsset,!
KDV büjKord pir dhsxl+ó ¡dsío valido,BOV él,diactuar
drí OTÍ52t rd_bpjC-ÍT5Bt rtíj35,OTÍ52t rtí_SÍ,off5SÍ rtí_2íl
ds críset rfl_ss,oí*55t rdjüjoHset rd_bxdw oHset rd_cs,D:í5Bt rd_ipfoíT5et rd_cxdh oíí55t rd_E5,of75=t rd_=p,offáEt rd_dx
rtí_bp: SDV rsgbpjbxjsp ré_ÍAl
rd_ds; KDV rBcdSjbxjap rd_í¿l
rd_si: nov rsgsijbxjsp rdJ.M
rd_2Xi sov regsSjbxjaip rdjü
rd_eE¡ BOY reges,bxjap rtí_ló!
rd_di¡ iaov regdi,b);iap rdjóí
rd_bx; isov regbXjbxjfip rd_ÍM
rd__cs! cov fepcejbsjap rd_l¿3
rd_ip: aov rsoipjb)!jap f"d_íM
rd_cx: EQV r5Qcs,bxjap rd_íél
rd_5£¡ ftov rsg55,bs
r:_£L¡
rtí_dí¡:nfui;
rtí_H;
rd_!íl;
rdjf2:
rd_ÍO:
rdJOÍ:
rdJ02:
J - i*
E:-V* * r~
dcvSUSh
C^l
nrtr
jfip
aovffiüV
¡SOY
covcaliffiDV
vntCííi
CBB
jnejo¡p
CEPJI15
JBP
jfflD
ÍDV
ffiDV
(SQV
CE3
jbinc=ubC5p
•jbincsufaCffiD
jfc"
incsubfflDV
2U 1
atídposdiroovincaovaovEOV
ffiDV
5ÍQ=b
incstosb
i j_ic;
r=5E;D,D>;rd_lcl.r£CCS,Cs
d^pdebücdxrc_aax,reoc5seocodjsí;3s,reQipct fcoc.ar :ísccdbX.DTt'ES". Vp^lj
' s :
EPSW
occüd.5 ¡TAS?rtíjílrd_2occod.ó íSHIFT TAB?
rdJÍ2rfijrri i .rcr.
bl,dl icuEstro registro en reversocl,33h :CL,CH tendrá la posición d=ien, 3 ;r=E3Ístro oue debs resaltersedi, 4rdJOÍ jpnsera íiUCfl
blj3ril 7U ! j /
rd ÍOÍ jssounda íil=chbl,3di, 10rdj.01 _ jtsrcera filach jcuaría filabl,3al ,9bld.al ¡CLjCH listos.cl,ch¿ijpddir .dis!j70h ¡video revarso.ah;e5;[di] ¡atributo eus había sntssstrprev,ahdirprev,di
ju=o ssto coso otra subrutinEdi
ispcay, f.ay i, 19e? Paa= 24s
IfiC
st:sbincSlOStrein
en bentíerás d=I iü— > y <— paré ir s otra O2fid=r5,
d!,0 ¡banderg sctíiai OF
rd 2a:
rd 2!,
ca!¡liaplnrint
Vil I
cal!ggtdai:EOVÍSQVffiDV
caliCED
jne
calipasacaliDQD
=i,DK5SÍ lOban ¡linsa O
Í6¡1, l i ban , rsversb S j O f f = E t ve jV3íitansa x , o =sijOfÍ5=t uline
csabios
rd_20 ¡resalta sarcoera scius!2 3 h f í 2 , d b i f i , ' f a 'a l jS t rprev
rdJOlGCCDQjO
rdjílgdrssst.írd_2iíldxEDBtf
dx
jquito rcsaltau
¡dato valido.j e l t e ra variable Flag;
jac tua l i í a pan ta l l a
rd j í i i
rá 22:
rd_22i:rd 23;
rd_23i •rd 24:
jbCEp
jneinc
jnsffiDV
capjneQ5C
jne
jepcepjbjfipffiOY
gccod.3rd_21gccoa¡3rci_23d!d l ,8ro_22Ío 3.0
gccod,4
di"d l j O r í hrd_23í
rdJ2igccod,8rtí_24lrd 21
E bandera
bandera anterior
FÍCE 2
re 25;
rd_26i
ríJO:
rdJOl!
rd_2IQ¡
rd_210í
rd_2I2:
*-V
P:V"5Ü
Mil
Ce i ir * r-
J P E
JÍTD
capjnej f f i pJ2P
se ysdá¿adeovpíisdir
BOV
incE3V
EOV
BSV
S'OV
5 tDSÍ)
addsto=bretnsoy500
•ovcapjéinccapjbSQV
SÜQ
a rifíaLJU
.•so ycíercrcspjneücrandreincrretn
a t , T5G 1 p
C T T C D O i 5X
ISCD:EÍEB!;
ap5Artrrnf^ "J L L Lí u i ij
re 25rdj ;TÍ!Bcccod,¿rd_2érd_! iSHIFT TABrd_í ;ESC
ci}33 jrssalio Dsndsrs sciuale l , dic l f d !ch,5cl.chui t cudircial ,70h :vid=o reverso5h.5=¡£t í i} {atributo previosírprsv.atídirprsvjtii
joane atr ibuto (f tLJ en banderadi ,159
-
d h j d l jen CL obtengo la posiciónohj í jdel bit a alterarsec l .dh jEspszsrido por el íin.d i , 3rd_2íGlc!dl,5rd_2!01 'd ,dic l , 3rl rhU¿ j l r f i l
sSjSOOOn jun uno y quince ceros;CF=0
3X,cl ;roto CL vecesdb i r iT i j 'O ' j a l tero Flapsrd_2í23X,Oí fHh ;5aco si coopl. a 1ílsgs-.sx
ílaG=,ax
rdJ3: ¡Recibir ur¡a dirección y dsssrisaiablar desde sí!a.
n
-o
E9 C
T
rs
o.
o
"—•
rim
t?
ra. n
i >~
ioí
oU
i o.
-o
CL.
sa
i—.
:«a
u o
-c
-a
-i
a.
a.
-—-i i -
m 'o
í —
ni
«—ID r-
l-
—-
d.
Oí
3
s>
ri
am
-a
~u
-i
c.-u
n
cu
•--
1 n
|
-01
O
01
•—
Jv.
O-
*-*
• • J3-
10
._.
n
> —ID
-V
I
o.
n ra.
1 n
¡oí
ra.
.—V
- O'
CU
'SU n
•— •
-tT
3
~H3
"t
na
.»
" 1
O
Oí
Cl.
11
1
*~ tjl
y n
-u
n
ra
"— .
n3
w
es
a
a
=>
M3
-—
ui_
-<
<
m -o
í m
. M
la
- a.
ra.
noí
*3
* m
• or
o
«—
ui
•—•
ca.
O
Ul
t— -
i~i'
!íi
**• f—
n
ai
i»1U
o
o
0,
Cl,
h-
01 iii
o.
•O-
IM
1—•—
ID
-1
rH-
Til
•—
"
•O ti -e
1 „—•
ni
•-i-
~1 •xa ™** m
• o
n
<
F»rn
ni
13
tíO
- H
-(n I u
ti
CX lli
•"
••
•-"
C,J
O
M*-
<^^
-f-
.O
í -1
.3"
Cl
--
mC
3-
r-i-
ia.
CL
oJ oí
PJ
turo
«—
?í
E*
'CJ
•— .
fl-
S<
K
T
Oí
CU
d
o
•— oí
in
-<-
•.•
tu-í*
*—
• IO
in
>— •
in
ri
i-l- Oo.
n.
'0!
OJ
-13
i—,
o
(—-i
u.
- s
i—
•
=j
a
-•- il>
^i
l'd'l
h-*
Itl
t— *
|Xí
^? ^
»—
'— •
1 11
n
-iO
in
CL
n
E3
Fí
U'
13
C
J
>-•
!•
•'•
CX
f-.
•-
'1=i
o
m-
>•
IOLII
|->H3
»
r<-
-—
l.T
I,Í
(0
Jt
ta
-o
-iO
1.1
•1-
M[O
I--
—
-,1
iíl
tjl
(J
O
di
-Ka'
•«
O
•'
« ii
Oí
Ul
cu
in
a.
3C2 Cí^
:r; cjr,9 ¡A i= pagina í se regresa desee
ir:: Cr. ;jio deja cus 0H 05=5 oe ÍC.rd_34]: r:v al,2
"• u 1 ¿ *C-C'L-' =' 3^* c B^ r £ D r C "
SDC: si,ax ;£! stunta e i: "h-SEisa P2£. er: TABCGIe¡ov aK.proxinsEOV ísiiíi2]Ias
rd_35¡ cap gccod.Bjris rd_3¿CEP drijO ;PGÜP. No bajo ds la pagina 0.jriE rd_35íjip rd__3a
rd_35í; ose dh joonoa pagina ds arribial
rd__3¿:
rd_37:
rd_38¡
rdJO:
mu Y
BU!SDV
acc
aovBíiS.h
calipopjfflS
fiOV
ÍOY
SOY
subvntcaliSOY
ECV
SCV
aovcaliCEO
jrte
CÉp
JRE
jfip
jap
sovaddcepjbfiiC'V
a:j¿dnsi.oftset t2Dcodsi . 3 y.
oHco^ssdxacod
dxrd_3aax.dE - jventana QpcinBis2DXjOf fse i Yops2EÍjDÍfS5t BEttQ"2
si, 8'a 'estk jYerjtana Stackax, reces5egcod,a¡:
3x,regipO Í T C O d j a K -
acod jYEntana CódigoCCCüdj5
rtí_37rrij jTAB
rd_3Srd_2 :SH!FT TABrd_í j ESC
al.dn jresalto área ds ssgasrito o de oíf=slal,'0' ipriü=ro muestro 1 os paoinadh,!0rd_302a í j ' X ' ¡pagina 10 o superior
rd 302¡ sev
tu
10
n
<
»r«
- p
=1
Ül
ni
=»
sn
Eí
i»
M1-1
- o
a
U
o
-T
n
a-
a,
>-•
•*—
-~
jri i
"i - -
=r |
o
a.
orti
n
o
ra—
i &
at
~i
11*
-Td
, 1U
O
tp
i•a
cu n
n
t>
J n
cu
ru
d.
o.
•a
-13
rn
o.
tti
-a
ni
ivi
e:
e
ni
tu
e;
m
ni
••*-
c;
e
o.
n
ai
ci
1.1
a -i- 01
ti
e;
o
EJI
o
m
o.
tu.
ni
o
ai
O-
.4.'
—4 O
¡rt
-~
-, i
ra•m
r—
.M
-o
i_
m
-u
v.
ru
o
o
a.
o
o
o
a
•u
tu
ai
mL
- l_
Cl_
Q.
L_
k_
.—
OJ
"O
.—
a.
a.
•-«
L_
t_
Ot-
j •-
< -o
na
-CJ
•—•
.u o-
QJ
—ni
"a
o
u"i
—.
ilt
TJ
'-
'-
r-i
ci -•
--« iii
u
u~i
—
-CT
Ll
TL
Í1
1
L.
CI- I
a
—•
u in u
U
TJ
U! j i t.
ra>
T.3
i —
-xa
r-.
m m
-ir)
u
-cj
.c;
J= -o
ai
u.
Ti
~\y
l—
™ m
-
u~j
- UT
u
1:1
-e
: j=
: -o
JT
: -r
aai
v.
-o
T=I
v.
ns
k,
u
u-a
-i-
*i-
in
—
o-
—'
(o
10
- in
U
"O
í—
• »-•
T
3tfl
L,
T3
-O
1-
01
W
-a
-a
ru
ui
n
a
<a
od.
u
--•<
LJ
d.
aiex
o.
aia
na
o.
a.
iii
u
en,
ni
Paos :?£
rrt=fV-«
rs5;¿:
rd5í7;
rd5!2:
rc*519ird52s:
rd52i:
rtí52ai:
50 v
T*
:sc.' =CÍE
JKD
eovEOY
«11
covEQV
caí:cal;calicalicalicspjneJE3
CEp
jnsjipjapaavaovcalifiDV
vntecvvntiOV
ttOV
Cíp
jneKOV
japcalicalioetcharaovBDV
caliaovUOV
calicepjecspjnecal!
til/;rdSlíg"a=rn,91 ;P3Ü!- o fSuf?, casa ¿ 'griEi!1 2**55*rd52agH5Cii,73
rdSíl jno es tscla validaal,3trprsv ;quitc rssaltaoos de linsa y ooriondi,airpr5vrd51tiel,atrprevloi.cirprevlrdSIOÜl
R-odEQ5CI
eexp:esti:gccc3d}2 ;TAB?rdslB,-dJQLCOtÍ,3 ;SHIFT TAB^rd519rdjrtí_í :ESCdh,0 ¡opción actúa!si, offset 10cp22 jiinea 0alinObxfofí5eí vc2 ¡recepción de offset' = ' "~bx.oífsst vc2o'abl,dl jsi la opción de segissnta íue XXXJÍ solobhiO JSÉ peralta Is opción lll'f, para el offsetopc=Egtfas3,12ro52ídhjiá-rd52alrdslO ¡resalta iinsa actualrd5206 iresalta opción actual de segnenlo
ahatrprev ¡quito resaltados de Unes y opcióndijdirprevrd510!-eljatrprev!dijdirprevlrd 52001gccodjOrd521Gccodjl jENTER?rd522rd530 ¡altera variables, recibe desoí., actual!
r--
TJ
r- ti r
r.i
-•
o u
T:J
-o
t-i
r>-
evi
—
i_i
l-J
—
«
CM O
C
M
1/1
1.1
- in
•
in
«o-T
-3 -c
: ,c
r -a
j=
-o
LJ
i- -o
-a
u
-ra
i-
cu
•a
í-
"a-a
—«
—*
e-i
- n
i"C
J
o
CM
•"•
í"-¡
in »
i
en
k_ -a
-a
U
'O
LJ -
O
—m
i>
i ni
CM
CM j<
ro
Ul
ni
in
li-J
-|J
LJ
u
LI
-o -o
u»
M
IT)
tu -a
o
L.
iü
LJ
ci
at•z
: m
t;
c
••-, -
o
u
«-i
LJ
ca.
ui
C3
.C1
.UI
U
-—.-
—»
u
u19
n
i o.
o
a
ra ci
u>
ni
o
a
a.
oo
ri
a
-<O
J O
J 13
o.
ci_
r:a.
ia.
•—ra
tu
•"
«. in
*j
- i?
et
.ei.
nr
iw
o"
r»
nri
- iu
tu
m
. o.
en
t»r~
m -i
O
i3
ei
o -í." II1
sí cu-
ín
o,
Ul
l>l
¿Jl
EI
>».
ffii
nO
M
O
0"
-e
-ci
•-=
— -
cr -i
tu
-i
3t
C\
>— ' 0,
-
Uf "
C
.Ho
o>
i o-
oj
-h O
O
-
m 'O r-f-
< n tvi
i3-
>.« =a Ci
ID ln •o p.'
-1 ni
i*i'
10 i Cl
-< l/l 111 iCl
Cl
n o a
cu o-
-TV
,_,.
,.,
|_n ro
M
in i-f-
-1
0.
0. ID
-
C-J
—
o-
_.
•C3 Rl
-1 rp Ln =3 ID n ID U1
!-*• r+'
1" =3 Cl-
ip ln •o h~m
H
i-..
EI
•-•
nff*
ID
O
J K
Í•o
-;
'a
-1
111
"1
>£
Jo,
K~ o,
nt,n
-
oí
oo-j
ro
o>i
oes
o-
co.
-.-,
NJ
••- ^
i
>->« Wl
DI
,_.
ra-
ru 111 ™i en m ~(
e? ~~l
u>*
3> r*"' ti K3
1_.
Cf
-1 o.
C/J o I-J
-4.H Ul
C!
I.H*
Cl
[U ri reí
•o it'
O —I
•x*
txf
U7 :c -n — i
-~4
X»
ce*
-<
o,
Ul
t« <^ C--
I
n B 'O • O n n o £1.
-^ t_n .. ü a m ri m •a rl-
o o •a n >-•• o rj rn in M.
ID •G n- »-••
o.
0.' ni
•u-
El
!»
CP
-o
•<
"1
til
CIl_
*—
'C
,'l •
-"e*
1-!
ü-"
O -+••
*t.~ ia
.O
.'rt
1O [i> >^
—*-
*»C
l.O to i/i
t= —i
& r-l'
=)
1X1
n ni
H— »— *
n o..
CJl
c--j
o-
d*
^ • 1/1 1-*'
u to *— *
rv ro —1
P.I
< W ~1 *--
(U a-
rn 1/1 • O.I n rf
c:
w
•_.,
n=1
T3
ro
"o
-T in
a.
'~\i n
0«J
O*
> rn
-0*
1 '• c
^
-..' Cl,
Oí
r-l- a •í
HJ
*— •
!-•
a.
o •o
o.
i_n
o rr1i» i
o
E*
-<
e>
™O
i[i
o
n «
ci
<
i~t-
-e
r-i-
-;
<en
.u- rl-
PJ
vo
t— >
a -
ui
nia,
tu
ea-
m
M-
xi
rjv
~i
- —
—
m
—
ni
o
ra.
Ul
G-
Ul
-(-•
lnrn
iij
ni
-i-.
r*
i i~
r U
l-
...
—
rp•
O
. >-
1'
rr m
c;a<
i—
-*~
i_
«-=1 1P
rs- -
*. H
-T fD 11
I--
cr
Cl
>•=
X >-¡
d.
O-
"
¡B
-Cl
P— •
a
-i
•—•
<
i— »
n
-oft-
1—
J
15
W-
O^
—•
3<
»•
-**
•—•*
»*
* hT
a >—
iu
-i, .,
<*+
• i—
• 111
m
>— • *i
rü
O
MI
!-)• 'Ots
S•<
o
n —
10 -1
íj- i n
"i
IU -^
•»«
111
tO •— ni
n« •j
t-"
[3-
n.'
"tn u -i ra - r. i
IU rn rn -H 1=1
it"
3>
i— .
E?
T3 -1 Cl.
C.M
O1
<i
tfln
t- • *—
**- U
l [11 M1'
tn.
O'
XI o "i o -i o.
£J ai tn m — *4
ITi
O;
?*
i.
11IP
r» '13
-i
ii.
Ci. i-r
O^
^-h
o
r<-
»-*
•—
-.*.
rn a
S3
"O n3>
H
-.i —
o =>
Ul
nj x
i— • x;
III X X
«p
-o
o 1 1 a.
PJ i-i- a Ul -í cu »" EnJ
n
11&•
ru
h_^'
V**
w—
• *-'
-1
-1ex o.
i:.n IL
It~
*j »-—
<^<
<T'
*^
.^* -i m ni ai
>—
t-i- a M*-
*,_
*.
_,
Ul
ru •-e oT
ln I-*
Ho r^
Ci-
01 <f\>
*• u rí Ul
rr ÍH-
^
>4>
'
"I
1(1 ri
>-••
[3-
ro i-cX s-
t9-í
*«• IU t—
•rt
-Itl
•1 O"
-1 m 'a i--
m !->•
'1 CJ til
-1 IU rl
£.1
-i
*-.
M-
m
iaO
33
rl-
C
lo
n
o
-s(u
u
O o
n -i
o.
st
0^
i-—
c_
rt --
•—
I-J
—
J>-
Cí
cu
—i -o
o
-izy
- ni
•cr ^L.
13
C.)
tu i—•
1LJ
•-*
u
u•ti
iii
ii~a
tti
ira13
1
ti-
k
.
1-
Lt
.&
-«-I
Ul
m
ai
-o
ni
o
i» ta
LJ
10
- a.
u.
in j^
-
-•d
C
l-
-M
—«
u
•*-•
-o
m
ti <
r>
oca ro
po
u ti
-q
a-a
u
-o
u
-o
ir—
r~-
->
''1
3 e>
do
fi
i>i
ro- i
nl_
IU
a.
cu —
. o
fu
-o
—i
¡o
-o..
., (n
.,
^•—
• —
i -a
r~
* •••
^va
-c
i i-,
ni
13
ai
o
aC
L
O-
111
o ti
ira
ci,
c:
-ti
j:u
3:
x:
o
->•
(O
Ul
-CJ
III
><
ai
ni
-a
ce
o
—
in
»-•
ni
ni
ni
ni
O.|J
L.
-O
TU
fc
_tt
D
I O
í11
1 'C
l (M
*
U*l
<1
.C
O
C1>
ai
u a
ni
u>
us
-.
ni-4
J
l/l
ai
-4-
-13
C
TI .
O
111
111
Ul
O
-Hm
ai
ai 3
-a
a.
o.
v.ni
»-.-
o
-aO
<r
> •=
• -
11 ta
ai
— -
-
i -o
-c
—
« t-
-rf
ra
-el
"a
•=>
•—'
-M -o
1(1
- L
. tt
- £*
•{
111
-CI
Oí
•ti
u
LJ u
u
;•-
5»
m
m
O.
3-
a.d
ca
n
d
a
tn
aii3
J M
C
X
Q.
CL
fc
S
1_
-—
ca.
c:
«-.
o.
isLJ
u
cr
- e
rd i í l :
rdál í !rtíá!2:
rd¿í2írd613í
rdó!3írdá i4 ;
-
r d M 4 Jrdá!5:
rdilá:
roM7í
ÍDV
C 3 l l
»r
Jü!incCPC.
J bce:MV
JITiD
cap
dscCEQ
jnesov
; jr.aCEC
jnsiniCííDjneEDV
; japCñp
jneinc
~ccpjneecv
: jispcapjnsd=cCffip
jnesov
; jf tpcapjecapjnecal ijepSiOV
sov50V
pushpushpop
gtíresst,! :sir d a l O ¡altero ^ona, a c t u a l i z o o s n i a l l
dh ,S ¡nastí ¡ÍBcer si f i n t is i= vsntsnsrdóñ
dio i . 5rcitsdid h . Treasg:ccd,¡ jsrnba?
di ¡síd l . O H hrd&lüd 3 , í 2rd6!gccod.2 ubajc?rd¿13di ;sidl,!3rdéí2íd l . Ortíalgcccd,3 ;— >?rd614dh jsidh.8rd6!31dh,0rdiigccod j4 ;.<— ?rd6í5dh j sidh,0ífhrdísl41dh,7rd¿!gccod,8 ¡PBUP?rdilíigccod,9 jo ?£DN?rd¿17roblfeO ¡sirdoitíijQfísst dir21 ¡Eslids de esta rutiria, restaurosijoííset dir2ír idirecciones fie ventanasex, 1055
dses
, nev !) !9ñ?
reo ftovshP, P E?
"oí! scod ¡restauro panisibC a l i ÍSit
r;11 n r = m
iTAB?
jep rc_7 ;= ir:^2: en;. cccotíji ;3HIFT TAB7
j f f l p rd_5 ;sirtíé.3¡ JEP ra_í ;ESCrd60; ÍQV c l ,dh ;rss33ic byis actual . Friciero
aov c h j d i icclcuk- po5ÍcioííPOV al,3E'JÍ CÍ
oov e l , a iadtí cfi(Doasdir cl.chsoy di,oddirinc disov antes:EdilEOV =trprev,ah
sov aíj7Uf)rdáOl: stosb ¡caabio el atributo
inc di5ÍC5b
rsínrdóOO; aov nlins5,0 jpara cada linee...rdóOO!; *ov si.offsEt dir21 ¡veo si csincids D¡R2s con Díñ2sR
BQV dijOfrsat áir2irSE5V
soraddsddadd
push ESpüsh dsDQp SE
SDV elj2bh jairinuto que pondré si coincideCfipSH
pop 55
je rdó002SOY aí,3trpreví ¡atributo previo
rdó002¡ sov cl.írh ¡posición E resaltarse c norisalizarse
e —
uL
ll
--«
I-
-
ITJ
d.
(••••
—•
•=>
o-
•=>
o-O
-O
"O
-O
. .
,X
l_
í> O
..i
to ...
,_«
-ci
- -
o -
osr
. —
i -o
-t
y
.-í
•a
"o
í-
L,
ou
u
u
o
;»•
13
ui
ci
in
o
-i-J
c:
.je
o.
-iJ
u
i ra
. na
>
»-
s-
-<ej
DJ
=1
es
.ra
ks
o
a o
=>•-
-.
i_
ra
LJ
•—,•
—!
ei
K
ffi
-Mo
-o
a
-* in
ia
o-
o
d.
•a
>
> o
-i~
ai
m
inl_
i -O
U
l rt
f
ni
«í
TI
ai
LJ .a
m
-u
c>
ni
'--i
K
rP
-*1
^J
L..
ID
r-«
-O
ni
«c
re oí .o
na
ru
"o
Ul
O
ra.—
< LJ
ul
-t-
J e:ai
ai
o
ai
c
u
u¡ti
_i
nr
.ra
es
ca
ti
-CJ
-'
65
e£
(..
ei
-o
-O• i
-•-
()'i-
-ii-
o
»o-n
-
- -o
tj
.»i
M '
aí.
Ul
I.J
W
OJ
¿S
m
LJ
LJ
U
LJ
U
111
M
o
~•
i.j
-ti
u
-cu
tu
•*!-
>-:
U O
Ll
• -i
rsa
i -Q
ra -ai^
- -o
o-
o
a •»H
m
m•o
ui
-a
oí
Kl
tu
ai
a
e iii
- o
m
LJ
u
tu
m
IB
ni
.11
m
ij
uui
••—,
m a.
u
u
ci-
i-t^
) T
ti
l•
<í
> o
-£i
-O
-<i
ra
a
o
aui
a.
>
ci- a.
>a
o
o
ni
a
a—
. o,
ra >
Race 2¿¿
rd?!: cali rd7C irssalío ascii actusl
rd7U¡
rc?!l;
rd?Hxi
r d 7 Í l l írd7!2;
rd7!2hrd7í3;
rd7Í3i¡rd714í
C o l ;CrTChár
ÍF™ »
r.cvStdr t
capj n =COY
JEDV
CSp
;necal 3incüspjnsCSJV
inccspJÉd=cjBOV
jSp
C6pjejapcaejnsdacc&pjn=íaovjapcepjnsíncCfiQ
jr¡=eovjfjpCED
jneinccapjnsffiOV
japCSp
jnedecCEPjne
rd --.',• j i - B s a i t c si v, r e l a t ivas en pagins 0recibo eritradé de teclabo
o ¿ , 3 ; r p ' É s v cuite resakadctíi,cirpr?v
Qccod . l ¡EN7ER?rc7!sgccod jO ¡si, sisulo ECCOD=CgcESciijl3 :EntBr="figccoo,0 ¡dato valido?rd7Hr¿7!0 ¡si, a l t , sesoria, act. panta l la , -->dn ¡peso al prosiiso bvisdr:,S ¡fíasta l legér =í t in tis la ventanaro?íár¡,0Ci
d i , 3rd/1tiltíh,7rd71Gcrod,5 :=5p2cíals5?rd71!xrd717gca5cii,72 ¡arribe?rd7Í2di ¡SÍ
d l ,OHhrr i7Í ÍSdl , !2rci7!cca5cii,80 ¡abajo?rd713di ¡Ei
di, 13rd7I2!d l , 0rd?ígcc5cü377 ¡— >?rd7 i4dh ¡sid h j Srri7í3idh,0rd7ígcascii,75 j < — ?rá71ooh ;sid h j O í f hrd714í
dr - ,7rd7!
:?D ccsrtii .S! ¡D PEDíi^js rc71¿jfp 'á7í ;tec!a ir
rc7!&: :all rc?:á6 :?BÜP O Pjai; rd7!
rd7!7: ccv di,offset dir2í ¡salida d= ssts rutina, restaureeov si.ofíast dir2!r jairecciones d= vsntsnasf i O V C X , l í i
ptlafl 55
o!i=h ds
c B l l pdebug ¡restauro parí t a l lacap gccod.2 ;TftB?
jíi£ rd72iínn rrf 1 * - iJ lUl» J Lr d ^ " ~
r(Í77« rfT'P nrT.ri 'í . C U T r T Tfilr1?í U « j- i 1_1IJU Ul_!_ iJU ( J i -J^L i j, i E >^1|_'.
jsp rd_5 ;s:rd73; JEC rd_í ;ESCrd?0: BDV :lfdh ¡resalto byte actúa!. Prissro
eov ch.d! ;c3Ícülo posición8QS Ci i T ' HaHrf rn CautJ w n j /
posdir c l .cheov c i jinc diSOV 2ÍÍ,
fiOV
eov d i rp reVjd isoy a!j70tistosb jcaabio el atributoratn
rd700¡ ficv nlifiEájO jpars cada linea,,.rd7001: acv si,orÍ5Et dir2í jveo si coincide D!fí2s COR DIR2xR
sov QÍ,aH=3t dir21r£QV al j f í l i f l = 5
xor aíi,ahsdd 5X,assdd as^xadd s i j S Xadtí d i 3 ax
push espush dspop BEaov a l ,2bh jEtributo que pondré si colíicideCEpSK
n.
--o
<z?
O
. ta
n
VC
:L 5?
in
oo
ta
ra
-n
..
.n
o
-i
ri
ES-:
-c
o
o-
r-i
n
o ri
o
tu
a.(
u
in
ca.
o.
in,
i -
[a.
e»,
n
n
-M a
.=3
:*-< ta
o -a
co
c>
u
u
u
u
i..i
ni
uȒ
u
•« u
n
rtí
ti.
ni
.---
LII
es
la-
..na
nj
m
iii
ira
ni
lU
O
O
O
CZ
III
1--
S>
'd Ki
"1»J O
.
1
O.l
IU
1H>
-1 l/l
w-
o
i-*' I
D
O.
>-
•—
Ul
Si
m
ni
ci
txJ
n'
D*
**••
a-
cr
e Ul
Cv ?
21"
ro u- ni
n
ó tu Ul
III M-
*3
O Itl
III cn-
a-
El
=t
a
ui
IU Ul
n
ÍD I" en.
o-
cu-
0 P.1 o.
i" Ul •I- cr
K3 ct-
'O -t m i"
b ni
i—'
ex
CI-
o-
1 — '
O
rti
tu iri
ni Ul
d-
nt'
!3
SJ
E
S
ra
cj
u
ni
a> ¡m r~\u
11.1
iu
«~ '
U
' U
l
Ul
Cl.
lt.
in
(,T -
ct-
o-
0
FJ1
rj
a
i"
U'
ra.
ct1
V '
si1
ni -h
IU
O.i
J=(
T)
ÍBa
u
u
r*
. ra
a-
CT ü
ci, a-
13-
ti
<:•
K—
'e
n n..
-i
Cl
tn n.
ti.j
>-•
in
13
3
u
'-u
i.-i
ci-
ni
u
rz
'u
no
u
a.
=3
ei
u
ex.
ra -
a
L1T
O
01
a
aa
-oui
tg
tsO
o
e:
ao
«
c:
=1
a
o
o-I-J
T3
"U
í 3 i 3
Dé
unidadcríir-str
crono:
T --T. 1 .JoZOl!
fifi!
pant:
Pí¡
p2:
«Btr:
C u
cbdr
.coo;EOV
1SOV
BOV
EOV
(SOV
intcaliSQV
EOV
ÍOOD
dec
inccailC2u
;nzscvaovintsovint
EOV
eovaovcapjasffiQV
japinc=iib
addadcEOV
KOV
intretnend
^
0-:n
"'
ax.édatads.afcont.Odi,/ah,22inpantai .8
U:o2""ai
cor.tpañíccntjivlazodl,7ah,221hsh,4ch2ih
CljCDflt
decena ,6unidad,0el, 10p2unidad, eleostrdscénacljíO
decena, 30hunidad. 30hahj9dsjóííset decena21 h
crcno
íSeguntíos¡Pass a crc;;:cÉ i¡n=? .¡Fin da! sfmc
¡preparo contadorfhaco un B£EP
{auesírn inicie de cusr-ta
;rBi.ardo oarc i£n5r la¡cuenta sn 5eoQr;do=
;incr52=nto CQri£HDr-;fiuestro cuenta a:iual
íhscsr este trabajo ¿0 vecesisaígo con BEEP
íteru iñ8
¡rutina que auestra numero en p
¡si CL < 10
iguardar CL en la= unidadesjy pa=ar a mostrar el nuseroj=l CL > 1Ü, incresento decsn==jy resto 10 a CL
; convierto En ASCI!
; función 9 dsl DOS: sortrar¡un string terainado en 'i'
El
El
ffil
5?
*-•
a
o-
a
o
C"
o
m!-
*•<
•<
o-
-eEI
B>
tu
u
no
o
o
o
i— •
E3
t9o
o u
El
=1*
•-••
Pl
•
OL,
I»
O.
O..
o
n
cr
.u tr
E
CX.
U
Im
rr
i•
— iC
l
ui
cu
ru
rrtoDJ
O
L-
IO
CL.
Ul
a'
X
cr
PJ
riJ
•»>e
«i
»'
n
[3Itl
'>
-a
in
rt-
IPcu
r"
n r-l-
DJ
*O
(O
er
ei.
m
tu iti_
r<i
a-
n
:3'
r'-
iu
ni
En-
HI
! ,-
ifn
a
s- Q -h
UI
Itl
[11
=T
-*,
hO
rj"
ai
•••-
~*
OJ
d.
PJ it
u.i
ra.
o o -i
-in ni
r1**1
S-
ci
w
ci
10 '
~"l
ta
d. tu
UI
ÍT1
hO
O_
C3 • »-.
iri
iti
r'f
pJ
C
TL
IVJ3
- U
I S<
O
O.'
iB.t
-C)
lí
CX
rr
IT n-
n>
m
-tu
ii"
m
in
ai
irjO
1 r«
* O
in -< i-t
-•a
mr>
- u
i
• 'SC5 -'
ranois
D O Q l ¡ =
00==5C
.andel
.datadedb
Ü?
SDi!
OC
.COSE
ÍÍ3V
EDV
5DV
aovintfflDV
eovsoyintGDV
EOV
25V
3Cd
1DV
BDV
KOV
SGtf
intjeftnvrflU I
ffiDV
BOV
aov
intEOV
ÍOV
intSOY
EOV
SC3Y
aovaddsovSOYintinccrapjneEOV
intend
56311
dO dup (?)Brici¡r«bre del arcnivo aí
12&tasado dupíOi
sx,&¿ataÓ S , 3 ü
ar.,£l9hdx,ot f5Et pregunte21h3h.0ahos. of fset buííerbuífsr,7321 h=Í.OTr£°t bufr=r
bljúüffsr-Mbh,0bs,2byte ptrtsi-í-b)í3,ú2ti,3dndXjOfT5=t bufísr^al.O21híin
aMfhíS"ds,ofísEt bloquecí;,taiancj
2ih3h,3shbx.hsfidls21 hcuentíjObXjOÍrset bloqueal, cuentashjObSjaxdl.dsitbslah,221 hcuentecuentajtasanodispah,4ch21 hinicio
¡puntero d= 3 data;jpreguníi el nofsorr!=1 nombre del archivo
fingrese s buffsr =1^E del archivo
pongo un O luego fl=;íriüffibrs pars oue =sa¡un AS^ÍIi
jabrs un archivo con ?ijnGSDre que esta en buf-fer,¡solo para Iscturj
;CF=! 55 srror
j!=s 'taieano' bytss;dsl archivo
jcierra si archivo
¡contador de bytes leidos¡desplisca los "tasano";byts5 leídos
j = i cuenta *, tasano siguejdesplegarido
DIAGRAMA DE BLOQUES DEL CONTROLADOR DE FLUJOHodulo Flujo. Ast*
I n i c i o
Rutina inicialde
Inicialización devariables, X=@
Nivel
Subnivel
Construcción debuffers y cálculode nimeros clave
MenuIineaCHclave)
Statusf y Statusy
Opoicfrí
Diagrama A.1
275
Opc i ón ©Opción?
Actuar-
O s~^ /H™X .•—% /^~^. /^~~^(O f ? ) ( 8 ) ( 9 ) (i¿)-^— 'v — X V_x ^ — / s, _ s
1 B ©el cursor de opciones a lacRiieráa o la dereclu.
©Si Bopc=i H la opción es tipo rana,
er- el cur-sor hacia arriba o abaje'en la ventana de subopciones
Prepara buffer deopción actual y X
©
c 882
K-
Prepara buffer deopcio'n elegida y
X y i
Diagrama A1 - ( c o n t . . . )
276
c 082
Hclave<—Buffer
RutinaíNclave)
Actuar
Inversaf ^u
©
Ranaf -*+
U!
Recupera lasvariables
Recupera lasvariables
1Si no se entrocon EHIER, 1¿-1
©
Cambia Bopc de O a i y viceversa!
©Presenta una
pantalla de ayuda
Diagrama' A1 ( cont. . . )
277
©Ingreso a las opciones de hacros
del pr
D_Superniuet
Reconstruye el[ büfí'er- de opciof i
"padre"
E IPrepara paso a
a n iue i
ííutina f inal
del usuario
Fin
Prepara paso a
«enú padre
©
Diagrama A1 ( con t . . . )
278
DIAGRAMA DE BLOQUES DEL MODULO DESENSAMBLADOR
Líe: pr-dslQ5 f
wer byteC O ü J ? 0
laquina
/De te minar la\ rutina, apropia-
I ,N^da ¡¿ s a l d a r /
( F in ;
Cuerpo principal del nodulo
Diagrama A . 2
279
DIAGRAMA DE BLOQUES DEL MODULO ENSAMBLADOR
ñsseh
Asigna r paratté™ir-os üs entrad*para 5! paso i y
ejecutarlo.
Pasar e! r-síulia-üo ai paso 2 yasi^narU una zo-na de sal ida,Ejecutar le ,
Cuerpo principa.1 del «odulo
Diagrama A. 3
280
DIAGRAMA DE BLOQUES DEL EJEGTTTOR...DE ÚNICA INSTRUCCIÓN
I1 arle u.n tra-tan i en to ¿i-
ferente
Insertar Coditode ?OPF antes dela instrucción
interceptar-
la I N I í
Cciocsr ios vale-res deí usuarioen ios registros
Poner el PSU enel Stack u caroiar T a í enword alnacenaen e i Stacl;
T~
el¡n
Sil taral
^
Servícic\e la )
1HI i /
Cuerpo principal deí prxjceáímento Exllni?
Diagrama A.
281
DIAGRAMA DE BLOQUES DEL MODULO PRINCIPAL DEL PRO'GRAMA
í ' Modulo Pro.Ash
Hivel de procesopadre
Nivel de procesohijo
In i c io
fiveraguo eltipo denonitor
í n i c i a l i z ovaris))! es.
/ Hay \oC archiyo Jí——
Si
Acorto Mi espaciode Metwr'ia
Instalo' Handler-de la
interrupciíín 2F
Desciendo alnivel de
proceso hijo
Diagrama A.5
Mensaje de error
Kensaje de error
Hubo X HoChíld.Exe Mensaje de error
Fin
282
Mensaje de error
Subo al n ive l
padr-e
LftZOPEIHCIPftL
BEL
Vuelvo a bajara nivel de
proceso lujo.
Se ordenoteminar a
Pr-o
Regreso a nivelde
proceso padre
Diagrama A5 ( c o n t . . . )
DIAGRAMA DE BLOQUES DEL PROGRAMA CRONO
i n i c i o
Inicializa
Contador
BEEP
Contaáor+i
Kuestra en
pantalla
Diagrama A.6
' • 284-"' "
DIAGRAMA D£ BLOQUES DEL PROGRAMA TEST
mi DIO
Pregunta
Recibe
nowhre
Abre archivo
Sierror
Ho
Lee Í28 hyte<
Cierra archivo
Cuenta = 8
Nuestra byte
(cuenta)
cuenta*i.
FinDiagrama A . 7
285
Tabla A. 1
GABEC£EÁ_J35.LOS ARCHIVOS . K
'' Onset
i ÜU
02
04
06
08
OA
OC
OE
10
.12
14!
i 15t
, 18
I 1A
??
Long
2r/¿.
^_¿-
2
2
2
r,¿
O
9
2
2
2
2
7
Descripción ¡
Marca de Link para archivos .EXE (4DH,5AH)
Longitud del módulo imagen en páginasf bloques de 512 byi.es)
Tamaño del archi vo en páginas
Número de ítemes de relocaiisaciór;I
Tamaño de la cabecera en párrafos(incrementos de 16 bvt.es)
IMiniífíc número de párrafos requeridosobre el final del programa cargado ¡
Maxim'- número de párrafos reaiaeridcsobre el final del programa cargado
DesplasarnienT-o en párrafos del segmento .de St,ack en el módulo cargado !
fValor que se colocaré en el registro Sr1cuando se entregue control al programa
Sumatoria negativa de todos los words enel archivo , ignorando sobreí lujo
Valor que se colocará eri el registro IPcuando se entregue control al programa
Desplazamiento en párrafos del segmentode código en el módulo cargado
Desplazamiento en bytes del primer iterade relocalisación en el archivo
Número de overlay
Tabla de i temes de relocalisación,
286
-a a
310
O
DU
RA
CIÓ
NY
5.
l'T
"71
UN
A
PR
UE
BA
tr
>*•
«L
1 t.
"»
'*-
--*
. T
%
L
ff-m
ft Jk
-j*
A-
JV.
- !••
-
V
r>f-
20
Te
st
-ÍO
fiO
T"
80
IDO
Manual
Adaptación al tirio de monitor.-
PRO.EXE puede manejar tanto monitores monocromáticos
corno RGB; para ello requiere dos archivos de ventanas
diferentes. El primero, PROBK.VNT, es apropiado para
monitores monocromáticos y el segundo, PROCOLOK, VNT, es el
más apropiado para monitores RGB. El programa se encarga
de determinar el tipo de monitor.
Ingreso al -programa, -
Se invocará al depurador mediante la siguiente
sintaxis:
PEO [Nombre de archivo] [Parami] . . . ""[Param N]
(Los ítemes entre corchetes son opcionales)
SI nombre de archivo se refiere al programa que se
desea depurar (sea . COM o .EXE) o a un. archivo de datos.
Parami. . PararoN son parámetros que se desee pasar al
programa por depurar. Puede ingresarse sin necesidad de
especificar un archivo, y luego leerlo desde el interior
del programa.
Manual
Entonces el programa escogerá el tipo de monitor. De
inmediato aparecerá un logotipo de introducción que
además informará sobre el estado en que se ingresó (con o
sin programa objetivo); si se ha producido un error fatal
al ingreso (como la especificación de un nombre de archivo
errada o la ausencia de uno de los archivos indispensables
para que corra el programa) , se informará al respect-o y se
abortará al pulsar una tecla. De no haber problemas, se
presentará la pantalla del depurador con el menú
principal.
Pantalla del Depurador.-
Incluimos un diagrama explicativo de la pantalla del
depurador al final de este apéndice. Dicha pantalla consta
de las siguientes ventanas: ~
a) Ventana de código, -
Contiene el código desensamblado de una parte de la
memoria, normalmente aquel desde el cual apunta CS:IP.
Para aprovechar mejor el espacioj no hemos colocado
indicadores de tamaño de .operador (como Byte Ptr), y los
hemos remplazado por una letra al final de cada línea.
Esta letra será una B para operadores de byte, una W para
Manual
f) Ventana de linea actual,-
Muestra el código de máquina de la instrucción a la
que apunta CS:1P.
g) Ventana de Stack.-
Muestra los 9 words más superficiales er¡ el Stack.
O-PC iones en los menúes. -
Varias de las opciones en los menúes tienen
subopciones; estas se pueden ver mediante " 0. En cada menú
hay siempre una opción resaltada, que se puede escoger
mediante la tecla EHTER; se puede cambiar la opción
resaltada mediante las flechas isquierda y derecha.
También se puede escoger una opción simplemente oprimiendo
la letra mayúscula de su nombre (por ejemplo, la J para
ejecutar). Para ascender a un nivel superior se utilisará
la tecla ESC. A continuación detallaremos las opciones del
menú principal,, con excepción de la opción "Funciones",
que está en todos los menúes, y que lo único aue hace es
presentar un menú explicativo de lo que hace cada una de
Manua l
b) Información. -
Muestra información sobre los autores y el lugar de
origen del programa PRO.EXE.
c) Depurador. -
Contiene las subopciones de depuración de programas y
de manipulación de datos que exponemos a continuación.
- Paso: Ejecuta la linea de código actual (aquella a la
que apuntan CS:IP). Dependiendo de lo que se haya
escogido mediante F8, se ingresará o no en
subru.tinss 3 repeticiones o interrupciones.
- Corre: Ejecuta el código del usuario desde la linea
actual hasta que se cumpla un evento determinado;
este evento será, según lo que se haya escogido con
F7¡ el alcansar una dirección determinada o el
cumplir una cierta condición, que puede ser igualdad
o desigualdad de un registro con un valor o una
situación determinada del PSW. Si el programa del
usuario finalisa sin haberse cumplido el evento dado,
retornará el contro'l al depurador.
7
Manual
Ins: Permite ejecutar una instrucción fuera del
código. Para ello, se debe proporcionar el
mnemotécnico de dicha instrucción, y ésta se
ejecutará de inmediato.
Ens: Tiene las siguientes subopciones:
Ensambla: Permite alterar el código del usuario.
Se proporcionaré la dirección de memoria desde
la cual se desea ensamblar, y luego una
secuencia de mneraotécnicos.
Busca: Explora el segmento de código del usuario
para tratar de encontrar el código de máquina de
~un rnnemotécnico específico.
Memoria'. Permite operar sobre, la memoria. Tiene las
siguientes subopciones:
Llena: Coloca un valor de byte determinado en un
bloque de memoria que empieza en el sitio
apuntado por la ventana principal de memoria. Es
necesario especificar la longitud del bloque y
el byte que va a llenar el área.
Manua I
Son accesibles desde cualquier nivel, y realizan los
siguientes trabajos .
Fl: Activa el editor interactivo. Este permite alterar
cualquiera de las ventanas del depurador , sea el
código ¡ la dirección de desensamblado; el contenido
de los registros , la dirección de la ventana de
memoria absoluta, los apuntadores de la ventana
relativa, o el contenido de la memoria (en hexadecimal
o en ASCII) . Para cambiar de ventana se utiliza TAB o
Shift-Tab.
F2: Presenta una ventana de ayuda según el nivel en que
se esté.
F3: Muestra las direcciones efectivas de los apuntadores
de la ventana relativa de memoria.
F4: Muestra la pantalla del usuario. Esta es la pantalla
que se asigna al programa del usuario cuando ejecuta.
Para regresar al depurador, se debe oprimir ESC.
Manual
Se invoca las opciones de macros mediante 'K, lo que
lleva al usuario a un menú en que se le presenta los
nombres de los macros existentes en el archivo, y se le
pide que proporcione el nombre de un macro. Si el usuario
proporciona un nombre nuevo, el programa asume que el
usuario desea grabar un nuevo rosero, 7 se procederá en
consecuencia. Entonces, se retornará al menú principal, y
todo lo que haga entonces el usuario quedará entonces
registrado en el macro, hasta el momento en que el
usuario oprime "K nuevamente, lo que indica fin de raacro.
Si el usuario proporciona el nombre de un macro que
ya existe, se le presentan 3 posibilidades: probarlo,
correrlo o borrarlo. Probar un macro implica ejecutarlo
paso a paso, oprimiendo la tecla ENTER cada ves. Correrlo
implica ejecutarlo de una sola ves sin interrupciones,
hasta su finalisación. Y borrarlo implica eliminarlo del
archivo.
Conjuntamente con el resto del paquete, entregamos un.
macro de ejemplo al que llamamos "SHELL". Lo que hace este
macro es proporcionar el nombre C: \COMMAND.COM en
Archivos, y luego leer dicho programa, que es el
13
intérprete de comandos del DOS. Luego, ingresa a Depurador
y ejecuta. Entonces, aparecerá el mensaje del DOS y se
podrá ejecutar cualquier comando de este tpor ejemplo
DIR). Para retornar a PRO tipearemos SXIT, lo que
continuará la ejecución del macro. ya que el depurador
habrá recuperado el control; se ascenderá al menú
principal y el macro terminará.
Limitaciones de PRO.EXE. -
Hemos encontrado algunos problemas con nuestro
paquete de depuración, que escaparon a nuestra
investigación durante el tiempo de desarrollo, Los
exponemos a continuación a fin de prevenir al usuario, y
consideraremos su corrección en una versión futura del
programa.
- No es posible cargar en memoria un archivo completo
que tenga más de 64 KBytes de extensión; si se
intenta hacerlo, el programa no reportará ningún
error, pero solo habrá cargado los primeros 64K.
14
P A N T A L L A D E L P R O G R A M A
Ventana de
código
Ven^ana de
banderas ( P S W )
Ventana de
registros
' vi ' i
-• • .• • • - -
:--:.; .v
>C:'.0
!-:4l!Í'¿•'-=5
-;;
- _ . , . . .
-- •"1
- ._
'. •_ 1 ""
^
-"-
1"l_- ""r • _
. - - •:
- AJÍ,- :i -?
£/ - . «. *.*..— < • > - " -
::
• ;
-
-==-.£, ÍET.:-
. . . . . .
: .--.,
- • .- -.<-r."
ÁJ.r_ E; -"TL..;1. -
"•iirii. i .'---¡v.
^ ' ».! " ,
> .1 ' : • -
\- • -,"V-
foi—üV.- ;ii tr; ;-f : =r:\:-'?' ." r-'r:;
\
/' .^" := :=; :::;:?:; 7;.. :":!
"— 7"'-""1':-.-= •-• "=-;- "-J .-' - •'•
::_-:- -.J. -...
, • • 1 Ir-7^! :; - --1 • .
, . . _ . .
: " - :,. . :' " - l: -•
'- .: -.. . . ' ' - i - . - - . - r - ' -•:
r - fc,lj í,^. ¿,» /} , »*> 1 ?l ' C1^~ E™ t-V .1» Id. bl. b*ta bV brb ' V ^i. ^*W.I ta. J
~ -i -~ 2' "•'• ~í 'H' 4* •- fs- *-i ; 1
;~ .1 _r ." i.~ '; "- -• " — , ^ i
:• :i :- -.'. C. '-'. - .':".'"....... -2 t • - - - • " • - -
-:.:-. i : .-.*:-.= = (¡:^;.^
Ve
Vn-n
'^—~ s
"^MenúVentana
de código
de máquina
de línea
actual
Ventana
de stack
Funciones
Ventana principal
de memoria
Ventanas relativas
de memoria
Status
Ayuda sobre
la oü ci ón a ctual
17
C. ESPECIFICACIONES )OR 8085
En este apéndice presentamos la estructura lógica que
presenta este raicroprocesador. No pretendernos dar a
conocer su set de instrucciones ni las técnicas de
programación que se le aplican, sino hablar brevemente
sobre sus registros y sus loodos de direccionamiento.
Registros. El 8085 es un microprocesador de 16 bits,
es decir que su mínima unidad lógica es el "word"; sin
embargo, es posible tener acceso a bytes individuales, e
incluso a bits aislados. Consta de 18 registros, a los que
podemos clasiiicar en cuatro grupos:
Gráfico C.1: Registros de segmento
Registros de datosRegistros de índice y
apuntadores
AH
BH
CH
DH
AL
EL
CL
DL
AX
BX
CX
DX
Registros de segmento
CS
DS
SS
ES
SP
BF
•SI
DI
Apuntador de instrucciones yregistro de banderas
X X X X 0 D I T S Z X A X P X C
IPPSW
, J.
Especificaciones
Los registros de datos tienen la característica de
que pueden ser tratados corno registros normales de 16
bits, o como registros dobles, compuestos por registros de
8 bits.. a los que se puede tener acceso corno si se tratara
de registros independientes. Son de uso general, pero cada
uno tiene características específicas. El registro AX es
el acumulador (también lo es el AL en operaciones de 8
bits), y las operaciones que lo involucran suelen tener un
tiempo de respuesta bastante pequeño, BX (base Índex) es
un registro bastante especial, pues puede funcionar
también como apuntador. CX es un contador que suele
contener el número de iteraciones que se harán en procesos
repetitivos, DX es un alinacenador general de datos.
Los .registros de índice pueden también ser utilizados
corno almacenadores de uso general, pero tienen los
siguientes usos específicos. SP (Stadk -pointer) es un
apuntador a una pila tipo FILO (first in - last out), y
está implícitamente involucrado en operaciones como PÜSH y
POP, BP (Base pointer) es un apuntador normalmente
asociado con la pila. SI (Source Índex) y DI (Destination
Index) se involucran con operaciones de tiras de datos
corno MOVS.
Especificaciones
Todos los apuntadores representan únicamente offsets,
es decir, direcciones relativas respecto de otras
absolutas. Tales direcciones absolutas se determinan
mediante los llamados "registros de segmento", los cuales
direccionan párrafos. Cada párrafo es un grupo de 16
bytes; así, si uno de los registros de segmento tiene un
valor de 3, estará direccionando la memoria fisica 48. El
registro CS (code segrnent) direcciona código; DS (data
segrnent) direcciona datos, SS (stack segment) direcciona
la pila, y ES (extra segment) suele también asociarse a
datos.
Por último, IP (instruction poÍnter), apunta a la
próxima instrucción que ejecutará •el microprocesador
dentro del segmento de código; ésto quiere decir que la
dirección física de dicha instrucción será 16*CS-f-IP. PSW
(prograra status word) es un registro en que cada bit es
una "bandera", un indicador de estado de lo que viene
ocurriendo en cada momento, de la ejecución del código. Las
banderas son las siguientes:
0: Overflow. Es 1 si una operación aritmética
produjo un sobreflujo.
Especificaciones
El contenido del P3W es el elemento de decisión en
los saltos condicionales.
Modos de direccionarniento: El programador puede
referirse a un lugar de la memoria mediante
direccíonaioiento por índice proporcionando un registro de
segmento y un offset (por ejemplo 55:[BX+DI+17]); los
modos de direccionamiento posible son los mismos que se
exponen en una -cabla previa, en la explicación del módulo
As seto. Asm. Sin embargo, es posible proporcionar únicamen/te
el offset, y el rnicroprocesaaor asumirá un registro de
segmento por defecto, de la siguiente manera:
Tabla C.2- Registro de segmento predefinido
SI+BX (+DesT>) DSDI+BX (-í-Desp) DSSI-t-BP (+Desp) SSDI+BP (+Desp) SSSI (+Desp) DSDI (-HJesp) DSDesp. DSBX (-f-Desp) DSBP C+Desp) SS
Finalmente, las operaciones de tiras de datos no
aceptan parámetros , y siempre tornan a DS: SI como fuente y
a ES:DI como destino.
D. LLAMADAS A FUNCIONES DEL DOS Y DEL BTOS
En est.e apéndice lisT.aroo? algunas funciones
disponibles del BIOS y del DOS sin explicarlas en detalle.
Todos los valores numéricos están en nexadecimal.
Tabla D. 1
Funciones del B10S.-
Servicio
Impresión de
pantalla
Video
Video
Video
Video
Video
Video
Video
5
10
10
10
10
10
10
10
Video
Video
Envía el contenido de la
pantalla a la impresora
0 Fija el modo de video
1 Ajusta el tamaño del cursor
2 Posiciona el cursor
3 Lee la posición del cursor
4 Lee la posición del lápis
óptico
5 Elige la página activa
5 (AL=80) Obtiene los registros de la
página de video
10 5 (AL=81) Da valores al registro de la
página de video de la CPU
10 5 (AL-82) Da valores al registro de la
página de video de la CRT
E. EL GKNRRADQR_INTER ACTIVO T)K
Vent. Exe es un programa cuya misión es facilitar la
creación de áreas de pantalla con un formato predefinido.
Utiiisa un controlador de flujo para evitar el tener que
manejar esta labor.
Una ventana tan solo es un rectángulo de la pantalla.
Puede contener información cuyo contenido varía a lo largo
de la ejecución del programa o es constante. En el
generador interactivo de ventanas cada posición de la
pantalla se define por dos bytes: el carácter que la ocupa
y el atribulo que posee.
El programa se corre dando corno parámetro el nombre
del archivo que contiene las ventanas o se quiere_crear .
Si el archivo es nuevo y el usuario confirma su creación,
se inicia la corrida con un índice inicialiaado con
valores que indican cero ventanas y cero grupos ocupados.
Expliquemos aquí qué es un grupo. Entre los métodos usados
para manejar informaciones que son creadas, editadas ,
borradas continuamente y con acceso aleatorio, uno muy
práctico, y que lo emplean incluso los sistemas operativos
es tener un índice en que se describe la ubicación de la
información. Lo ideal sería tener todo el espacio
ocupado , sin áreas desperdiciadas . Esto , sin embargo , no
1
Ventanas
es aplicable en la práctica. La cantidad de información
necesaria para saber la ubicación de cada unidad elemental
de raemoria seria más grande que la información almacenada.
Por éso se tiene que trabajar con áreas de memoria
relativamente grandes, que se convierten en los elementos
de la memoria. El área no debe ser muy pequeña por el
problema descrito hace poco. Sin embargo, no debe ser muy
grande porque el espacio no ocupado dentro pasa a ser
inutilisable. El índice del programa de ventanas se
inspira en el formato del directorio del CP/M, que es lo
bastante sencillo como para adaptarse a nuestras
necesidades sin dejar de ser efectivo. El tamaño del área
es de 256 bytes, y es llamado un grupo en Vent.Exe.
Una ventana solo puede almacenarse ~en un número
entero de grupos (en Vent.Exe el límite es cuatro grupos).
La información de la ventana se almacena secuencialmente,
y por cada ventana se mantiene un Índice con datos
importantes.
Las ventanas se crean dando un nombre, marcando dos
esquinas suyas opuestas y grabando lo creado. Luego se
define su contenido. En la opción "Caracteres" se definen
los datos e informaciones que la ventana presentará. Si
Ventanas
alguna posición va a ser de valor variable, se la marca
como "Variable", Luego se definen loe. "Atributos" de la
ventana. Cada punto puede tener un diferente atributo.
Aquí se define la presentación de la ventana.
Asi se siguen creando las ventanas que algún programa
necesit-a. Es conveniente que antes de empezar se tenga una
planificaciórj de la pantalla, al menos aproximada. En todo
caso el programa permite eliminar ventanas, mostrar las
existentes, alterar algunos de sus parámetros, etc. .
Cuando una ventana es creada ocupa los primeros
grupos vacíos que encuentre, aunque no sean consecutivos.
Cuando una ventana es borrada deja sus grupos libres para
que la próxima ventana creada los ocupe. Al cabo de cierto
tiempo de creación y borrado de ventanas, es lo más normal
encontrar un archivo completamente desordenado, con
espacios vacíos y que solo es manejable por el buen uso
del índice, Esto se puede ver con las opciones Informa e
íNdice del menú principal. Cada ves que el usuario
necesite, y siempre que ya quiera usar el archivo de
ventanas para su aplicación, deberá ordenar el archivo con
la opción respectiva, SI método de ordenación es este: No
dejar grupos vacíos en el archivo, colocar primero las
3
Ventanas
ventanas principales, y luego las secundarias. El archivo
se trunca siempre al final del último grupo válido.
En este momento hemos topado otro tópico interesante:
Cuando el usuario planifica su programa sabe que existen
ventanas que deben aparecer continuamente, pero otras que
solo lo hacen de manera ocasional. Las ventanas que más
aparezcan (principales), debieran ser instaladas en
memoria y no retiradas, para que su lectura sea rápida.
Las otras serían leídas de disco, a menos que hayan sido
leídas recientemente y aún estén en memoria (concepto de
residencia). Al crear una ventana, el usuario será
interrogado por su categoría, que puede ser principal o
secundaria. Podríamos pensar que lo óptimo es que todas
las ventanas de un archivo sean principales, pero ésto
lleva a tener que dejar muy extensas sonas de memoria
dedicadas a contener las ventanas. Por éso Vent limita el
número de grupos principales a 40, ésto es, unos 10 kB,
que, bien utiliaados podrían tener la definición de unas
dos pantallas completas. Al referirnos a una buena
utilización hablamos de que no haya demasiado desperdicio
del espacio de los grupos. Este caso ocurre, por ejemplo,
cuando se definen muchas ventanas de rouy poca área.
Ventanas
Hasta este momento solo hemos hablado de la creación
oe ventanas. Cómo utilizarlas? Al final cié este apéndice
cronr-ta el es quero» del índice y deü archivo de ventanas. El
usuario podría dar el uso que estime conveniente a esta
información y crear sus rutinas de manejo de las ventanas
creadas. Sin embargo, al escribir el programa Pro, hemos
creado un archivo llamado Macvnt.Asm que podría ser
incluido en cualquier programa en Assembler, para usar sus
macroí (Puede leerse el listado de Pro. Asió para observar
la manera oe incluir Macvnt. y utilizar los macros del
archivo:
Como se detalle en el listado de Macvnt, los macros
principales son tres: El primero (IDVNT) sirve -para
indicar dónde el programa ha dejado un área para ventanas,
cuál es el nombre del archivo de ventanas que se va a
leer, y el tamaño del área de ventanas. Existe la
necesidad de que las ventanas principales y el índice sean
residentes (el índice ocupa 6 grupos), de que haya un
área común de, al menos, 4 grupos para residencia temporal
de las ventanas secundarias, y un grupo para uso del
macro. Entonces el área debe ser de, al menos, el número
de grupos principales más 11. Ese número de grupos
principales es una de las informaciones dadas por Vent.
£ .¿ - c •.. j e ;n h n e i are í i1 v i ••
Archivo de Ventanas
Cada entrada cel indi?-:- tiene ¿4 rytírí .
I na i ce: ¡ EntradaGrupos ) Entrada
1 (i &¡ 5 i Entrada.' j Entrada; !
í i Entradai
0. -1.-F;
fj,,! . —
63.-
Par ame tros GeneraierMapas- de ventanas yMapas de ventanas yParámetros ventana 5;
Parámetros ventana
gruposf.rupoí,
63
Área der-
Tabla E. 2:: rarénjttror- generales
Parámetros Generales .
Offset
¿ \
Parámetro
v ventanas val 3 das# grupos válidosUltima ventana válida
C- Ultimo grupo válido4 la. ventana libre5678910-111213-1415
16-24
Ir. grupo libreVentana actualGrupo actual# ventanas principales
Valor en índice:nuevo y (rango)
0 (0-61)0 (0-244?2 (2-63)5 (5-245 -3 ( 3 -63'6' (6-249;3 (3-63 i6 Í6-249"'0
tf grupos principales j 0 (0-40)Dirección de residentesTamaño área residentesHandle archivo ventanasPróx. grupo de área de
• *. ^res i a en tes a s er usaaoLibres
Tatúe. H . '. ?arárneTr.:.3 particulares
ven" hrjai
Parámetros de una ventana.
'..'ri ser. ;Valorea•! Muevo y f r¿iiFo )
(! (ó byx.es^ Vi -i •*- f iV L'JL v "
f l'-Í -f 1G «-i-I t' Jo10-1JJ í - l r14- lí
Ir- D >í
I Nombre ¡CaT-egori& fi (d , :",he.-iderjci;-i O t f ; / : -tí grupos en ventana j O í u - 4 •í- v?.r3 abi e?- ventaría i ; ? : ít- f. 1Ti', r-q u T n'-* .c--x:r. i z 'i ' O fri^r;T.a " 7 9 , 2 2 -^ c i 3 í"1 *' V i £ 1 iiT Q&r • !"1 ! íl *-". c'. T"?! 7 £í , 22 '
grupores j.
F. EMPLEO T)EL CONTROLADO]? DE FLUJO
En este apéndice presentarnos un listado del esqueleto
del programa controlado. Constan todas las declaraciones
necesarias, se indica el sitio donde deben colocarse los
buf f ers, la información de la?- opciones, las
explicaciones, y los menúes y el rosero Petorno.
ir.'Uspíünsable para que el controlador funcione. Asi mis roe.,
se indios la ubicación de los datos y rutinas del
usuario. Base. Asín podria copiarse a otro archivo que se
ut i usaría corno punto de partida.
Base.Asm
. modei s ros 11
. da "o apublic tabbuf , tabini, nraaxbufextrn dirret; near,mraux2:«oro,rarauxS: worcextrn videoseg:word,valptr:wordextrn mopaux: byte , raopauxl: byte, tiprut: byt.eextrn areamac: near, bgmac: byte, braac: by^e , bver:
nmaxbuf equtabbux db
db
dwdbdwdb
db
db
;« de buffersOlh,OOh,OOh,00h,00h.OOh,00h,00h 4 principal
expO
menú O
offset expOjoffset menuO,offse TV rutO3
'a b c d' ,0,4 , "ABC!1' - Odatos del programa #*# *****.**-##*
. codepublic rinic,rfinal