UNIDAD : IZTAPALAPA.
'~IVISIÓN : CIENCIAS BASICAS E INGENIERIA.
/ CARRERA : LICENCIADO EN COMPUTACI~N.
MATERIA : PROYECTO DE INVESTIGACIóN.
'TITULO : SIRNULADOR DEL SISTEMA. MÍNIMO 8088
+ECHA : SEPTIEMBRE DE 1998.
/' ALUMNO : MONTEJO RUBIO ALEJANDRO.
MATRICULA : 90323070
ASESOR : ING. MIGUEL ANGEL Ruíz SANCHEZ. !Y eyk.xJD /?/+y'"f
AVISO.
El software que se describe en este manual está protegido por derechos de autor. Queda prohibida su fotocopia o reproducción, en cualquier forma, sin previa autorización por escrito del autor.
Los nombres de productos aquí mencionados pueden ser marcas comerciales y/o marcas comerciales registradas de sus respectivas compañías.
Intel es una marca registrada, y su serie de procesadores son marcas registradas por Intel Corporatión.
Microsoft, el logotipo de Microsoft, MS-DOS, Microsoft Visual Basic, MicrosoR Power Point y Microsoft Word, son marcas registradas
Windows 3.1 1 y Windows 95 son marcas de Microsoft Corporatión.
Paintbrush es una marca de ZsoR Corporatión. Core1 Drow ver.7 es un producto registrado por Lotus Inc.
INTRODUCCION ................................................................................................................................. 1
INTRODUCCION ................................................................................................................................. 2
RESEÑA HISTóRICA DEL MICROPROCESADOR INTEL ............................................................... 3
RESEÑA DEL PROCESADOR INTEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 INTEL 3000 .......................................................................................................................................... 4
INTEL 8008 .......................................................................................................................................... 5 INTEL 8048 (MCS-48) ......................................................................................................................... 5
INTEL 8086 .......................................................................................................................................... 7
INTEL 4004 .......................................................................................................................................... 4 INTEL 4040 .......................................................................................................................................... 4
INTEL 8080 .......................................................................................................................................... 6 INTEL 8085 .......................................................................................................................................... 6
INTEL 8088 .......................................................................................................................................... 8 Procesador 8088 ............................................................................................................................... 10 INTEL 80286 ...................................................................................................................................... 10 INTEL 80386 ...................................................................................................................................... 11
ARQUITECTURA DEL MICROPROCESADOR INTEL 8088 ........................................................... 14
(ARQUITECTURA BASICA DEL MICROPROCESADOR 8088) ..................................................... 15
FUNCIONAMIENTO DEL SIMULADOR ........................................................................................... 23
FUNCIONAMIENTO DEL SlMUlADOR (MANUAL DE USUARIO) ................................................................ 24 OBJETIVO : .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 JUSTlFlCAClON ................................................................................................................................ 24 PROPOSITO : ................................................................................................................................... 24 DESCRIPCION DEL SISTEMA: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
PRESENTACI~N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 PORTADA .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Alejandro Montejo Rubio
1
EDITOR ............................................................................................................................................ 29 COMPONENTES G ~ F I C O S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 MENUS ............................................................................................................................................. 30 MICROAYUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 VENTANA DEL SIMUIADOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 REGISTROS APUNTADORES E iNDlCES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
MODOS DE DIRECCIONAMIENTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
EJEMPLOS DE APLICACIdN: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
INFORMACIóN TÉCNICA DEL FUNCIONAMIENTO INTERNO DEL SOFTWARE ....................... 49
INFORMACldN TÉCNICA DEL FUNCIONAMIENTO INTERNO DEL SOFTWARE (MANUAL TÉCNICO) ............. 50
REGISTROS DE SEGMENTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Registros Internos del Microprocesador ............................................................................................ 37
Carga de datos: ................................................................................................................................. 37
Arquitectura Interna BAsica del Sistema Mínimo 8088 ...................................................................... 50 Ciclo de Fetkh . (algoritmo llamado Siguiente-click, localizado en la forma 1 . frm) ............................. 50 PROCEDIMIENTO DE EDICIóN DE PROGRAMAS ............................................................................. 65
CONCLUSIONES .............................................................................................................................. 66
APENDICE ......................................................................................................................................... 67
Codigo Fuente ................................................................................................................................... 67
BlBLlOGRAFlA ................................................................................................................................ 123
Alejandro Montejo Rubio . .
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
INTRODUCCI~N.
Alejandro Montejo Rubio 1
Introducción.
El nacimiento del microprocesador ha sido uno de los avances signiticativos que cambio la historia de la humanidad, hoy en &a se ha convertido en indispensable porque se utiliza en áreas de vital importancia para el ser humano.
El microprocesador 8088 es predecesor de una gran familia, esto se da porqué actualmente está familia de microprocesadores es la más empleada comercialmente en el mundo. Por lo anterior es necesario que las nuevas generaciones de estudiantes relacionados con el desarrollo en computación a bajo nivel, cotlozcan el funcionamiento de esta familia. Se estudia al microprocesador 8088 porque conocido su funcionamiento, es fácil de aprender el funcionamiento de los demás elementos de esa familia.
La tecnología actual hace posible y necesario que el aprendizaje en el ámbito computacional se haga más eficiente, hacibndolo más dinhico, interesante y agradable. Para aprender el funcionamiento de un microprooesador se puede emplear el apoyo de una herramienta que virtualmente funcione como un micro procesador, proporcionando información gráfica de cada uno de sus componentes, así como de proporcionar resultados, según las condiciones iniciales que se le proporcione. Est6 herramienta se le comce como simulador de rnicroprocesador.
Esté reporte se divide para su mejor comprensión en seis capitulas importantes:
ResePia Histótica, comenzando por una descripción tecnol6gicaevolutiva del microprocesador a Iravés del liempo, desde su invención, abarcando su desarrollo temoldgico hasta el que compete en este proyecto, mencionando induso los más recientes.
Arquileckrra del microprocesador, permitirá una comprensión más fácil al estudiante, dados sus esquemas y diagramas simplificando su esktdio y funciones atrgveZ del despliegue de cuadros de dialago con el fin de e>cplicar cada componente.
Funcionamiento del Simulador, mediante las principales operaciones y el uso de la manipulación de la memoria se llevard a cabo el desarrollo de operaciones y resultados, todo dentro de un entorno gr6fico y sencillo.
Informaci6n thcnica del funcionamiento interno del software. manual t4cnico y del usuario, conlormado para poder realizar consultas y el estudio de la r e d i c i h del simulador.
Condusiones personales y el &digo del sistema. Conformado por el &diga fuente del simulador
c Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Reseña histórica del microprocesador Intel
Alejandro Montejo Rubio 3
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
RESENA DEL PROCESAUOR INTEL
INTEL 3000
La familia 3000 de INTEL constituye un procesador microprogramable constituido con elementos de 2 bits concatenables para ampliar la longitud de palabra. Esta realizado en tecnología Schottky TTL con lo que se alcanzan ciclos de microinstrucciones de 160 ns. La arquitectura es tal que permite confeccionar un calculador de palabra de cualquier longitud en incrementos de 2 bits, añadiendo hardware complementario, se consiguen mejores características incluso la de velocidad.
El microprograma se almacena en ROM bipolares convencionales. El chip 3001, que es la unidad de control del microprograma (MPU), genera la secuencia de direcciones de ROM analizando la microinstrucción actual, los bits de estado y 8 bits de la macroinstrucción extraída del almacenamiento principal. La MPU es capaz de realizar hasta 16 tipos distintos de bifurcación pero no tiene previsto realizar bifurcaciones guardando dirección de retorno, con lo que quedan inhabilitadas las subrutinas en el microprograma. (De todas formas existen métodos para manejar rutinas con hardware externo). E! chip que completa el procesadores el 3002, Elemento Procesador Central (CPE).Cada CPE contiene una unidad aritmética (ALU) de 2 bits, un registro de dirección de memoria, un acumulador y 11 registros generales. Dispone de salidas de carry para generar ripple-carry o look-ahead.Una característica poco usual de la CPE es que incluye un bus de mascaras, el bus K. El acumulador y el bus de entrada de la ALU son enmascaradas por el bus K que realiza la función lógica y con ellos.
Cada microinstrucción mueve datos desde un bus de entrada especificado o desde un registro, hacia un destino seleccionado, a través de la ALU. La microinstrucción incluye el código de función de la ALU, bits de control de estado, y saltos condicionales hacia la próxima microinstrucción, y todo ello se ejecuta en un Único ciclo de 160 ns. Disponiendo hardware externo, concretamente un conjunto de latches entre ROM y CPE. la ejacución puede sola;?arse con la extracción (fetch) de la siguiente microinstrucción. Con ello los ciclos c ' ? microinstrticcior;es quedan reducidos a 120 ns.
INTEL 4004
El Intel 4004 es el primer microprocesador aparecido en el mercado y miembro de la familia MCS-4, conjunto microcornputador de 4 bits. La estructura de direccionado es tal que existe diferenciación entre programas y datos, tanto desde el punto de vista del medio de almacenamiento como del sistema de direccionado. El MCS-4 puede parecer a primera vista difícil de manejar dadas sus características, pero una vez que ha sido asimilado se convierte en un potente y completo conjunto. El MCS-4 esta constituido por chips que realizan las funciones de CPU, RAM y ROM (con entradas y salidas en el mismo chip) y pueden ser interconectados con varios medios de almacenamiento. Las comunicaciones entre los chips se realizan a través de un Único bus de 4 bits, lo cual permite que todos los chips del MCS-4 estén realizados en circuitos integrados dual-inline de 16 patillas; pero esto es causa de que el ciclo de instrucción sea lento ya que debe recurrirse a un uso multiplexado del bus, y los tiempos de ejecución son 10.8 o 21.6 microsegundos ( según las instrucciones de que se trate). El microprocesador tiene un conjunto de registros para uso general constituido por 16 registros de 4 bits además de un acumulador, también de 4 bits. Las direcciones de retorno se almacenan en un stack de 4 posiciopes, en el cual el dígito seleccionado 8': el contador de programa actual. El stack y por lo tanto el contador de programa es de 12 bits con lo cual la capacidad de direccionado es de 4 Kbits de programa. Las instrucciones no pueden hacer referencia a datos por medio de un direccionado directo: únicamente se dispone del modo de direccionado indirecto a traves de registro. Para seleccionar un dato almacenado es necesaria una secuencia entera de instrucciones. Únicamente una cuidadosa colocación de los datos en la memoria RAM puede hacer menos difícil el direccionado.
INTEL 4040
De la misma forma que la experiencia con el 8008 fue utilizada por Intel para desarrollar un modelo perfeccionado, el 8080, por la experiencia con el 4004 se crearon las especificaciones para el 4040. De todas formas no hay una relación de proporcionalidad entre 8008-8080 y 4004-4040. El 4040 sigue siendo un chip P-MOS de
Alejandro Montejo Rubio 4
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
velocidad lenta, ahora bien la mayoría de los defectos del 4004 han sido solventados en el. El 4040 comparado con el 4004 ofrece las siguientes diferencias:
4004 4040 Cápsula
SI NO Instrucciones Lógicas 24 16 Numero De Registros 8K 4K Espacio en ROM 24 Terminales 16 Terminales
Interrupciones NO SI Instrucciones HALT NO SI Stack De Dirección De Retorno 8* 12 4*'12
El espacio de memoria para programa ha sido ampliada de 4 K a 8 K creando un nuevo banco de memoria (el 4004 solo tenia un banco de 4 K y el 4040 tiene dos bancos de 4 K ). Dado que el direccionado en las llamadas a rutina y en las bifurcaciones sigue siendo a través de registros de 12 bits, se han creado instrucciones especiales de bifurcación y de llamadas a rutinas entre bancos. Las interrupciones se manejan creando una llamada a subrutina a una dirección fija de 12 bits, pero sin alterar el registro de selección de banco; es necesario pues suplicar en cada banco las partes iniciales de las subrutina de atención a las interrupciones. Las direcciones de retorno de subrutina se almacenan en un stack de 8 posiciones, con lo que se admiten hasta siete niveles de subrutina. Para que las interrupciones puedan ser atendidas conviene dejar siempre un nivel de chip de entrada y salida para utilización universal.
El 8008 es el microprocesador de 8 bits, introducido por Intel después del 4004. Esta realizado con tecnología P- MOS y tiene una velocidad de operación de unos 20 micro segundos por instrucción; existe una versión mejorada del mismo, el 8008-1, que realiza las instrucciones en 12.5 micro segundos. La CPU esta organizada internamente como un computador de 7 registros. Uno de ellos es el acumulador que es el registro por el cual pasan todas las instrucciones aritméticas y de entradalsalida. El 8008 no soporta instrucciones con direccionamiento directo de memoria, por lo que todas las referencias a memoria deben hacerse a través de 2 registros de la unidad central. Para extraer un datos d memoria, el programa debe cargar 2 registros específicos de la CPU con la dirección del dato. Esto significa que deben utilizarse por lo menos 3 instrucciones para cargar un dato de memoria en el acumulador. El encapsulado en 16 patillas obliga a que todos los datos y direcciones viajen por un Único bus bidireccional de 8 bits. Las direcciones, que son de 14 bits, necesitan dos ciclos consecutivos para ser enviadas hacia el exterior, y en el entorno del chip debe disponerse de los múltiplexores y latches necesarios para almacenar la dirección. El sistema de interrupción del 8008 es un modelo de sencillez. Cuando llega una petición de interrupción, el procesador acaba la instrucción en curso e inhibe la incrementación del contador de programa, pues emite una señal indicando que ha reconocido la interrupción y seguidamente procede a una fase normal de extracción de la próxima instrucción. Unos circuitos exteriores activados por la señal de interrupción reconocida fuerzan entonces en el bus de datos una instrucción, y esta instrucción externa, que generalmente es una llamada a rutina, queda intercalada en la secuencia del programa. El 8008 presenta un problema en el manejo de interrupciones. Cuando llega una interrupción es necesario salvar registros de memoria pero para ello se precisa el uso de los registros de índice, con lo que solo hay dos soluciones, que son: reservar dos registros al uso exclusivo de las interrupciones o bien utilizar algún truco de tipo hardware. Esto es una muestra de los efectos secundarios de un sistema de dkeccionado poco elaborado. La aparición del 8080 ha solucionado la mayoria de estos problemas y por otra parte ha beneficiado a la familia 8008 ya que el 8080 ha aparecido con varios chips periférico que son así mismo aplicables al 8008 y que simplifica notablemente la circuiteria externa del microprocesador.
INTEL 8048 (MCS-48)
Microcomputador en un chip, que incluye en una pastilla de 40 patillas todos los componentes necesarios para realizar un microcomputador totalmente operativo. Concretamente incluye:
CPU de 8 bits con generador de reloj e 1 K * 8 ROM para memoria de programa O 64 * 8 RAM para memoria de datos d 27 líneas de entradalsalida
Alejandro Montejo Rubio 5
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Temporizador/Contador programable de 8 bits
El chip se alimenta con una única tensión de 5 V y existe en una versión patilla a patilla compatible, pero con EPROM en vez de ROM. Esta versión, 8748, es muy interesante para la realización de prototipos o series cortas, por la facilidad que ofrece la modificación de la memoria de programa. En cambio la versión 8048 ofrece ventajas económicas importantes en las series largas. Existe así mismo otra versión 8035, sin memoria de programa para aplicaciones en que se desea ajustar exactamente la memoria del sistema a la memoria necesaria utilizando ROM externas. Los 8048/8748/8035 pueden utilizar lineas de entradalsalida como líneas de comunicación con elementos de memoria externos cuando se desea expandir la capacidad propia del chip. Para este fin hay una serie de dispositivos directamente conectables sin necesidad de ningún circuito auxiliar. 8243 Extensión de entrada y salidas. Extensión de la memoria de datos (módulos de 256 * 8 de RAM).8355/8755 Extensión de memoria de programa (módulos de 2 K * 8 de ROM/EPROM). La máxima capacidad de memoria direccionable es de 4K de memoria de programa y 1088 octetos de memoria de datos. La CPU del 8048 ejecuta un repertorio de 90 instrucciones que incluyen aritmética BCD y que están codificadas en forma muy eficiente, ocupando solo uno o dos octetos y ejecutándose en uno o dos ciclos de maquina (2.5 mslciclo). La CPU acepta una interrupción y dispone de un stack de 8 niveles para almacenamiento de las direcciones de retorno de llamadas a rutina. Las instrucciones del 8038 no ofrecen ningún tipo de compatibilidad con los de las series 4000 u 8000. No obstante, el sistema de desarrollo MDS-800 dispone de software para aplicaciones al sistema 48, incluyendo editor ensamblador y monitor para puesta a punto de programas junto con un emulador en tiempo real del sistema con 8048 (ICE-48). El ultimo miembro de la familia MSC-48 es el 8049, es compatible pin a pin con los demás miembros de la familia y dispone de 2K ROM, y 128 octetos RAM.
INTEL 8080
Este microprocesador de INTEL ha dado nombre a la llamada segunda generación de microprocesadores. aunque desde el punto de vista de la programación es compatible con su predecesor su arquitectura es substancialmente distinta. Nació de la experiencia adquirida con el 8008,8080 ha solucionado todos los inconvenientes mencionados en la anterior descripción del 8008. Los cambios mas substanciales entre ambos microprocesadores son: en primer lugar encapsulado en 40 patillas en vez de 18, lo que permite disponer en paralelo los buses de datos y direcciones evitándose la necesidad de multiplexados; en segundo lugar, la utilización de la tecnologia N-MOS en vez de la P- MOS. En total, gracias a estas dos circunstancias, la velocidad del 8080 se ha multiplicado por diez. Por otra parte, el repertorio de instrucciones se ha enriquecido notablemente: por ejemplo, ademas de todas la instrucciones del 8008 se incluye de aritmética decimal, saltos indirectos, operaciones sobre registros y datos de memoria de doble longitud. Instrucciones con referencia directa a memoria, instrucciones de manejo de stack, etc. Estructuralmente el 8080 tiene 3 registros de 16 bits y un acumulador. El conjunto de registros puede verse también como siete registros de 8 bits. El 8080 incluye un puntero de stack que se utiliza para crear un stack en memoria y guardar las direcciones de retorno y datos. Pueden señalarse dos inconvenientes en le 8080 desde el punto de vista del programador se hecha en falta la ausencia de direccionado indexado y, desde el punto de vista de hardware, es molesta la necesidad que tiene de tres tensiones de alimentación. Intel ofrece para el 8080 gran cantidad de chips que simplifican la construcción de sistemas con este microprocesador. Entre ellos se encuentran: RAM, ROM y PROM de diversas configuraciones y tamaños, driver de bus, circuitos de interface de aplicación personal, interface para comunicaciones, generador de reloj, etc.
INTEL 8085
Microprocesador de 8 bits con una estructura y conjunto de instrucciones 100% compatible con el 8080. Se trata de una versión mejorada del 8080, pero que participa básicamente de todas sus caracteristicas. Las ventajas que ofrece son las siguientes:
a) Más prestaciones En la velocidad de proceso (ciclo básico de instrucción de 1.3 microsegundos en vez de 2 micro segundos ) En el sistema de interrupciones (además de la interrupción del sistema 8080, presenta 3 líneas de interrupción adicionalmente enmascarables por programa y 1 línea de interrupción de alta prioridad 1
Alimentación a una sola tensión ( 5 V en vez de 5.12 y -1 2 ). Generador de reloj incluido en el chip.
b) Mayor simplicidad de uso
Alejandro Montejo Rubio 6
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Decodificador de estados incluido en el chip ( En el sistema 8080 la señales de control para acceso a memoria y periféricos se emiten por el bus de datos codificados requiriéndose la utilización de un circuito auxiliar, 8228, para almacenar y codificar las señales de control; en el sistema 8085 la función del 8228 esta incluida en el chip y la señal de control sale directamente por patillas determinadas de la pastilla).
El 8085 esta encapsulado, al igual que el 8080, en una pastilla de 40 patillas, por lo que para poder ofrecer la señales de control que ofrece el 8085 se ha multiplexado el bus de datos. El bus de direcciones es solo de 8 líneas por lo que se envían los 8 bits bajos de dirección, y los 8 bits altos se envían por el bus de datos, esto da lugar a que haya que disponer unos biestables fuera del chip que memorizan la parte alta de la dirección. De todas formas, Intel ofrece toda una serie de productos de memoria y E/S directamente conectables al 8085 que incluyen los biestables de dirección alta.Estos dispositivos, orientados específicamente al 8085 son:
4 8155 256*8 RAM, 2*8 16 ports programables y 1 temporizador de 14 bits. 4 8355 2 K * 8 bits ROM y 2 ports de 8 bits programables + 8755 2 K * 8 bits EPROM y 2 ports de 8 bits programables Con el uso de estos dispositivos puede realizarse un sistema completo con 3 chips (CPU 8085, memoria de
programa 8355, memoria de datos 81 55 y E/S en los anteriores 81 55 y 8355). Además del 8085 soporta toda la familia de productos del sistema 8080 (RAM, ROM, EPROM, circuitos de control de memoria y circuitos de control de periféricos).
INTEL 8086 Es el iniciador de una nueva generación de micro Procesadores de altas prestaciones juntamente con el 28000 y
MC68000, que se distinguen por su nueva arquitectura, ciclos de instrucción por debajo del micro segundo y espacios de direccionado del orden de los Mbytes. El 8086 tiene una longitud de palabra de 16 bits y una capacidad de direccionamiento de un Megabyte. Contiene internamente un sistema de segmentación de la memoria y puede trabajar en tres espacios de direccionado, para código, datos y stack. No dispone sin embargo de diferenciación entre modo sistema y modo programa presentando algunas limitaciones para su utilización de ambientes múlti - usuarios. La arquitectura del 8086 consiste en dos procesadores asincronos, uno se encarga de la interfase con el bus y contiene una cola en la que se puede guardar hasta 6 octetos extraídos de la memoria con anticipación, ebotro procesador es el encargado de la ejecución de las instrucciones. Tal arquitectura tiene la ventaja de que permite una velocidad de ejecución de instrucciones extremadamente alta sin exigir que la memoria sea de tiempo de acceso muy pequeño. Su arquitectura junto a su tecnología H-MOS de gran velocidad permite conseguir un ciclo de instrucción de 400 ns. El 8086 es capaz de soportar configuraciones multiprocesador, disponiendo de las señales LOCK y TEST para protección y sincronización. El repertorio de instrucciones es muy completo y potente, incluye multiplicación y división, permite el manejo de diversos tipos de datos (BCD, bit, octeto, palabra, cadena) y diversos modos de direccionado (24 en total). El 8086 dispone de una amplia gama de circuitos adicionales que complementan la familia entre los que se puede destacar el 8089 que es un controlador de canal con acceso directo a memoria y que contiene una unidad central basada en el propio 8086 con instrucciones especializadas para la ejecución de programas de canal. El soporte hardware y software para el desarrollo es así mismo muy completo, incluye compiladores de PLM86, ensamblador y el programa de conversión CONV-86 para compatibilidad con los sistemas 8080 y 8085.
( lnterfaz de Memorla
BUS-B
- uccioner de
Unldad Interface de BUS
Unidad de e)ecuc~ón y control del slstema
Unidad elecucl
I Yrl I YL I I BH I BL I
Alejandro Montejo Rubio 7 I
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
INTEL 8088
Se iniciará la exposición de la máquina convencional con el Intel 8088, el "cerebro" de la IBM PC y sus clones, y como tal, sin duda la CPU de uso mas extendido en el mundo. En el nivel de la máquina convencional, el 8088 y el 8086 son idénticos, de modo que lo que se mencione acerca del primero aplica por igual al otro. El 8088 puede direccionar 220 bytes, numerados de manera consecutiva a partir de O.
Las instrucciones operan ya sea en palabras de 8 o de 16 bits. No se necesita que las palabras inicien en un bit par, aun cuando el 8086 es un poco más eficiente si esto sucede.
Con 220 bytes de memoria, el 8088 necesita en realidad de direcciones de 20 bits para el direccionamiento de memoria. Ya que los registros y todo lo demás en la máquina usa palabras de 16 bits, los números de 20 bits son sumamente inadecuados. Para resolver este problema, los diseñadores de la CPU recurrieron al recupo de usar un kludge (que en la jerga de cómputo significa una forma torpe y poco elegante de hacer algo). El kludge consistió en introducir cuatro registros de segmento (códigos, datos, pila y extra), cada una conteniendo una dirección de memoria que apunta a la base de un segmento de 64K.
Cada registro de segmento apunta a alguna parte dentro del espacio de direccionamiento de 220 bytes. Toda extracción de instrucciones se hace en forma relativa al registro de segmento de código. Por ejemplo, se éste apunta a la dirección 96 O 0 0 y el contador de programa tiene un valor de 1 204, la siguiente instrucción será extraída de la dirección 97 204. Con este valor en el registro de segmento de código, se podrán extraer las instrucciones ubicadas en el rango de direcciones de 96 O00 a 161 535 . Para accesar una instrucción fuera de este rango deberá modificarse el registro de segmento de código.
En forma similar, existen los registros de segmento de datos y segmento de pila, para tener acceso a dichos segmentos. Por último, hay un registro de segmento extra que se usa como repuesto según se necesite.
Este esquema significa que en cualquier instante, se puede accesar un máximo de 256K de memoria sin cambiar ningún registro de segmento. Algunos compiladores limitan el código (las instrucciones) de los programas a 64K y otros a 64K para los datos y pilas, a fin de evitar la sobrecarga asociada con la carga y almacenamiento constante de los registros de segmento o la utilización del registro de segmento extra. En teoría, los registros de segmento deberían tener una dimensión de 20 bits a efecto de apuntar a cualquier dirección dentro del espacio de direccionamiento de 220 bytes. No obstante, como se mencionó anteriormente, el 8088 no está muy bien equipado para trabajar con números de 20 bits. Este problema se resolvió haciendo que todos los registros de segmento apuntaran sólo a direcciones que fueran múltiplos de 16 bytes, de modo que los cuatro bits de orden inferior son cero y no tienen que ser almacenados. De ahí que los registros de segmento contengan sólo 16 bits superiores de las direcciones de 20 bits.
El 8088 tiene 14 registros, todos de 16 bits, pero cada uno diferente. En principio, AX se usa para cálculos aritméticos. Por ejemplo, para la suma de dos enteros, un programa puede cargar uno de ellos en A X , luego sumarle el segundo y por último almacenar AX en memoria. Se pueden también usar otros registros, pero las instrucciones para hacerlo son más largas y lentas que aquellas que sólo usan A X .
BX se usa por lo general para almacenar apuntadores de memoria: CX para almacenar el contador en las instrucciones de iteración. Para repetir una iteración n veces, se carga n en CX, en cada iteración se decrementa CX y cuando llega a cero, ésta termina.
El registro DX se usa como una extensión de AX para las instrucciones de multiplicación y división, y almacena la mitad superior de un producto o dividendo de 32 bits.
Cada uno de estos registros de 16 bits consta de una mitad inferior y de una superior, las cuales se pueden direccionar en forma individual. Cuando se usan de esta manera, forman una serie de ocho registros de 1 byte que pueden utilizarse para manejar cantidades de 1 byte. Este ejemplo de registros de esa manera es un remanente de la forma en que trabajaba el antiguo 8088.
Los registros A 0 y AD se usan para operaciones con cadenas de caracteres. Una operación de este tipo requiere de una dirección de fuente, especificada por el registro A 0 dentro del segmento de datos, y un destino, dado por el registro AD dentro del segmento extra. Por ejemplo, una instrucción pudiera mover cierto número de bytes de la fuente al destino.
Alejandro Montejo Rubio 8
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Por lo regular, los registros AB y AP se emplean para direccionar las pilas. AB apunta a la base de la pila actual y AP a la parte más alta. Una variable local al procedimiento actual se direcciona normalmente dando el desplazamiento de AB (ya que no es posible especificar direcciones relativas a AP).
A continuación, vienen los cuatro registros de segmento descritos con anterioridad, seguidos del contador de programa, el cual apunta a la instrucción siguiente (relativa al inicio del segmento de código).
Los dos últimos registros son el AI (Apuntador de Instrucciones) y el de BANDERAS, que en la mayoría de otras máquinas se denomina Contador de Programa y PEP (Palabra de Estado del Programa). Como hemos visto antes, el elemento contador del programa apunta a la siguiente instrucción a ejecutar, así que es poco lo que se puede agregar.
Por otra parte, el registro de BANDERAS es nuevo y no es exactamente un registro normal, sino un conjunto de bits a los que se asigna un valor, se les borra o se verifican por medio de diversas instrucciones. En forma breve, estos bits tienen el siguiente significado: el bit R determina la dirección en las operaciones de cadena; el bit I, habilita interrupciones; y el bit T, habilita desvíos para rastreo, que se utilizan para efectos de depuración.
A los bits restantes se les llama con frecuencia códigos de condición, ya que adquieren su valor con diferentes instrucciones, dependiendo de las diversas condiciones que pueden surgir (resultado negativo, cero, etc.) El bit D toma el valor de 1 cuando ocurre un Desbordamiento en el resultado de una operación aritmética. El bit de signo S toma también valores con las instrucciones aritméticas, 1 para resultados negativos y O para positivos. En forma similar, el bit Z toma el valor de 1 para resultados con valor de cero, y el valor de O para resultados diferentes de cero. Los bits A y C representan los acarreos de la parte media y extrema de los operandos, respectivamente. Por último, el bit P indica la Paridad (non o par) del resultado de una instrucción aritmética. Existen además siete bits que no tienen uso en el 8088, aunque algunos de ellos se utilizan en los sucesores de este.
En el juego de instrucciones del 8088, muchas de ellas hacen referencia a uno o dos operandos, ya sea en los registros o en memoria. Por ejemplo, la instrucción INC incrementa (suma 1 a) su operando; ADD suma el operando fuente al destino. Algunas tienen variantes íntimamente relacionadas; por ejemplo, las intrusiones de desplazamiento pueden hacerlo hacia la izquierda o la derecha y pueden tratar al bit de signo de manera especial o no hacerlo. La mayor parte de las instrucciones tienen una variedad de codificaciones, dependiendo de la naturaleza de los operandos.
Los campos src son orígenes o fuente de información y no se modifican; en contraste, los campos dst son destinos y por lo general las instrucciones modifican su contenido. Existen reglas acerca de que se puede ser una fuente o un destino, las cuales varían de instrucción a instrucción, en forma en cierto modo errática. La mayoría de las instrucciones tienen dos variantes, una que opera en palabras de 16 bits y otra que opera en bytes de 8 bits y se diferencian por medio de un bit en la propia instrucción.
Por conveniencia, se han dividido las instrucciones en varios grupos. El primero contiene aquellas que mueven datos alrededor de la máquina, entre los registros, la memoria y la pila. El segundo grupo hace operaciones aritméticas, tanto con signo como sin él. Para las multiplicaciones y divisiones, el producto o dividendo de 32 bits se almacena en los registros AX (la parte de orden inferior) y en DX (la parte de orden superior).
En el tercer grupo realiza la aritmética Decimal Codificado en Binario (BCD), tratando a cada byte como dos partes de 4 bits. Cada parte contiene un dígito decimal (O al 9) y las combinaciones de bits de la I010 y 11 11 no se utilizan. De ahí que un entero de 16 bits puede almacenar un número entre O y 9999. Aunque esta forma de almacenamiento es ineficiente, elimina la necesidad de convertir entradas decimales a binario y regresar de nuevo a decimal para la salida. Estas instrucciones se usan para realizar las operaciones aritméticas con números BCD.
Las instrucciones booleanas y las de desplazamientolrotación, manipulan en varias formas los bits en una palabra o en un byte. Se incluyen diversas combinaciones.
Los siguientes dos grupos se refieren a verificaciones y comparaciones y a los saltos independientes de los resultados de éstas. Los resultados de las comparaciones se almacenan en los diferentes bits del registro de BANDERAS. La notación Jxx se refiere a un conjunto de instrucciones que efectúan saltos condicionales, dependiendo del resultado de la comparación.
Alejandro Montejo Rubio 9
I
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
El 8088 tiene algunas instrucciones para cargar, almacenar, mover, comparar y examinar cadenas de caracteres o palabras. Estas, pueden tener como prefijo un byte especial llamado REP, el cual hace que la instrucción se repita hasta alcanzar una determinada condición, como en el registro CX que sé decrementa después de cada iteración, hasta llegar a O. En esta forma, bloques arbitrarios de datos se pueden mover, comparar, etc.
HLDA I T T T T * CLK RST READ, M N ~ X GNDVCC
Procesador 8088
El 8088 (y también el 80286 y el 80386) tiene cierto numero de prefijos de instrucciones, de los cuales ya se ha mencionado REP. Cada uno de estos prefijos es un byte especial que puede preceder a la mayoría de las instrucciones. REP ocasiona que la instrucción que le sigue se repita, como se mencionó con anterioridad; LOCK reserva el bus para la instrucción completa, para permitir la sincronización de multiprocesos. Otros prefijos se usan para forzar a una instrucción a que extraiga su operando de la pila o del segmento extra, en vez de hacerlo del segmento de datos.
En el nivel de máquina convencional, el procesador 80286 es muy parecido al 8088. Para facilitar que los programas del 8088 corrieran en el 80286, Intel equipó a la pastilla con dos modos de operación. En el modo de direccionamiento real (normalmente denominado modo real), el 80286 pretende ser un 8088 y hace (casi) todo lo que un 8088 hubiera efectuado. En el modo protegido de direccionamiento virtual (usualmente denominado modo protegido), ofrece algunas características que no existen en el 8088.
En ambos modos, el 80286 tiene los mismos 14 registros, los cuales tienen la misma longitud y realizan las mismas funciones que en el 8088. Además, todas las instrucciones trabajan en el 80286, en las dos modalidades y tienen la misma semántica con excepción de unos cuantos casos. Las unicas diferencias se encuentran en las características de implantación definida, como qué sucede se coloca el registro SP en la pila. En este caso, el 8088 decrementa primero SP y luego coloca el nuevo valor en la pila, mientras que el 80286 primero salva SP y luego coloca el valor salvado. Esta diferencia se debe a cambios en el microcódigo. En general, casi todos los programas "bien comportados" en el 8088 correrán sin necesidad de modificaciones en el 80286, en ambos modos.
No obstante lo anterior, los dos modos son idénticos. El mayor cambio en este nivel está en el direccionamiento de memoria. En modo real, de 80286 al igual que el 8088 tiene un espacio lineal de direcciones de 1M. En modo protegido, tiene 16 384 segmentos, cada uno hasta de 64K bytes de largo. Durante el diseño del 80286 surgió la cuestión de cómo permitir que los programas usaran esta memoria adicional sin modificar la máquina de manera radical.
Alejandro Montejo Rubio 10
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
El enfoque que requería de tamaño poco apropiado para los registros de segmento se descartó. En lugar de éste, se uso un método más complejo. Los registros de segmento se mantuvieron en 16 bits, pero en vez de representar apuntadores de 20 bits, los registros representan indices (llamados selectores) dentro de tablas del sistema. De modo que cargar el valor de 2 en DS, no significa que el segmento de datos se inicie en la dirección 32, sino que dicho segmento está apuntando por una segunda entrada en determinada tabla. Cada entrada contiene un apuntador de 24 bits y otra información.
En modo protegido, el 80286 tiene también otras diferencias con respecto al 8088. El uso de la palabra "protegido" en el nombre de la modalidad sugiere que proporciona cierta protección. Esta observación es correcta; es posible inicializar las tablas de segmento de tal forma que cuando se utilice el 80286 para un sistema de multiprogramación, cada proceso puede precaverse de accesar segmentos pertenecientes a otro.
Además del conjunto de instrucciones del 8088, el 80286 tiene algunas adicionales que los diseriadores olvidaron en la primera vuelta. La mayoría de estas instrucciones hacen posible realizar operaciones claves con un menor número de instrucciones que en el 8088. Además, se han relajado algunas de las reglas más ortodoxas respecto a qué operandos se permiten en qué instrucciones. Por ejemplo, la instrucción PUSH puede ahora tener una constante como operando. En el 8088, PUSH sólo puede tener operandos de registro y de memoria, pero no constantes. Este cambio, hace más eficiente el pasar constantes como parámetros para las subrutinas. La instrucción PUSHA realiza la función de apilar los registros AX, CX, DX, BX, SP, BP, SI y DI en ese orden, POPA, recupera los registros almacenados. Estas instrucciones se utilizan normalmente por las rutinas de interrupción para almacenar el estado de la máquina antes de proceder a manejar la interrupción.
Las instrucciones ENTER y LEAVE ejecutan las acciones necesarias cuando se da entrada a un procedimiento, o se sale de él. Por medio de instrucciones especiales para llevar a cabo las acciones a un tiempo, la entrada o salida a un procedimiento se puede hacer más rápido.
BOUND realiza verificaciones de la frontera de los arreglos. AI igual que en el resto de las nuevas instrucciones, ésta se incluye con fines de optimización, ya que el mismo trabajo se puede realizar con una secuencia de instrucciones del 8088, aunque en forma más lenta.
Por último, las instrucciones VERR y VERW se refieren a los procesos de segmentación del 80286. Estas permiten que un programa mida el terreno antes de entrar en él. Un programa puede evitar caer en un error de segmentación, por medio de una verificación previa.
INTEL 80386
El 80286 tiene dos limitaciones fundamentales que condujeron a Intel a desarrollar el 80386. Primero, el 80286 es una CPU de 16 bits con registros, operandos e instrucciones de 16 bits. Para muchas aplicaciones se necesita de una CPU de 32 bits. Y segundo, el modelo de memoria consistente de muchos segmentos de 64K resulta una gran molestia. El problema no es el número de segmentos (16 384), que es más que suficiente, sino su tamario tan reducido (64K). El 80386 elimina estos problemas y, al mismo tiempc, agrega algunas características adicionales que lo hacen considerablemente más poderoso que el 80286, además de ser mucho más rápido.
Durante el diseño del 80386, Intel realizó un gran esfuerzo para mantener la compatibilidad con el 088 y el 80286, a fin de permitir que corriera los programas binarios existentes para las versiones anteriores.
Los modos real y protegido están disponibles en el 80386 y operan en forma muy parecida a como lo hacen en el 80286. Existe, sin embargo, un modo nuevo, el modo virtual, que es un punto intermedio entre los dos anteriores. AI igual que el modo real, su intención es la de correr antiguos programas binarios del 8088.
La diferencia está en que en el modo real, un programa puede hacer lo mismo que en el 8088, incluyendo cambios de registros de segmento, operaciones de EIS. etc. Esto le proporciona un poder más que suficiente para colapsar el sistema. En modo virtual, todas las instrucciones normales trabajan igual que en el 8088, pero las instrucciones que en potencia pueden hacer caer al sistema, tales como las de EIS, no se ejecutan. En vez de ello, ocasionan "desvíos" en el sistema operativo, las cuales pueden emular (simular) dichas instrucciones. Como resultado, es posible tener ejecutando al mismo tiempo varios programas del 8088, cada uno protegido de los otros. y el sistema operativo protegido de todos ellos.
Alejandro Montejo Rubio 11
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Muchas de las computadoras basadas en el procesador 80386 utilizan UNlX como su sistema operativo nativo y proporcionan múltiples ventanas a los usuarios. En una o más de estas ventanas, el usuario puede ejecutar viejos programas en MS-DOS. Este truco se logra haciendo que UNlX cambie al modo virtual antes de iniciar un programa en MS-DOS. Todos los intentos del programa de realizar operaciones de E/S, escribir en la RAM de video, etc.; ocasionan "desvíos" al sistema UNIX, el cual realiza el trabajo deseado y regresa el control al programa MS-DOS. Así, diversos programas en MS-DOS pueden correr en forma simultánea bajo un ambiente UNlX y accesar archivos UNIX.
Una de las principales metas del 80386 fue la de deshacerse del límite de 64K por segmento, conservando la compatibilidad con los programas del 80286 que manejan segmentos de dicha longitud. Este logro, en apariencia imposible, se alcanzó de una manera muy habilidosa. Tanto el 80286 como el 80386 utilizan selectores en sus registros de segmento. En esencia, cada selector es sólo un índice dentro de las dos tablas de 8K de descriptores de segmentos. Cada descriptor contiene la dirección, su tamaiio, código de protección, así como otra información.
En el 80386, se tomó un bit que no se utilizaba en cada descriptor, para indicar si se trataba de un segmento de 16 o de 32 bits. En los segmentos de 16 bits, la dirección máxima es de 64K y todas las operaciones que manipulaban palabras lo hacen en 16 bits. En los segmentos de 32 bits, la dirección máxima es 4G (232 bytes, cerca de 4 mil millones), y todas las operaciones que manipulan palabras lo hacen en 32 bits. También es posible ignorar estos valores instrucción por instrucción, insertando un prefijo antes de ésta. Se permite que un programa utilice una mezcla de segmentos de 16 y 32 bits.
Como resultado de esta arquitectura, un programa en el 80386 puede direccionar un máximo de 16 384 segmentos de hasta 4G cada uno, para un espacio total de direcciones de 246 bytes. Este espacio es mayor o igual al de casi todas las macro y super computadoras. Los tiempos en los que era posible diferenciar una microcomputadora de una supercomputadora con sólo mirar cuál tenia un mayor espacio de direcciones, pertenecen al pasado.
Una de las consecuencias obvias de tener un espacio de direcciones de 246 bytes, es que los apuntadores deben tener por lo menos 46 bits de largo; una dimensión grande e inconveniente. Para la mayoría de las aplicaciones esto es demasiado. En cambio, muchos programas para el 80386 usan simplemente un solo segmento de 232 bytes. A este modelo se le conoce con el nombre de "Modo Motorola", ya que los espacios de direcciones de sus microprocesadores constan de un solo segmento de 232 bytes.
Un programa para el 80386, cuando utiliza varios segmentos, está restringido a un solo segmento para código, datos y pila en cada momento, al igual que sucede en el 8088. También como en el 8088, existe un registro de segmento extra, para hacer posible el acceso temporal a otro segmento. En el 80386 se incluyen dos registros de segmento más, FS y GS para reducir el número de veces que se debe cargar un registro de segmento. De esta forma, se pueden accesar hasta seis segmentos sin tener que cambiar ningún registro de segmento.
Además de proporcionar un mayor espacio de direcciones, la otra gran ventaja del 80386 es la de poder realizar operaciones aritméticas en 8, 16 y 32 bits; los registros se han ampliado a 32 bits y conservan los nombres de los registros de 16 bits, agregándoles una "E: (de extendido) al principio. En un segmento de 32 bits, una instrucción que mueve una palabra a AX/EAX, la moverá a EAX, a menos que un prefijo específico indique lo contrario.
Aunque no era necesario, Intel decidió cambiar en el 80386 la forma de direccionar la memoria. En los segmentos de 16 bits, todo funciona igual que en el 8088 o el 80286. Sin embargo, en los segmentos de 32 bits se presenta todo un nuevo conjunto de posibilidades (modos) de direccionamiento. Estos incluyen formas eficientes de accesar elementos de un arreglo y otras características. Las instrucciones requieren de campos de modo de direccionamiento para especificar en dónde se encuentran sus operandos; en los registros, en memoria, en la pila o en alguna otra parte.
La incorporación de los registros de segmento FS y GS, requirió de dos nuevos prefijos para especificar la siguiente instrucción que utilizarán, en lugar del segmento que normalmente se utiliza (DS). Además se agregaron también otros dos prefijos, para permitir que una instrucción individual en un segmento de 16 bits usara una dirección o un operando de 32 bits y viceversa.
El último punto es la presencia de unas cuantas instrucciones nuevas para verificación de bits, conversión de datos, movimientos y otras cosas. En términos generales, estas instrucciones son mucho más exóticas que las que se agregaron al 80286. Las instrucciones BFS y BSR examinan sus operandos buscando bits con valor de O y fijando los valores de las BANDERAS de acuerdo con ello BTx es un grupo de cuatro instrucciones que pueden verificar, fijar, borrar y complementar bits individuales en una palabra, sin alterar a los otros bits. Haciendo una extensión de signo, CWDE y CDQ convierten palabras sencillas en dobles y dobles en cuádruples respectivamente. Las dos instrucciones
Alejandro Montejo Rubio 12
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
MOV xx mueve items de datos pequeños a otras mayores, con o sin extensión de signo. Las instrucción SETcc es en realidad un conjunto de 30 instrucciones, cada una de las cuales almacena un byte en el registro de destino. Este bit contiene un O oun 1, dependiendo de I estado de los bits en diversos códigos de condición. Esta instrucción es a veces de utilidad para los disefiadores de compiladores, al momento de evaluar las expresiones booleanas.
Por último, las instrucciones SHxD son desplazamientos de 32 bits y las instrucciones Lxx se utilizan para cargar registros de segmento.
Alejandro Montejo Rubio 13
Simulador d e l Sistema Minim Intel 8088 Proyedo Teminal
Arquitectura del microprocesador Intel 8088
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
(ARQUITECTURA BASCA DEL MICROPROCESADOR 8088)
Arquitectura Interna Básica
Los microprocesadores modernos , al igual que los anteriores, buscan instrucciones en la memoria con una operación de lectura, mientras el microprocesador ejecuta la instrucción, el sistema de memoria está ocioso. La familia de microprocesadores Intel, empezando con el 8086 y el 8088, aprovecha este tiempo de memoria ociosa buscando con anticipación la siguiente instrucción mientras el microprocesador ejecuta la actual. En la siguiente figura se muestra el proceso básico del trabajo del microprocesador.
Microprocesador Recuperar I Decodificar I Ejecutar I Recuperar I Decodificar I Ejecutar
Canal
Microprocesador
Ocupado 1 Ocioso I Ocupado I Ocupado 1 Ocioso I Ocupado I Recuperar I Decodifica 1 Ejecuta I Recuperar I Decodifica
Arquitectura del sistema
Las comunicaciones entre el sistema y el microprocesador ocurren por medio de tres canales que son los siguientes:
Canal de dirección
El canal de direcciones suministra una dirección en la memoria para la memoria del sistema o el espacio de entraddsalida (E/S) para los dispositivos de E/s del sistema.
Canal de datos
El canal transfiere &tos entre el microprocesador y la memoria y los dispositivos de E/S conectados en el sistema.
Canal de control El canal de control suministra señales de control que hacen que en la memoria o el espacio de E/S efectúen una operación de lectura o de escritura .
Canal de dirección (20 bits) S A, f) A,, Sistema 8088 Do D, t Canal de datos ( 8 bits) 3
Canal de control 3 RD, WR IO/M
A memoria y EIS
1 I I
1 Alejandro Montejo Rubio 15
I
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
El ancho del canal de datos determina cuantos bytes se transfieren a la vez entre el microprocesador y la memoria, y el ancho de canal de direcciones determina cuanta memoria puede dirrecionar el microprocesador.
LA MEMORIA Y EL MICROPROCESADOR
El espacio de direccionamiento de un sistema basado en un microprocesador, se denomina memoria lógica o memoria fisica. La memoria lógica es el sistema de memoria tal y como lo veo un programador, mientras que la memoria fisica es la estructura real en el hardware de la memoria.
Memoria lógica
El espacio de memoria lógica es el mismo en todos los microprocesadores Intel, la memoria lógica se enumera por bytes, en la siguiente figura se observa el mapa de memoria lógica del microprocesador Intel 8088.
FFFFF
FFFFE
FFFFD
00002 00001 00000
Mapa de memoria ldgica del microprocesador 8088
La memoria lógica del 8088 empieza en la localidad OOOOOH y llega hasta la FFFFFH.
Como sabemos este intervalo de direcciones especifica 1 Mega de bites de memoria disponible en este sistema
Cuando este microprocesador dirreciona una palabra de 16 bits en la memoria, se accesan dos bytes consecutivos en la memoria
* MODELO DE PROGRAMACI~N
La programación requiere un entendimiento claro de la estructura de los registros del microprocesador, por lo cual en la siguiente figura se observa el arreglo de registros internos del microprocesador.
Alejandro Montejo Rubio 16
Simulador del Sistema Minimo Inte l 8088 Proyecto Terminal
bits AH AX
bits
BL BH BX AL
I cx I CH I CL I I
DX DL DH SP BP DI SI
IP
DS ES SS
Acumulador Índice base Contador
Datos Apuntador a pila Apuntador a base
Índice destino Índice fuente
Apuntador de instrucciones
Banderas Segmento de código Segmento de datos
Segmento extra
Registros de microprocesador 8088
El arreglo de registros internos del microprocesador esta dividido en tres grupos: registros de uso general, registros de apuntadores, registros de índice y registros de segmento. Además de esos grupos existe un registro de banderas que señala las condiciones respecto al funcionamiento de la unidad aritmética y lógica (ALU).
Registro de propósito general. Los registros de uso general se pueden direccionar en el 8088 como registros de 16 bytes (AX,BX,CX,DX) o
como registros de 8 bits (AH,AL,BH,BL,CH,CL,DH,DL). Los registro de uso general se utilizan para tareas especificas, por esta razón a cada uno de estos se les da un nombre (Acumulador, Base, Contador y Datos).
AX (Acumu1ador):Conserva el resultado temporal después de una operación aritmética o lógica. A este registro también se le direcciona como registros de 8 bits (AH,AL).
BX (Base): Conserva la dirección base (desplazamiento) de los datos que hay en la memoria o la dirección base de una tabla de datos referenciados por la instrucción ara convertir (XLAT). A este registro también se le direcciona como registros de 8 bits (BH,BL).
CX(Contador): Contiene el conteo de ciertas instrucciones para corrimientos (CL) y rotaciones del numero de bytes (CX) para las operaciones repetidas de cadena y un contador. (CX) para la instrucción LOOP. A este registro también se le direcciona como registros de 8 bits (CH,CL).
DX (Datos): Es un registro de uso general que también contiene la parte más significativa de un producto después de una multiplicación de 16 bits; la parte más significativa del dividendo antes de la división y el número de puerto de E/S para una instrucción variable de E/S. A este registro también se le direcciona como registros de 8 bits (DH,DL).
Registros apuntadores e indices
Estos registros son también de uso general , pero se utilizan más a menudo para apuntar a la localidad de la memoria que contiene los datos del operando de muchas instrucciones.
Alejandro Montejo Rubio 17
Simulador del Sistema Mínimo Intel 8081 Proyecto Termina
SP ( Apuntador a pila ): Este registro se emplea para direccionar datos a la pila de memoria de (LIFO) .
BP (Apuntador a base): Es un apuntador de uso general que se utiliza a menudo para dirrecionar a una matriz de datos en una pila de memoria.
SI (Índice fuente) : Se emplea para direccionar datos fuente en forma indirecta para utilizarlos con las instrucciones de cadenas o arreglos.
DI (Índice de datos): Se emplea para dirrecionar datos destino en forma indirecta para utilizarlos con las instrucciones de cadenas o arreglos.
IP ( Apuntador de instrucciones ): Se utidza siempre para dirrecionar a la siguiente instrucción que va a ejecutar el microprocesador. Para formar la localidad real de la siguiente instrucción se suma el contenido de IP con CS(por) 10H. Cabe señalar que se puede realizar direccionamiento indirecto de datos por medio de estos registros excepto con el apuntador a instrucción ( IP ).
Registros de segmento
Los registros de segmento, generan direcciones en la memoria junto con otros registros.
CS ( código ): El segmento de código es una porción de la memoria que tiene los programas y procedimientos utilizados por los programas. El registro de segmento de código define la dirección inicial de la sección de memoria que tiene el código. En modo real , define el inicio de una sección de 64 K bytes. segmento de código esta limitado en el 8088 a una longitud de 64 Kbytes.
DS ( datos ): El segmento de datos es una sección de la memoria que contiene la mayor parte de los datos utilizados por un programa. Se les caceas en el segmento de datos con un desplazamiento o con el contenido de otros registros que tiene la dirección del desplazamiento.
ES(segmento extra): El segmento extra de datos lo utilizan algunas instrucciones para cadenas.
SS (segmento de pila): El segmento de pila define la superficie de la memoria utilizada para la pila. La ubicación del punto inicial de entrada a la pila, se determina por el registro apuntador de la pila. El registro BP también dirreciona los datos que hay dentro del segmento de pila.
DIRECCIONAMIENTO DEL 8088
El microprocesador 8088, funciona en modo real. El funcionamiento en modo real permite que el microprocesador sólo direcciones al primer lMbyte de espacio en la memoria.
Segmentos y desplazamientos
Una dirección de segmento mas una dirección de desplazamiento, generan una dirección en la memoria en el modo real. Cabe señalar que todas las direcciones en la memoria en modo real se componen de una dirección de segmento mas un desplazamiento. El segmento ubicado en uno de los registros de segmento del microprocesador, define la dirección inicial de cualquier segmento de memoria de 64K bytes. La dirección de desplazamiento seleccione una localidad dentro del segmento de memoria de 64k bytes.
En la siguiente figura se ilustra como el esquema de dirrecionamiento de segmento más desplazamiento selecciona una localidad en la memoria.
Alejandro Montejo Rubio 18
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Memoria en modo real
En la figura anterior se muestra un segmento de memoria de empieza en la localidad 1000H y termina en la IFFFFH, de 64K bytes de longitud. También se muestra la forma en que un desplazamiento de FOOOH selecciona la localidad 1 FOOOH en el sistema de la memoria.
Registros de segmento y desplazamiento implícitos El registro de segmento de código define el principio de un segmento de código y el apuntador de instrucciones
define el desplazamiento, el cual apunta a la siguiente instrucción dentro de un segmento de código a ejecutar por el microprocesador.
por ejemplo: CS:IP
Donde CS: direcciona el principio del segmento de código dentro del mapa de memoria.
IP: apunta a la siguiente instrucción dentro del segmento de código, y es el desplazamiento.
El registro de segmento de pila hace referencia a los datos de la pila por medio del segmento de pila y por la localidad de la memoria a la cual dirreciona el apuntador de la pila (SP) o el apuntador de base.
En la tabla se ilustran otros direccionamientos implícitos para la memoria en el microprocesador 8088.
Segmento Desplazamiento
Alejandro Montejo Rubio
cs IP SS SP 6 BP DS BX, DI, SI o un numero de 16 bits ES DI para instrucciones de cadena
19
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
El microprocesador 8088 permite tener cuatro segmentos de memoria; Se debe de tener en cuenta que los segmentos de memoria pueden tocarse o incluso traslaparse si no se requieren 64K bytes de memoria para un segmento, en la siguiente-figura se muestran los segmentos del 8088.
FFFFF
3FFFF
ESSegmento extra
30000 2FFFF
SS:Segmento de pila
20000 1 FFFF
CSSegmento de datos
- I O000 OFFFF
CSSegmento de eddigo
o0000
Sistema de memoria con los cuatro segmentos
En el siguiente gráfico se muestra un traslape transversal imaginario de segmentos, dentro de 1 Mega de memoria
Alejandro Montejo Rubio
Segmento de pila
Segmento de Datos
- It! Segmento de Código
20
Simulador del Sistema Minimo Inte l 8088 Proyecto Terminal
Coniunto de Instrucciones
Existen seis categorías de instrucciones para el 8088 las cuales son:
Transferencia de datos.
El conjunto de instrucciones para el 8088 incluye instrucciones para la transferencia de datos que transfieren bytes, y palabras, de datos entre la memoria y los registros del microprocesador.
Aritméticas.
El 8088 puede sumar, restar y multiplicar y dividir datos como bytes y palabras.
Transferencia de Programa.
Las instrucciones para transferencia de programa incluyen brinco, llamadas (CALL) y para retorno
Manipulación de Bits.
Las instrucciones para la manipulación de bits binarios se utilizan para controlar los datos hasta el nivel de bits. Estas instrucciones incluyen operaciones lógicas, corrimientos y rotaciones.
Instrucciones de cadenas.
Las instrucciones para cadenas o arreglos se emplean para manipular cadenas de datos en la memoria. Cada cadena consta, ya sea, de bytes o de palabras y tiene hasta 64K bytes de longitud. En las instrucciones para la cadena se emplean los registros SI y DI para dirrecionar los datos y el registro CX par conmutar el número de bytes o de palabras.
Control del procesador
Las instrucciones para el control del procesador habilitan y deshabilitan las interrupciones, modifican los bits de bandera y sincronizan los eventos externos.
Alejandro Montejo Rubio 21
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
División de datos: ARCHIVO: DIVIDE1 .MEM
ARCHIVO: DIVIDE2.MEM
Resta de datos:
ARCHIVO: RESTA1 .MEM
Alejandro Montejo Rubio 42
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Principales instrucciones para el microprocesador 8088
Transferencia de datos
IN Mete datos al acumulador desde un dispositivo de EIS
LEA Carga la dirección efectiva MOV
Salva las palabras en la pila PUSH
Carga byte, palabra POP Recupera una palabra de la pila
Aritméticas ADD
CMP
Suma datos entre registros o la memoria y otro
Decrementa DEC Compara datos
registro
DIV División con signo IDIV División sin signo
IMUL
Resta datos entre los registros y la memoria u otro SUB Multiplica con signo MUL
Incrementa INC Multiplicación con signo
registro Manipulación de Bits
AND Invertir (comdemento a uno) NOT
Y ( AND) lógica
I OR I O lógica Instrucciones de
Cadenas CMPS ComDaración entre memoria v memoria LODS
Mover de memoria a memoria MOVS Cargar el acumulador
SCAS Almacenar en el acumulador STOS
Comparación entre la memoria y el acumulador
Transferencia de programa
CALL Llama a un mocedimiento
I JMP CERCANO Salta a otra parte del programa dentro del mismo segmento
JMP LEJANO I Salta a otra parte del programa en otro segmento LOOP I ReDite ciclo CX veces
I RET I Retorna de un procedimiento
Alejandro Montejo Rubio 22
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Funcionamiento del Simulador.
1 Alejandro Montejo Rubio 23 I
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Funcionamiento del Simulador (Manual de Usuario)
OBJETIVO : 0 Simular el funcionamiento de manera "virtual" de un sistema mínimo ( Intel 8088 )
0 Realizar una herramienta útil y didáctica para el aprendizaje en la utilización y sin requerirlo físicamente.
manipulación de las instrucciones básicas del micro procesador 8088, así como el aprendizaje del comportamiento y manejo de la memoria por parte del procesador.
JUSTlFlCAClON
Debido al avance tecnológico de las ultimas dos décadas, la ciencia de la electrónica y el desarrollo acelerado de los ordenadores, han tomado un papel muy importante en desarrollo productivo del mundo, debido a esto la enseñanza en nuestro país implemento los planes y programas para desarrollar el estudio y aprendizaje de dicha ciencia; Por lo cual dicho desarrollo ha llevado a la docencia a tomar acciones de enseñanza, las cuales se han visto un poco limitadas ya que no existen programas computacionales que faciliten la practica directamente en una computadora de los temas planeados de acuerdo a los planes de estudios. Es por ello que en la actualidad el desarrollo de herramientas y tutoriales gráficos, es primordial para lograr una enseñanza optima, que permita al alumno practicar en un alto porcentaje la teoría impartida por el docente a un bajo *costo. Por lo que la propuesta de nuestro proyecto esta encaminada a fortalecer los conocimientos teóricos que el docente imparte, con una herramienta gráfica, que le permita al usuario o alumno practicar y auto evaluarse así como obtener ayuda en línea. Dicha propuesta esta basada en la realización de un simulador gráfico del sistema mínimo (cuyo microprocesador es el 8088) el cual nos permita realizar labores de programación en el sistema hexadecimal, utilizando las principales instrucciones que nos otorga el microprocesador 8088.
Se menciona bajo costo porque en la actualidad en la mayoria de las instituciones (si no es que todas) cuentan con un laboratorio de computadoras. Lo Único que falta es el software. Software de nivel y calidad, y además hecho en México y por mexicanos calificados y altamente competitivos.
La gran mayoria de las empresas dedicadas al desarrollo de software en México se preocupan más por software de tipo administrativo, que por el software educativo. Existe si, pero de mala calidad, no visual y en ambiente DOS.
PROPOSITO :
El presente proyecto presentado tiene la finalidad de proporcionar una herramienta y ejemplos necesarios para una adecuada explotación del sistema mínimo (Intel 8088), asi como de poder proporcionar una herramienta de aprendizaje y experimentación para los alumnos con materias enfocadas a la lngenieria en Electrónica o áreas afines.
DESCRIPCION DEL SISTEMA:
Composición física de un Sistema Mínimo.
El simulador está formado por todas las partes físicas (circuitos integrados) del sistema mínimo, como son la memoria, el microprocesador> bus de datos, un teclado, un display, resistencias, capacitores, diodos, leds, etc. En donde el display permitirá observar las operaciones que se simulan, y nos mostrara los resultados.
Además de esto el usuario tendrá ayuda en línea que le permiten conocer las funciones del sistema mínimo así como ejemplos incluidos.
a) Recursos Mínimos del Sistema El equipo mínimo necesario para ejecutar este programa es el siguiente:
Alejandro Montejo Rubio 24
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Hardware
1 .- Procesador 486 (como mínimo) en adelante 2.- 8Mb en Ram (optimo) 3 .- Mouse (indispensable)
So f tware
1 .- Windows 3.xx (en adelante) 2.- Discos de instalación (incluido). 3.- A r c h i v o de ejemplos incluido).
b) Instalación
A cont inuación, se expl icará paso a paso, como instalar, accesar y uti l izar el programa, as í como una descr ipc ión de su func ionamiento y su ayuda escr i ta.
Comenzando desde las especi f icaciones ya señaladas con anter ior idad, (Requisi to ind ispensab le : con tar con Windows 3 . * ) , primero se deberá ingresar en Windows:
Abocando solo dos casos de instalación, para Windows 3.1 1 y para Windows 95.
* WIN 3.1 1
Uti l izando el ratón ( recomendable) se tendrá que escoger (dando doble c l ick al bo tón izquierdo del ratón)
e l icono o archivo de “Principal”, posteriormente se deberá seleccionar e l icono l lamado “Administrador de archivos”, aquí se desplegara una ventana, en donde se tiene que especi f icar la un idad en la cual se encuentra e l sistema ( U n i d a d A:\ o B:\ según sea e l caso),una vez que se muestren los archivos existentes de la unidad de disco asignada, Seleccionar “Archivo”, y después “Ejecutar” .
*Nota* (cabe hacer mención que como casi ya es de dominio general, Windows brinda hasta tres opciones diferentes de realizar una selección u opción (Por medio de las barras de menús, las llamadas rápidas que se realizan con la letra subrayada y simultáneamente la tecla ALT y los iconos). Para nuestro caso nos abocaremos a la utilización de iconos en la mayoría de los casos. Estas opciones también se aplican para la nueva versión de Windows 95 e inclusive en esta versión existen mas opciones de Ejecución.
Otra opc ión es que en el momento de seleccionar e l archivo “Setup.exe” , se presione dos veces el botón izquierdo del ratón. Esto, automáticamente ejecutará e l programa de instalación seleccionado. Posteriormente aparecerá una ventana que pedirá la confirmación de la e jecución del s istema ( t iene que marcar “Aceptar” 1. En breve aparecerá una ventana indicando la ejecución de SETUP:EXE. La pantal la de instalación del Simulador del sistema mín imo 8088 solici tará al usuario especif ique si el archivo y/o la ruta son correctos ( solo pres ione Cont inuar 1.
* Win95.
Una vez accesado Windows ir al botón de in ic io s i tuado en la barra de herramientas si tuado (por lo general) en la parte infer ior izquierda de la pantal la
Alejandro Montejo Rubio 25
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Figura 1 A continuación se abrirá una ventana mostrando los elementos del escritorio, seleccione "Ejecutar"
Figura 2 Figura 3
En las figuras anteriores se muestra paso a paso el procedimiento a realizar para la ejecución del programa, desde el menu de Ejecución (figura I), así como la ventana de opción de la Figura 2, en la cual se le introducirá la ruta de acceso y el nombre del archivo a ejecutar, en caso de ignorar dichos dato, (como se supone es el caso, ya que es la primera vez que se va a correr dicho programa) se recomienda seleccione la opción de Examinar:
Figura 4
Ahora seleccione el Archivo de programa llamado "Setup.exe" y oprima Abrir, esto lo regresará a la ventana de Ejecutar, seleccione "Aceptar 'I.
En estos instantes se comenzará a cargar el proyecto en su Disco Duro con la dirección preestablecida C:\ (con la opción de cambiar dicha ruta de instalación, si as¡ se desea).
Se ira mostrando el porcentaje de instalación cargado del disco 1 y posteriormente se pedirá que se inserte el disco siguiente en orden numérico, una vez concluida la instalación oprima "Aceptar" nuevamente en la pantalla que aparecerá.
En el Escritorio o Pantalla principal de Windows se generará el icono correspondiente al simulador, el cual llevara el nombre de "SIMULADOR", selecciónelo y haga doble click en el ratón para ejecutar el sistema.
Por medio del presente Manual se pretende dar al Usuario un bosquejo de lo que el sistema puede realizar.
Alejandro Montejo Rubio 26
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
En el encontrara la descripción de cada una de las ventanas con las que se encontrara a lo largo del sistema, así como, una breve explicación de lo que realiza cada uno de los botones y funciones con los que cuentan dichas ventanas.
Presentación
AI inicio del sistema se desplegara una ventana de presentación en la que encontrara el nombre del sistema, esta ventana se desaparecerá en un instante para dar paso a la portada.
Portada
En ella encontrara tres botones rotulados con las siguientes etiquetas:
Alumno : AI hacer un clic sobre este botón Ud. encontrara el nombre del alumno responsable de la realización del presente proyecto.
Asesor : AI presionar este botón se desplegara el nombre del profesor encargado de la sinodalia y responsable de realizar las correcciones pertinentes al sistema
Ejecutar : Cuando Ud. presiona esté botón se iniciara la ejecución del simulador del sistema minimo 8088
Terminar : Con este botón Ud. regresara nuevamente al ambiente de Windows sin entrar al sistema.
Alejandro Montejo Rubio 27
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Una vez que oprimió el botón de ejecutar la ventana que a continuación se desplegara la podemos desglosar en cuatro bloques:
0 Editor 0 Componentes Gráficos 0 Menús 0 Microavuda
Alejandro Montejo Rubio 28
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Editor
Este editor cuenta con los Rotulados:
Instrucciones : Esta etiqueta cuenta con dos botones rotulados con dos pequeñas flechas
Flecha hacia abajo izquierda: Muestra las instrucciones con las cuales cuenta el sistema.
Flecha hacia arriba izquierda: Muestra las instrucciones con las cuales cuenta el sistema
Enter : AI oprimir este botón se acepta la instrucción que se haya elegido simulando al "Enter" de su máquina
Registros : Esta etiquetado con dos botones rotulados con dos pequeñas flechas.
Flecha hacia abajo derecha: Muestra los registros sobre los cuales se puede realizar una operación en ensamblador
Flecha hacia arriba derecha: Muestra los registros sobre los cuales se puede realizar una operación en ensamblador
Teclado : AI oprimir cualquiera de estos botones, el resultado que se obtendra es el que trae rotulado
Dirección de Editar: Le proporciona la dirección de edición actual
Botón Ejecutar: Muestra la pantalla de microprocesador interno, en la cual se muestra las operaciones internas de ejecución, el cual también se puede activar por la combinación de teclas ALT + E
Botón Reset: Limpia la memoria y pone dirección editar con el valor de cero, el cual tambien se puede activar por la combinación de teclas ALT + R
Alejandro Montejo Rubio 29
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Componentes Gráficos
Al hacer un clic sobre cualquier componente gráfico se abre una ventana la cual muestra un zoom del componente y muestra información técnica del mismo relevante, as¡ como su uso más común en la creación de circuitos electrónicos.
Menús
La ventana cuenta con una barra de menús formada por tres títulos que son:
Archivo : Se puede activar vía barra de menú o por la combinación de teclas ALT +
Abrir (Ctrl+A): El cual abre un archivo editado y lo carga en memoria. Guardar (CTRL + G): El cual guarda el contenido de un archivo editado en
A, este menú cuenta con cuatro subménus que son:
memoria.
Alejandro Montejo Rubio 30
Simulador del Sistema Minimo Inte l 8088 Proyecto Terminal
m Índice(CTRL + I): El cual muestra la ventana de índice, que es similar a la ventana
m Salir (CTRL + S): Termina la ejecución del sistema o Comandos : Se puede activar por medio de la combinación de teclas ALT + C, este
menú cuenta con tres subménus que son: m Cambiar Dirección de Edición(CTRL + C): Nos muestra una caja de mensaje donde
podemos cambiar el desplazamiento, dentro del segmento de código para editar programas
m Ejecutar (CTRL + E): Muestra la pantalla de microprocesador interno, en la cual se muestra las operaciones internas de ejecución
m Desensamblar (CTRL + D): Muestra una ventana con el código en lenguaje ensamblador
m Historial (CTRL + H): Muestra una breve reseña histórica de la familia Intel. Con dos modos de Dresentación de colores para su mejor visualización.
de Portada
MicroAvuda.
Esta se muestra en la parte baja de la ventana, al colocarse sobre cualquier componente indicara que función realiza.
La etiqueta "Archivo *.mem" nos indica el archivo cargado actualmente en memoria
Alejandro Montejo Rubio 31
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
0 La caja de texto que se encuentra del lado derecho de la etiqueta anterior nos muestra el porcentaje de archivo que se ha cargado en memoria.
Como Ud. podrá apreciar en esta ventana es donde se realiza la programación en el lenguaje ensamblador, para lo cual se le darán una serie de pasos para que el desempeño del sistema sea el óptimo. Están desactivadas las teclas de registro y de valor, lo primero que tendrá que hacer es introducir el valor de alguna de las instrucciones con las que cuenta el sistema por medio de las flechas izquierdas de edición, oprimiendo el botón de "Enter" para que dichas instrucciones sean aceptadas. En el caso de que la instrucción emplee registro o valor estos deberán ser introducidos ya sea por flechas derechas de edición o por medio del teclado, deberá de oprimir la tecla de "Enter" para que estos valores sean aceptados
Repetir los primeros pasos mientras desea seguir editando, en caso contrario su programa editado se guardara tecleando la combinación de CTRL + G o en su defecto abriendo el menú de Archivo y elegir la opción de guardar. La Dirección de Editar se ira incrementando de acuerdo al valor en bytes entre instrucción e instrucción. Para iniciar el programa deberá de oprimir el botón de Ejecutar, el cual le abrirá la ventana del simulador. Si desea cargar un programa que ya editó, basta con oprimir la combinación de teclas CTRL + A, o por medio del menú Archivo eligiendo la opción de Abrir. Para Resetear (Limpiar) Este botón es utilizado en el caso de que Ud. desea limpiar su memoria de cualquier programa que este editando, y que no haya sido guardado previamente. Algunos ejemplos de programas en ensamblador se muestran al final de esté capitulo.
Ventana de Simulador
En esta ventana se observará los registros internos del microprocesador, el bus de direcciones, el bus de datos, mapa gráfico de la memoria, así como, botones de control.
Alejandro Montejo Rubio 32
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Registros Internos: Todos los registros internos al tiempo de cargar esta ventana se lnicializa a cero, excepto los registros de segmento que se cargan con su respectivo valor, de segmento estos registros pueden ser modificados antes de la ejecución, excepto los registros de segmento.
Registro de propósito general.
Los registros de uso general se pueden direccionar en el 8088 como registros de 1 6 bits (AX,BX,CX,DX) O
como registros de 8 bits (AH,AL,BH,BL,CH,CL,DH,DL). Los registro de uso general se utilizan para tareas especificas, por esta razón a cada uno de estos se les da un nombre (Acumulador, Base, Contador y Datos).
AX (Acumu1ador):Conserva el resultado temporal después de una operación aritmética o lógica. A este registro también se le direcciona como registros de 8 bits (AH,AL).
BX (Base): Conserva la dirección base (desplazamiento) de los datos que hay en la memoria o la dirección base de una tabla de datos referenciados por la instrucción ara convertir (XLAT). A este registro también se le direcciona como registros de 8 bits (BH,BL).
CX(Contador): Contiene el conteo de ciertas instrucciones para corrimientos (CL) y rotaciones del número de bytes (CX) para las operaciones repetidas de cadena y un contador (CX) para la instrucción LOOP. A este registro también se le direcciona como registros de 8 bits (CH,CL).
DX (Datos): Es un registro de uso general que también contiene la parte más significativa de un producto después de una multiplicación de 16 bits; la parte más significativa del dividendo antes de la división y el número de puerto de E/S para una instrucción variable de E/S. A este registro también se le direcciona como registros de 8 bits (DH,DL).
Registros apuntadores e indices
Estos registros son también de uso general , pero se utilizan mds a menudo para apuntar a la localidad de la memoria que contiene los datos del operando de muchas instrucciones.
SP ( Apuntador a pila 1: Este registro se emplea para direccionar datos a la pila de memoria de (LIFO) .
BP (Apuntador a base): Es un apuntador de uso general que se utiliza a menudo para direccionar a una matriz de datos en una pila de memoria.
SI (indice fuente): Se emplea para direccionar datos fuente en forma indirecta para utilizarlos con las instrucciones de cadenas o arreglos.
DI (indice de datos): Se emplea para direccionar datos destino en forma indirecta para utilizarlos con las instrucciones de cadenas o arreglos.
IP ( Apuntador de instrucciones 1: Se utiliza siempre para direccionar a la siguiente instrucción que va a ejecutar el microprocesador. Para formar la localidad real de la siguiente instrucción se suma el contenido de IP con CS (por) 10H. Cabe señalar que se puede realizar direccionamiento indirecto de datos por medio de estos registros excepto con el apuntador a instrucción ( IP 1.
Registros de segmento
Los registros de segmento, generan direcciones en la memoria junto con otros registros.
CS ( código 1: El segmento de código es una porción de la memoria que tiene los programas y procedimientos utilizados por los programas. El registro de segmento de código define la dirección inicial de la sección de memoria que tiene el c6digo. En modo real , define el inicio de una sección de 64 K bytes. segmento de código esta limitado en el 8088 a una longitud de 6 4 Kbytes. Definido en el segmento 0000.
Alejandro Montejo Rubio 33
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
DS ( datos ): El segmento de datos es una sección de la memoria que contiene la mayor parte de los datos utilizados por un programa. Se les accesa en el segmento de datos con un desplazamiento o con el contenido de otros registros que tiene la dirección del desplazamiento. Definido en el segmento 0400
ES(segrnent0 extra): El segmento extra de datos lo utilizan algunas instrucciones para cadenas. Definido en el segmento OCOO
SS (segmento de pila): El segmento de pila define la superficie de la memoria utilizada para la pila. La ubicación del punto inicial de entrada a la pila, se determina por el registro apuntador de la pila. El registro BP tambien direcciona los datos que hay dentro del segmento de pila. Definido en el segmento 0800.
Todos estos registros de segmento pueden direccionar hasta 1024 bytes.
Modos de Direccionamiento
El 8088 dispone de muchos modos de direccionamiento que proporcionan diferentes modos de acceder operando, los mas comunes son:
a) Por Registro. El operando es un registro b) Inmediato. El operando forma parte de la instrucción; normalmente se sitúa a continuación del código de operación. c) Directo. La dirección del operando forma parte de la instrucción d) Indirecto por Registro. La dirección del operando se encuentra en los registros base o índice. 0 Bus de Direcciones : El canal de direcciones suministra una dirección en la memoria
para la memoria del sistema o el espacio de entraddsalida (E&) para los dispositivos de E/s del sistema.
dispositivos de E/S conectados en el sistema.
dependiendo del valor que las cajas de segmento y desplazamiento contengan, Ud. puede cambiar el valor de segmento desde la caja o bien oprimiendo en la etiqueta de segmento de registro. Cabe señalar que podemos cambiar valores de memoria o bien editar programas desde el mapa de la memoria, introduciendo un número en la caja de valor y después de esto oprimir "Entrar Dato-Mod".
0 Bus de datos : El canal transfiere éstos entre el microprocesador y la memoria y los
0 Mapa Gráfico de la memoria : Muestra los valores internos de la memoria,
0 Botones de Control : Estos se encuentran etiquetados con los siguientes Rótulos : Reset : Inicializa los registros internos a cero, exceptuando los registros de
Anima : Este botón ejecuta el programa continuamente a una velocidad determinada
Siguiente : Este botón ejecuta cada instrucción paso a paso. Desensambla : Este botón nos muestra una ventana con el código desensamblado.
0 Fin : Este botón termina la ejecución del simulador y regresa al editor.
-
segmentos
por el valor de la caja de intervalo, activada por la caja Atiempo.
En esta ventana también contiene una barra de menús que tiene los siguientes subménus :
0 Menú Abrir : Este menú contiene los siguientes subménus : 0 Abrir : Este subménu se encarga de abrir un archivo que se haya editado
previamente
Alejandro Montejo Rubio 34
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Guardar : Este subménu se encarga de guardar el archivo que se este editando
Salir : Este subménu se encarga de regresarlo a la Dantalla de Edición actualmente
Cada vez que Ud. ejecute el comando de abrir un nuevo archivo deberá de actualizar la Dirección a Editar
Alejandro Montejo Rubio 35
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
INSTRUCCIONES SOPORTADAS POR EL SIMULADOR
Código: Este es el valor correspondiente de cada instrucción. Instrucción: Es la descripción textual de cada instrucción. Función: Es la actuación de cada instrucción. Tamaño de instrucción: Es el tamaño real de cada instrucción en memoria BusDatos: Señala si se hace uso del Busdatos. BusDirecci6n:Señala si se hace uso del Bus de Direcciones.
Alejandro Montejo Rubio 36
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Registros Internos del Microprocesador
Ejemplos de aplicación:
Con estos ejemplos se podrá dar cuenta del resultado obtenido al realizarse las operaciones asignadas
Carga de datos:
ARCHIVO: CARGA1 .MEM
Al realizar una instrucción sencilla de asignar un valor determinado a memoria el resultado de dicha micro operación arrojara los siguientes pasos
Direccionamiento
Alejandro Montejo Rubio 37
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
ARCHIVO:CARGA2,MEM Se le asignara un valor doble a memoria
MOV DI 00022h I Inmediato I 03 I OD I O 0 I 22
ARCHIVO: CARGA3.MEM
ARCHIVO: CARGA4.MEM
INS I REG I REG 11 o9 Reaistro 02 MOV BX DS 12 08 02 Registro MOV Ax cs
C.reg C.reg C.ins Direccionamiento
Reaistro I 02 I MOV SI BX
nc OD 02 Reaistro MOV DI SI o9 oc 02 Registro MOV SI BX 08 OA 02 Registro MOV DI Ax OE O B 02 Registro MOV DX BP 08 o9 02 Registro MOV BX Ax o9 oc 02 Registro
Alejandro Montejo Rubio 38
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
ARCHIVO: CARGA5.MEM
INS Ofsset
12 O 0 04 Directo MOV 0012h AH Lo Hi DS 8 bits C.reg Ofsset
01
dirección I REG C.ins Direccionamiento
&
MOV 1254h AL DD I 02 5F 04 Directo MOV 5FDDh BL 54 I O 0 12 04 Directo
~
MOV 2365h BH
01 FF AD 04 Directo MOV ADFF AH 05 AA 12 04 Directo MOV 12AAh CH 03 65 23 04 Directo "
MOV FD89 BL
04 36 12 04 Directo MOV 1236h CL 07 64 23 04 Directo MOV 2364 DH 05 32 56 04 Directo MOV 5632 CH 02 89 FD 04 Directo
ARCHIVO: CARGA6.MEM
INS Ofsset
12 O 0 04 Directo MOV 0012h Ax Lo Hi DS 16 bits C.reg Ofsset
08
dirección I REG C.ins Direccionamiento
ARCHIVO: CARGA7.MEM
Alejandro Montejo Rubio 39
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
ARCHIVO: CARGA8.MEM
Reg INS I bits [ Dirm
C.reg C.ins Direccionamiento Hi MOV AX 0012h
63 52 OC 05 Directo MOV SI 5263h DD 5F OA 05 Directo MOV cx 5FDDh 54 12 O9 05 Directo MOV BX 1254h 12 O 0 08 05 Directo
Ofsset Ofsset DS Lo
I
MOV DI 1245h
33 56 O9 05 Directo MOV BX 5633h 6A 98 08 05 Directo MOV AX 986Ah 45 12 OD 05 Directo
~~
MOV DX 2365h I Directo AA 12 OC 05 MOV SI 12AAh I Directo 65 23 OB 05
I I I I
MOV DI 1236h I Directo I 05 I OD I 12 I 36
Suma de datos:
ARCHIVO: SUMA1 .MEM
ARCHIVO: SUMA2.MEM
DATO
Bits INS
33 25 08 08 Inmediato ADD AX 2533h
Dato Hi Dato C.reg C.ins Direccionamiento 16 REG
Lo
ADD BX FF58h
A5 F4 OB 08 Inmediato ADD DX F4A5 h D8 52 OA 08 Inmediato ADD CX 52D8h 58 FF O9 08 Inmediato
~~ .. " "
ADD AX 5263h
22 O 0 OD 08 Inmediato ADD DI 00022h C6 5c OC 08 Inmediato ADD SI 5CC6h 89 AD OB 08 Inmediato ADD DX AD89h 33 26 OA 08 Inmediato ADD CX 2633h 2A 45 O9 08 Inmediato ADD BX 452Ah 63 52 08 08 Inmediato
Alejandro Montejo Rubio 40
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
ARCHIVO: SUMA3.MEM
ARCHIVO: SUMA4.MEM
ARCHIVO: SUMA5MEM
ADD DX 2635h 22 00 OD OA Inmediato ADD DI 00022h 35 26 OB OA Inmediato
Alejandro Montejo Rubio 41
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
ARCHIVO: RESTA2.MEM
INS Direccionamiento REG 8 bits REG ,nst
03 O1 OE Registro SUB AH BH 02 O0 OE Registro SUB AL BL
Reg. Cód Cód Cód
Reg.
nn I SUB BH AL I Reaistro I OE ~ [""m uu I
SUB BL AH
04 06 OE Reaistro SUB DL CL 08 05 OE Registro SUB CH DL 07 04 OE Registro SUB CL DH o1 02 OE Registro
ARCHIVO: RESTA3.MEM
Bits SUB AX 2533h SUB BX FF58h SUB CX 52D8h SUB DX F4A5h SUB AX 5263h SUB BX 452Ah
2633h
SUB 5CC6h SUB 00022h
ARCHIVO: RESTA4.MEM
Direccionamiento
Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato
Cód Ins
OF OF OF OF OF OF OF OF OF OF
- - - - - - - - - -
Cód Reg
08 o9 OA OB 08 o9 OA OB oc OD
I N S I REG 1 16 bits Cód Ins
SUB AX DS Registro
10 Registro SUB DI AX 10 Registro SUB SI DI 10 Registro SUB AX ES 10 Registro SUB SI SS 10 Registro SUB DI DS 10 Registro SUB BP cs 10 Registro SUB DX BX 10 Registro SUB CX cs 10 Registro SUB BX BP 10
REG Direccionamiento
Dato Dato Lo Hi
D8 F4 A5 52 I 63
O 0 I 22
Cód I Cód.Re I
OB I O9 "1
oc OD OD
Alejandro Montejo Rubio 43
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
ARCHIVO: RESTA5.MEM
Producto de datos:
ARCHIVO: PRODUCTO1 .MEM
ARCHIVO: PRODUCT02.MEM
I
MUL 1236h I Directo I 13 I 12 36 ~ ~~
Alejandro Montejo Rubio 44
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Incremento de datos:
ARCHIVO: INCRE1.MEM
INS I REG I Direccionarniento INC AL Registro
Cód Reg. Cód lnst
00 14 INC AL Reaistro 05 14 INC CH Registro 04 14 INC CL Registro 03 14 INC BL Registro 02 14 INC BH Registro 01 14 INC AH Registro 00 14
INC BL Registro
14 INC Ax Registro 06 14 INC DL Registro 03 14
OD 14 INC DI Reaistro oc 14 I NC SI Registro OA 14 INC cx Registro 09 14 INC BX Registro 08
-
ARCHIVO: INCRE2.MEM
Alejandro Montejo Rubio 45
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Decremento de datos:
ARCHIVO: DECREl .MEM
ARCHIVO: DECRE2.MEM
Alejandro Montejo Rubio 46
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Saltos en segmento de código:
ARCHIVO: JUMP.MEM
Dir Direccionamiento I Cód I Ofsset I Ofsset
I
JMP 0002h I Directo I 18 I O 0 02 I
Apilamiento de datos:
ARCHIVO: PUSH1.MEM
INS I REG I Direccionamiento I Cód Ins I Cód Reg PUSH Ax Inmediato 08 19 PUSH BX Inmediato PUSH cx Inmediato
o9 19
08 19 PUSH Ax Inmediato OA 19 PUSH cx Inmediato o9 19 PUSH BX Inmediato oc 19 PUSH SI Inmediato OB 19 PUSH DX Inmediato OA 19
PUSH DX Inmediato OD 19 PUSH DI Inmediato OB 19
ARCHIVO: PUSH2.MEM
Alejandro Montejo Rubio 47
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Desapilamiento de datos:
ARCHIVO: POP1 .MEM
I INS I REG Direccionamiento I Cód Ins I Cód Rea POP Ax Inmediato
POP o9 1B POP BX Inmediato 08 1B
-~ ~ cx Inmediato I 1B I OA I POP DX Inmediato POP SI Inmediato
OB 1B
08 1B POP Ax Inmediato OA 1B POP cx Inmediato o9 1B POP BX Inmediato oc 1B
POP DX Inmediato POP DI Inmediato
OB 1B OD 1B
ARCHIVO: POP2.MEM
Alejandro Montejo Rubio 48
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Información Técnica del Funcionamiento Interno del Software
Alejandro Montejo Rubio 49
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Información Técnica del Funcionamiento Interno del Software (Manual Técnico)
A partir del estudio de la arquitectura básica, de un sistema mínimo utilizando el microprocesador de la familia Intel, se realizó un análisis que nos permitió implementar una herramienta interactiva para poder realizar simulaciones en lenguaje ensamblador.
Partiendo de la propuesta de realizar una herramienta que nos permitiera simular programas en lenguaje ensamblador a nivel microprocesador interno, se desarrolló un sistema basado en la arquitectura de un microprocesador de la familia Intel.
Arquitectura Interna Básica del Sistema Mínimo 8088
El microprocesador, realiza una búsqueda de instrucciones en la memoria con una operación de lectura, decodificación del código, y ejecución de la instrucción, el sistema de memoria está ocioso entre cada ejecución de instrucción.
Micro- procesador
Ejecutar Decodificar Recuperar Ejecutar Decodificar Recuperar
La figura muestra el proceso básico del trabajo del microprocesador, a este ciclo se le conoce con el nombre de ciclo de fetch. Cuyo algoritmo se muestra a continuación.
Ciclo de Fetch. (algoritmo llamado Siguiente-click, localizado en la formal .frm)
1 .- El microprocesador lee de memoria la instrucción a ejecutar direccionada por el registro Ip (Registro apuntador a siguiente instrucción) mediante un algoritmo llamado Lee-código() .localizado en la formal
2.-El microprocesador decodifica el codigo leido de memoria mediante un algoritmo llamado decodifica(). localizado en la formal
3.-El microprocesador ejecuta el código de instrucción mediante un algoritmo llamado ejecutacodigo2(). localizado en la formal
4.4ncrementa IP.text en tamaño de instrucción +I esta operación se realiza en Siguiente -click localizada en la forml.
Considerando lo anterior tenemos que empezar a definir la implementación de la memoria, de acuerdo a la arquitectura interna del microprocesador 8088, sabemos que este es capaz de direccionar hasta un Megabytes de memoria.Justificando lo anterior el sistema mínimo tiene un bus de direcciones de 20 bits, por lo cual se puede direccionar desde:
0 0 0 0 0 00000000000000000000
11111111111111111111 F F F F F
""""""""""""""""""""""-
Alejandro Montejo Rubio 50
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Por lo cual implementamos un arreglo de las siguientes características:
Arreglo Unidimensional llamado memoria, de Tamaño de 1 Megabytes y de tipo byte
Memoria(De O A 1048575) Como Byte AI inicializa el programa se esta garantizando una memoria apartada de 1 Megabytes, con esto se cumple la
arquitectura de la memoria.
El sistema de memoria esta dividido en bloques los cuales están definidos de la siguiente manera.
t 8 bits
FFFFF
FOOOO
OFFFF
00000
La memoria Eprom esta definida en un segmento de 64 k mediante un inicio en la dirección de Memoria(983040) hasta Memoria(l048575) sin uso dentro del sistema.
La memoria libre sin uso dentro del sistema esta definida en el segmento de inicio de Memoria(65536) hasta Memoria(983039).
La memoria Ram esta segmentada en tres segmentos que son los siguientes:
Segmento de Código: definido en Memoria(0) hasta Memoria(l023) E O-03FF
Segmento de Datos: definido en Memoria(l024) hasta Memoria(2047) ~400-7FF
Segmento de Pila: definido en Memoria(2048) hasta Memoria(3071) E 800- BFF
Segmento Extra: definido en Memoria(3072) hasta Memoria(4095) z COO-FFF
Una vez expuesto las características de la memoria , me corresponde detallar la manera de introducir las instrucciones ha memoria así como, la ejecución de las mismas.
Las instrucciones están escritas en un archivo de texto llamado microinstrucciones.lst, este archivo esta compuesto por una secuencia de líneas las cuales son:
- Nombre de la Instrucción. - Tabla de verdad.
Alejandro Montejo Rubio 51
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
- Número de microinstrucciones. - Microinstrucciones.
Ejemplo: MOV R8 DATO8 Nombre de la Instrucción VFVFFFF Tabla de verdad 3 Numero de microinstruciones DETECTA /Microinstrucción 1 BUSDATOS=ORIGEN Microinstrucciones < Microinstrucción 2
DESTINO=BUSDATOS \Microinstrucción 3
AI ejecutar e l s istema este archivo se lee y se cargan los arreglos los cuales describen el proceso de carga de instrucciones, propiedades, y microinstrucciones.
En donde Nombre de la inst rucc ión es un dato que se in t roduci rá en un ar reglo l lamado mnemónico de t ipo Cadena.
La tabla de verdad representada por un tipo definido de la siguiente manera
Ejemplo:
3
imp
V ByteReg1 As Boolean F ByteReg2 As Boolean V Dato8 As Boolean F DatoHi As Boolean F DatoLo As Boolean F OfMi As Boolean F OffLo As Boolean MOV mnemonico As String
Micro(40) As String
Define si en la instrucción existe Registro en el destino Define si en la instrucción existe Registro en el origen Define si en la instrucción existe un datos de 8 bits Define si en la instrucción existe un dato alto Define si en la instrucción existe un dato bajo Define si en la instrucción existe un offset alto Define si en la instrucción existe un offset bajo Define el nombre de la instrucción Define el numero de instrucciones
La l ínea que indica un numero determina el numero de microinstrucciones de la instrucción.
Las l íneas subsecuentes determinan las microinstrucciones que ejecuta una instrucción.
En la siguiente pagina se muestra una tabla con las microinstrucciones que se Idementaron en el desarrol lo, así como una descripción breve de su funcionamiento.
Microinstruciones Función DETECTA Detecta origen Y destino de la instrucción BUSDATOS=ORIGEN
Asigna al registro destino lo que hay en el bus de datos DESTINO=BUSDATOS Asigna al bus de datos lo que se encuentra en el registro origen
ASIGNA Inicializa la Dosición de la memoria en el semento de datos DATASEGMENT Asigna al registro destino lo que hay en el registro origen
I Y
ASIGNA=MEMORIA I Asigna lo que hay en una posición de memoria a un registro I
Alejandro Montejo Rubio 52
1 - - MEMORIA=ASIGNA ] Asigna lo que hay en el registro origen a una dirección de memoria S U M A
Suma el contenido de memoria a un registro destino S U M A M E M Suma el contenido de un origen con el contenido de un destino
D I V I D E Divide el contenido de una dirección de memoria con el registro destino D I V I D E M E M Divide el contenido de un origen con el contenido de un destino
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
ASIGNA=MEMORIA 1 Asigna lo que hay en una posición de memoria a un registro destino
-
P U S H M E M
Brinca El Ip A Un Desplazamiento Dentro Del Segmento De Código S A L T A este valor en una dirección del segmento de datos. Desapila el contenido de una dirección de memoria del segmento de pila, y coloca POPMEM un registro destino. Desapila el contenido de una dirección de memoria del segmento de pila y lo carga en POPREG dirección de memoria del segmento de pila. Apila el contenido de una dirección de memoria del segmento de datos, en una
Tabla con todas las instrucciones implementadas y su función que realiza.
- R E S T A
Multiplica el origen con un destino MULTIPLICA Resta el contenido de una dirección de memoria con el contenido de un destino RESTAMEM Resta el contenido de un origen con el contenido de un destino
M U L T I P L I C A M E M Incrementa en una unidad el contenido del destino I N C R E M E N T A Multiplica el contenido en una dirección de memoria con un registro destino.
I N C R E M E N T A M E M
Apila el contenido de un registro en una dirección de pila P U S H R E G lnicializa la memoria en el segmento de pila S T A C K S E G M E N T
Decrementa en una unidad el contenido de una dirección de memoria. D E C R E M E N T A M E M Decrementa en una unidad el contenido de un registro destino DECREMENTA Incrementa en una unidad el contenido de una dirección de memoria.
Instrucción NO P FFFFFFF O MOV R8 DATO8 VFVFFFF 3 DETECTA BUSDATOS=ORIGEN DESTINO=BUSDATOS
MOV REG REG VVFFFFF 2 DETECTA AS I GNA
MOV R16 DATO16 VFFVVFF 3 DETECTA BUSDATOS=ORIGEN DESTINO=BUSDATOS
MOV MEM REG FVFFFVV
Alejandro Montejo Rubio
Función Esta instrucción no hace nada
Carga un registro de 8 bits con un dato de 8 bits.
Carga un registro destino con el contenido de un registro origen.
Carga un registro de 16 bits con un datos de 16 bits.
Carga en una dirección de memoria del segmento de datos, el
53
DATASEGMENT DETECTA MAR=DIRECCION BUSDATOS=ORIGEN ASIGNA=MEMORIA
MOV REG MEM VFFFFVV 3 DATASEGMENT DETECTA MEMORIA=ASIGNA
bits.
Carga en un registro origen, el contenido de una dirección de memoria que se encuentra en el segmento de datos.
Simulador del Sistema Mínimo Intel 8088
I contenido de un registro de 3 ó 16
-
ADD R8 DATO8 un dato de 8 bits. VFVFFFF Suma a un registro origen de 8 bits
BUSDATOS=ORIGEN DETECTA 3
SUMA I ADD R8 R8 Suma el contenido de un registro VVFFFFF de 8 bits el contenido de otro
registro de 8 bits. DETECTA
ADD R16 Dl6 VFFVVFF 3 DETECTA BUSDATOS=ORIGEN SUMA
ADD R16 R16 VVFFFFF 2 DETECTA SUMA
ADD REG MEM VFFFFVV 3 DATASEGMENT DETECTA SUMAMEM
DIV R8 VFFFFFF 2 DETECTA DIVIDE
DIV MEM FFFFFVV 3
Suma el contenido de un registro de 16 bits un dato de 16 bits.
Suma el contenido de un registro de 16 bits con el contenido de un registro de 16 bits.
Suma el contenido de un registro de 16 ó 8 bits con el contenido de una dirección de memoria del segmento de datos.
Divide el contenido del registrc AX entre el contenido de ur registro de 8 bits. Poniendo e cociente en AL y el residuo er AH
Divide el contenido del registrc AX entre el contenido de un;
Proyecto Terminal
Alejandro Montejo Rubio 54
Simulador del Sistema Minimo Inte l 8088
c B DATASEGMENT DETECTA DIVIDEMEM
SUB R8 DATO8 VFVFFFF 3 DETECTA BUSDATOS=ORIGEN RESTA
SUB R8 R8 VVFFFFF 2 DETECTA RESTA
SUB R16 Dl6 VFFVVFF 3 DETECTA BUSDATOS=ORIGEN RESTA
SUB R16 R16 VVFFFFF 2 DETECTA RESTA
SUB REG MEM VFFFFVV 3 DATASEGMENT DETECTA RESTAMEM
MUL R8 VFFFFFF 2 DETECTA MULTIPLICA
MUL MEM FFFFFVV 3 DATASEGMENT DETECTA MULTIPLICAMEM
INC R8 VFFFFFF 2 DETECTA INCREMENTA
INC MEM FFFFFVV
Alejandro Montejo Rubio
dirección de 8 bits cre la memoria, que se encuentra en el segmento de datos. Poniendo el cociente en AL y el residuo en AH Resta el contenido de un registro de 8 bits con el contenido de un registro de 8 bits.
Resta el contenido de un registro de 8 bits con el contenido de un registro de 8 bits.
Resta el contenido de un registro de 16 bits con un dato de 16 bits.
Resta el contenido de un registro de 16 bits con el contenido de un registro de 16 bits.
Resta el contenido de un registro de 16 bits, cnn el contenido de una dirección de memoria dentro del segmento de datos.
Multiplica el contenido del registro AL con el contenido de un registro de 8 bits. El producto lo deposita en el registro AX.
Multiplica el contenido del registro AL con el contenido de una dirección de memoria del segmento de datos. y el producto lo deposita en el registro AX. Incrementa el contenido en una unidad del registro de 8 bits ó 16 bits
Incrementa el contenido de una dirección de memoria dentro
Proyecto Terminal
55
b P 3 DATASEGMENT DETECTA INCREMENTAMEM
DEC R8 VFFFFFF 2 DETECTA DECREMENTA
DEC MEM FFFFFVV 3 DATASEGMENT DETECTA DECREMENTAMEM
JMP RELATIVO VFFFFFF 2 DETECTA SALTA
PUSH REG VFFFFFF 3 STACKSEGMENT DETECTA PUSHREG
PUSH MEM FFFFFVV 4 DATASEGMENT STACKSEGMENT DETECTA PUSHMEM
POP REG VFFFFFF 3 STACKSEGMENT DETECTA POPREG
POP MEM FFFFFVV 4 STACKSEGMENT DATASEGMENT DETECTA POPMEM
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
del segmento de datos en una unidad.
Decrementa el contenido de un registro de 8 ó 16 bits en una unidad.
Decrementa el contenido de una dirección de memoria dentro del segmento de datos en una unidad.
Realiza un salto dentro del segmento de código, incrementando el ip con el contenido de un registro de 8 bits.
Realiza un apilamiento de un registro de 16 bits dentro del segmento de pila.
Realiza un apilamiento del contenido de una dirección dentro del segmento de datos, en una dirección dentro del segmento de pila.
Despila el contenido de una dirección del segmento de pila en un registro de 16 bits.
Desapila el contenido del segmento de pila , y lo pone en una dirección de memoria dentro del segmento de datos.
En seguida se muestra el contenido del archivo de ayuda, formado por los archivos ayuda.rtf, y ayuda.hpj
Ayuda.hpj : Se requiere Compilar en hc 3.1 lOPTlONSl errorlog = Erroresxrr
Alejandro Montejo Rubio 56
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
title =AYUDA SIMULADOR contents = CONTENIDO compress = false oldkeyphrase = false warning = 3 [FILES] AYUDA.rtf IMAPl CONTENIDO 1 SIMULADOR 2 GRAFICOS 5 DISPLAY 6 TECLAS 7 EJEMPLOS 8 TECLAEJE 9 TECLARES IO DIRECCIONFISICA 11 MENlJS 12 MICRO 13 nrr 14 BYTES 15 RUSDATOS 16 HISTORIA 17 CARGA 18 SUMA 19 RESTA 20 PRODUCTO 21 DIVISION 22 SALI'O 23 MIC 24 interno 25 registro 26 mapa 27 INS 28 reg 29 EP 30 lWINDOWSl
main = "AYUDA SIMULADOR", (0,0,1023,1023 ),,, (192,192,192) Ayuda.rtf
#SIMULADOR SISTEMA MINIM0 8088 El sistema mínimo 8088 se diseño, para poder proporcionar al usuario una herramienta de software que le permita
realizar practicas de programación a nivel ensamblador, a manera que pueda realizar sus primeras practicas de dicho lenguaje en un simulador de estas características. Cabe señalar que este sistema tiene sus limitaciones de programación y que solo podrán ser manejadas algunas herramientas del =MICRO ya que suele ser complicado para un proyecto terminal lograr modelar y simular todas las propiedades del microprocesador =MICRO.
Alejandro Montejo Rubio 57
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
"
RQGT. NMI INT
RST n + o
3 READY
% o_
ALU de 16 brts - 4
n reglstros de
dpMX banderas
m a -
GND D
4 VCC
so-S2 . unidad de apuntador interriaz de BUS LOCK
D T F D m , ALE
m ADO A16153 INTA, liZi;,AD15 AI 9156
El contenido de esta ayuda esta dividido en cuatro secciones:
0 SimuladorSIMULADOR 0 Micro InternoMIC 0 EiemplosEjeMPLOS 0 HistorialHISTORIA
MICRO INTER :NO En esta sección se muestra una explicación del Microprocesador Interno, considerando su comportamiento en una
ejecución así como las características propias del mismo.
Micro InternoINTERNO RegistrosREGISTROS Mapa de memoriaMAPA
Ventana de Simulador En esta ventana se observará los registros internos del microprocesador, el bus de direcciones, el bus de datos,
mapa gráfico de la memoria, así como, botones de control.
o Registros Internos : Todos los registros internos al tiempo de cargar esta ventana se inicializán a cero, excepto los registros de segmento que se cargan con su respectivo valor, de segmento estos registros pueden ser modificados antes de la ejecución, excepto los registros de segmento.
para la memoria del sistema o el espacio de entradaisalida (E/S) para los dispositivos de E/s del sistema.
dispositivos de E/S conectados en el sistema.
0 Bus de Direcciones : El canal de direcciones suministra una dirección en la memoria
0 Bus de datos : El canal transfiere éstos entre el microprocesador y la memoria y los
0 Botones de Control : Estos se encuentran etiquetados con los siguientes Rótulos : * Reset : Inicializa los registros internos a cero, exceptuando los registros de segmentos
Alejandro Montejo Rubio 58
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
* Anima : Este botón ejecuta el programa continuamente a una velocidad determinada por el valor de la caja de intervalo, activada por la caja Atiempo. * Siguiente : Este botón ejecuta cada instrucción paso a paso. * Desensambla : Este botón nos muestra una ventana con el código desensamblado. * Fin : Este botón termina la ejecución del simulador y regresa al editor.
En esta ventana también contiene una barra de menús que tiene los siguientes subménus :
Menú Abrir : Este menú contiene los siguientes subménus : * Abrir : Este subménu se encarga de abrir un archivo que se haya editado previamente. * Guardar : Este subménu se encarga de guardar el archivo que se este editando actualmente. * Salir : Este subménu se encarga de regresarlo a la pantalla de Edición
Cada vez que Ud. ejecute el comando de abrir un nuevo archivo deberá de actualizar la Dirección a Editar
-Registro de propósito general. Los registros de uso general se pueden direccionar en el 8088 como registros de 16 bits (AX,BX,CX,DX) o como
registros de 8 bits (AH,AL,BH,BL,CH,CL,DH,DL). Los registro de uso general se utilizan para tareas especificas, por esta razón a cada uno de estos se les da un nombre (Acumulador, Base, Contador y Datos).
AX (Acumu1ador):Conserva el resultado temporal después de una operación aritmética o lógica. A este registro también se le direcciona como registros de 8 bits (AH,AL).
BX (Base): Conserva la dirección base (desplazamiento) de los datos que hay en la memoria o la dirección base de una tabla de datos referenciados por la instrucción ara convertir (XLAT). A este registro también se le direcciona como registros de 8 bits (BH,BL).
CX(Contador): Contiene el conteo de ciertas instrucciones para corrimientos (CL) y rotaciones del numero de bytes (CX) para las operaciones repetidas de cadena y un contador (CX) para la instrucción LOOP. A este registro también se le direcciona como registros de 8 bits (CH,CL).
DX (Datos): Es un registro de uso general que también contiene la parte más significativa de un producto después de una multiplicación de 16 bits; la parte más significativa del dividendo antes de la división y el número de puerto de E/S para una instrucción variable de E/S. A este registro también se le direcciona como registros de 8 bits (DH,DL).
Registros apuntadores e indices Estos registros son también de uso general , pero se utilizan más a menudo para apuntar a la localidad de la
memoria que contiene los datos del operando de muchas instrucciones.
SP ( Apuntador a pila ): Este registro se emplea para direccionar datos a la pila de memoria de (LIFO) .
BP (Apuntador a base): Es un apuntador de uso general que se utiliza a menudo para direccionar a una matriz de datos en una pila de memoria.
SI (indice fuente) : Se emplea para direccionar datos fuente en forma indirecta para utilizarlos con las instrucciones de cadenas o arreglos.
DI (lndice de datos): Se emplea para direccionar datos destino en forma indirecta para utilizarlos con las instrucciones de cadenas o arreglos.
Alejandro Montejo Rubio 59
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
IP ( Apuntador de instrucciones ): Se utiliza siempre para direccionar a la siguiente instrucción que va a ejecutar el microprocesador. Para formar la localidad real de la siguiente instrucción se suma el contenido de IP con CS(por) 10H. Cabe señalar que se puede realizar direccionamiento indirecto de datos por medio de estos registros excepto con el apuntador a instrucción ( IP 1.
Registros de segmento
Los registros de segmento, generan direcciones en la memoria junto con otros registros.
CS ( código ): El segmento de código es una porción de la memoria que tiene los programas y procedimientos utilizados por los programas. El registro de segmento de código define la dirección inicial de la sección de memoria que tiene el código. En modo real , define el inicio de una sección de 6 4 K bytes. segmento de código esta limitado en el 8088 a una longitud de 64 Kbytes. Definido en el segmento 0000.
DS ( datos 1: El segmento de datos es una sección de la memoria que contiene la mayor parte de los datos utilizados por un programa. Se les accesa en el segmento de datos con un desplazamiento o con el contenido de otros registros que tiene la dirección del desplazamiento. Definido en el segmento 0400
ES(segmento extra): El segmento extra de datos lo utilizan algunas instrucciones para cadenas. Definido en el segmento OCOO
SS (segmento de pila): El segmento de pila define la superficie de la memoria utilizada para la pila. La ubicación del punto inicial de entrada a la pila, se determina por el registro apuntador de la pila. El registro BP también direcciona los datos que hay dentro del segmento de pila. Definido en el segmento 0800.Todos estos registros de segmento pueden direccionar hasta 1024 bytes.
Mapa Gráfico de la memoria
Mapa Gráfico de la memoria : Muestra los valores internos de la memoria, dependiendo del valor que las cajas de segmento y desplazamiento contengan, Ud. puede cambiar el valor de segmento desde la caja o bien oprimiendo en la etiqueta de segmento de registro. Cabe señalar que podemos cambiar valores de memoria o bien editar programas desde el mapa de la memoria, introduciendo un número en la caja de valor y después de esto oprimir "Entrar - Dato-Mod".
SIMULADOR
El sistema mínimo esta representado de manera gráfica en esta pantalla, aquí podemos realizar las ediciones, de programas en lenguaje propio de expresiones completas, recuperar y salvar los programas editados, así como obtener información de los componentes gráficos, los cuales componen el sistema mínimo 8088. Podemos cambiar de dirección de edición de nuestros programas, así como desensamblar el código de expresiones completas, aun condijo de lenguaje ensamblador.
Gráficos de los componentes fisico del sistema mínimo 8088GRAFICOS Display de edición de ProgsamasDISPLAY Coniunto de teclas de ediciónTECLAS Caja de dirección DIRECCIONFISICA MenúsMENUS Edición de PronramasEP Tabla de InstruccionesINS Tabla de Registros REG
Alejandro Montejo Rubio 60
Alejandro Montejo Rubio 61
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Código: Este es el valor correspondiente de cada instrucción. Instrucción: Es la descripción textual de cada instrucción. Función: Es la actuación de cada instrucción. Tamaiio de instrucción: Es el tamaño real de cada instrucción en memoria BusDatos: Señala si se hace uso del Busdatos. BusDirecci6n:Señala si se hace uso del Bus de Direcciones.
GRAFICOS
Los gráficos de esta pantalla representan los componentes físicos del sistema, y podemos obtener información acerca de ellos. Para obtener información de estos componentes gráficos, debemos posicionar el cursor del mouse en el componente, y teclear un click en el botón derecho del mouse, y para cerrar la ventana de información del componente basta con teclear el botón cerrar.
DISPLAY
El display es una ventana que nos permite visualizar las expresiones del lenguaje, los registro, así como los datos que se van cargando para completar las instrucciones.
Cabe señalar que en este objeto no podemos realizar ninguna edición directa de datos.#.
Alejandro Montejo Rubio 62
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
TECLAS
Las Teclas se clasifica en:
Las teclas de Edición son las teclas que se encuentran en el panel de teclas.
Estas teclas se componen de las teclas de instrucción que son las 2 teclas que' se encuentran en la parte izquierda de este conjunto, cuyas teclas se etiquetan con los símbolos siguientes: u fl; La tecla de entrar que es la tercera tecla del conjunto cuyo símbolo es J; las dos ultimas teclas de este conjunto con los símbolos siguientes u fl son las teclas de registros las cuales nos permiten escoger los registros del microprocesador para formar las instrucciones del programa.
Las teclas de valor son las teclas que se encuentran en la parte inferior izquierda de la pantalla, cuyo conjunto esta formado por teclas cuyos valores oscilan entre el conjunto de símbolos que nos permiten formar el conjunto de los números representados en la base hexadecimal.
Las teclas de función son :
Tecla EiecutarTECLAEJE Tecla ResetTECLARES
Tecla Ejecutar: Nos permite ejecutar la pantalla de ejecución de programas, esta función se puede realizar posicionando el cursor del mouse en la tecla y haciendo un click en el botón izquierdo del mouse ó mediante las teclas rápidas ALT+E.
Tecla Reset: Nos permite resetear la memoria y empezar una nueva ejecución, esta función se puede realizar posicionando el cursor del mouse en la tecla y haciendo un click en el botón izquierdo del mouse ó mediante las teclas rápidas ALT+R.
# D I R E C C I ~ N FÍSICA
La Dirección de Editar muestra la dirección a editar del segmento de código, esta se ira incrementando de acuerdo al valor en bytes entre instrucción e instrucción.
# MENÚS
La ventana cuenta con una barra de menús formada por tres títulos que son :
.Archivo : Se puede activar vía barra de menú o por la combinación de teclas ALT + A, este menú cuenta con cuatro subménus que son :
0 Abrir(Ctrl+A) : El cual abre un archivo editado y lo carga en memoria. Guardar(CTRL + G) : El cual guarda el contenido de un archivo editado en memoria.
de Portada 0 Índice(CTRL + I) : El cual muestra la ventana de índice, que es similar a la ventana
0 Salir (CTRL + S) : Termina la ejecución del sistema o Comandos : Se puede activar por medio de la combinación de teclas ALT + C, este
o Cambiar Dirección de Edición(CTRL + C) : Nos muestra una caja de mensaje menú cuenta con tres subménus que son :
donde podemos cambiar el desplazamiento, dentro del segmento de código para editar programas.
Alejandro Montejo Rubio 63
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
0 Ejecutar (CTRL + E) : Muestra la pantalla de microprocesador interno, en la cual se
Desensamblar (CTRL + D) : Muestra una ventana con el código en lenguaje
0 Historial (CTRL + H) : Muestra una breve reseña histórica de la familia Intel
muestra las operaciones internas de ejecución
ensamblador.
Microprocesador Intel 8088. El Intel 8088 es un procesador del tipo NMOS que se vende empacado con 40 patas.Tiene una trayectoria interna
de datos de 16 m B l T aunque lee y escribe de memoria Solo 8 bits a la vez además puede direccionar 1 MeqabVteBYTES de memoria.
El 8088 pretende extraer instrucciones por adelantado siempre que es posible de modo que cuando se necesite la siguiente instrucción ya estar disponible. El Intel 8088 pude trabajar en dos modos :
0 Modo mínimo. Modo máximo.
Modo de trabajo del Micro procesador Modo Mínimo / Modo Máximo
En el modo máximo se tienen 40 patas que contienen direcciones de memoria o de E/S para lecturas y escrituras. Estas patas tienen la nomenclatura A0 a A19. Como el 8088 transfiere 8 bits de datos a la vez puede parecer lógico que se utilicen otras 8 patas para el bus de datosBUSDATOS Sin embargo para reducir el minimo de patas necesarias para que el 8088 se ajuste al paquete estándar de 40 terminales, las lineas de datos DO a D7 son multiplexadas junto con las patas A0 y A7. Estas patas denominadas ADO y AD7 contienen direcciones al inicio del ciclo del bus y mas adelante en el ciclo contienen datos. Existen reglas que rigen el tiempo de modo que nunca existe ambigüedades. Por otra parte a la pata 33 se le denomina MNlMX (Mínima/Máxima) esta pata se activa para indicar que no esta en el modo máximo sino en el mínimo. Para el control del bus de datosBUSDATOS se utilizan 6 patas. Las patas de estado SO-S2 definen el tipo de ciclo del bus que se desea el 8088.
La señal RD indica que esta llevando a cabo un ciclo de lectura. La señal LOCK puede ser activada por el 8088 para indicar a otros maestros potenciales que liberen el bus a la memoria. La señal READY pretende entregar un byte de memoria cuando el 8088 lo solicita en cuatro ciclos de bus. La señal INTR y NMI se utilizan para provocar interrupciones de la CPU. Para el arbitraje del bus se utilizan las líneas RQ y Gtx. La señal TEST permite al 8088 verificar el estado de coprocesador esta prueba se requiere cuando se encuentra con un dato de punto flotante el 8088 arrancando el 8087.La señal S3 a S6 y QSx contienen información del estado interno de la CPU.
BIT: Digito binario: la unidad de datos más pequeiia que un equipo puede almacenar. Los bits se expresan como 1 O O .
Byte: Unidad mínima de almacenamiento para un dato.
kilobyte-----l,OOO Bytes. Megabyte--- 1,000,000 BYTES
Bus Datos: Es el canal por el cual se transfieren los datos, entre la memoria y el microprocesador. El canal de datos para el 8088, transfiere 1 byte entre la memoria y el microprocesador
Tipos de Ejemplos: 1 .Carga de DatosCARGA 2.Suma De DatosSUMA 3.Producto De DatosPRODUCTO 4.División de DatosDlVISlON 5.Resta de datosRESTA 6.Saltos, Incrementos, Apilar, DesapilarSALTO
Alejandro Montejo Rubio 64
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
PROCEDIMIENTO DE EDICIÓN DE PROGRAMAS
Como Ud. podrá apreciar en esta ventana es donde se realiza la programación en el lenguaje ensamblador, para lo cual se le darán una serie de pasos para que el desempeño del sistema sea el óptimo.
Están desactivadas las teclas de registro y de valor, lo primero que tendrá que hacer es introducir el valor de alguna de las instrucciones con las que cuenta el sistema por medio de las flechas izquierdas de edición, oprimiendo el botón de "Enter" para que dichas instrucciones sean aceptadas
En el caso de que la instrucción emplee registro o valor estos deberán ser introducidos ya sea por flechas derechas de edición o por medio del teclado, deberá de oprimir la tecla de "Enter" para que estos valores sean aceptados
Repetir los pasos 1 y 2 mientras desea seguir editando, en caso contrario su programa editado se podrá guardar tecleando la combinación de CTRL + G o en su defecto abriendo el menú de Archivo y elegir la opción de guardar.
La Dirección de Editar se ira incrementando de acuerdo al valor en bytes entre instrucción e instrucción.
Para iniciar el programa deberá de oprimir el botón de Ejecutar, el cual le abrirá la ventana del simulador.
Si desea cargar un programa que ya editó, basta con oprimir la combinación de teclas CTRL + A, o por medio del menú Archivo eligiendo la opción de Abrir.
Para Resetear (Limpiar) Este botón es utilizado en el caso de que Ud. desee limpiar la memoria en cualquier programa que este editando, y que no haya sido guardado previamente
Alejandro Montejo Rubio 65
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Conclusiones El Simulador del sistema minimo 8088, se implementa de acuerdo a la arquitectura básica de microprocesador de
Intel, de acuerdo a las perspectivas planteadas en el análisis previo a dicha presentación. Los alcances obtenidos son significativos ya que se logro la implementación de una gran conjunto de instrucciones soportadas por el microprocesador.
La principal caracteristica que nos hereda este simulador, es que debido ha la estructura, y al tipo de instrucciones manejadas con microinstrucciones, podemos seguir aumentando las características del sistema implementado una gran numero de instrucciones para el crecimiento de este simulador.
Esta herramienta cubre las principales Características e instrucciones de lenguaje ensamblador, para poder practicar y desarrollar pequeños programas, que permitan la practica de usuarios expertos e inexpertos, en el tema de Lenguaje ensamblador, trabajado bajo el 8088 de la familia Intel, y asi mismo poder seguir el comportamiento del microprocesador paso a paso por medio del las ventanas de rastreo.
Con está herramienta será mucho más fácil el diseño y análisis de los componentes físicos, y la realización - en esté caso de las principales operaciones lógicas que se pueden realizar en un sistema real, sin tanto margen de error, ya que al tener una clara idea de lo que se está haciendo y como se esta realizando dará una visión más amplia y simplificada del diseño a nivel hardware.
Alejandro Montejo Rubio 66
Apéndice.
Código Fuente A aontinuadón se muestra en el siguiente orden el d i g o .
Form=Portada. f rm Module=Tipos; Tipos y variables globales. Bas Form=CPU interno. Frm Form=Sistema minimo. f rm Form=Desensamblador.frm
Object=(F9043C88-F6F2-lOlA-A3C9- Form=historial.frm
08002B2F49FB]#1.0#0; COMDLG32.OCX Object=(BDC217C8-ED16-llCD-956C- 0000C04E4COA)#1.0#0; TABCTL32.OCX Object=(3B7C8863-D78F-lOlB-B9B5- 04021C009402}#1.0#0; RICHTX32.OCX Object=(6B7E6392-850A-lO1B-AFCO- 4210102A8DA7]#1.0#0; COMCTL32.0CX Object=(FAEEE763-117E-lOlB-8933- 08002B2F4F5A)#1.0#0; DBLIST3Z.OCX 0bject=(00028C01-0000-0000-0000- 000000000046]#1.0#0; DBGRID32.0CX Reference=*\G(BEF6EOOl-A874-lOlA-8BBA- 00A?l00300CAB)#2.O#O#D:\WINDOWS\SYSTEM\O LEPR032.DLL#Standard OLE Types Reference=*\G{00025EOl-OOOO-OOOO-COOO- OOOOOOOOOO46)#3.O#O#D:\ARCHIVOS DE PROGRAMA\ARCHIVOS
PROGW\A#Microsoft DA0 3.0 Object Library Object=(OBA686C6-F7D3-lOlA-993E- 0000COEF6F5E]#1.0#0; THREED32.0CX Object=[C932BA88-4374-lOlB-A56C- 00AA003668DC)#1.0#0; MSMASK32.OCX Object=[B16553C3-06DB-lOlB-85B2- 0000C009BE81)#1.0#0; SPIN32.OCX Object-(27395F88-OCOC-1OlB-A3C9- 08002B2F49FB)#1.0#0; PICCLP32.OCX Object=[648A5603-2C6E-lOlB-82B6- 000000000014~#1.0#0; MSCOMM32.OCX Object=(ClA8AF28-1257-10lB-8FBO- 0020AF039CA3f#1.0#0; MCI32.OCX Object=(20C62CAE-15DA-lOlB-B9A8- 444553540000)#1.0#0; MSMAPI32.OCX
04021C009402)#1.0#0; KEYSTA32.0CX
04021C009402f#1.0#0; GAUGE32.0CX Object=[0842D103-1E19-lOlB-9AAF- lA1626551E7C}#1.0#0: GRAPH32.OCX Object={F72CC888-5ADC-101B-A56C- OOAAOO3668DC)#1.0#0; ANIBTN32.OCX Object={BE4F3ACB-AEC9-10lA-947B- OODD010F7B46)#1.0#0; MSOUTL32.0CX Object=midfile; mid Ohject=mplayer; mplayer.exe Object=AVIFile; avi Ohject=Package; packager.exe ProjWinSize=127,195,300,411 ProjWinShow=2 IconForm="Forml" HelpFile="C: \actualizacion\Ayuda.hlp"
COMUNES\MICROSOD:\ARCHIVOS DE
Ohject=(B9D22273-OC24-101B-AEBD-
Object={7A080CC8-26E2-101B-AEBD-
Alejandro Montejo Rubio
Title="Simula-1" ExeName32="prueba. exe" Name="Proyectl" HelpContextID="l" StartMode=O VersionCompatible32="0" Ma j orVer=l MinorVer=O RevisionVer=O AutoIncrementVer=O ServerSupportFiles=O VersionCompanyName="UAM. "
Código Portada VERSION 4.00 Begin VB-Form Portada
Appearance = O 'Flat Backcolor = &HOOFF0000& Caption ClientHeight = 4140 ClientLeft = 2430 ClientTop = 1320 Clientwidth = 7305 FillColor = hHOOCOCOCO& Forecolor = &H00000000& Height = 4545 HelpContextID = 1 Left = 2370 LinkTopic ScaleHeight
= "Form3"
Scalewidth = 4140 = 7305
Width = 7425 Windowstate Begin VB.Timer Timer1
= 2 'Maximized
= "Portada"
TOP = 975
Left Interval = 3000
= 1320 TOP = 6600
End Begin VB.PictureBox SSPanell
Backcolor = &HOOCOCOCO& Beginproperty Font IOBE35203-
8F91-llCE-9DE3-00AAO04BB851} Name = "MS Sans
Size Charset
= 24
Weight = o
Underline = 700
Italic = O 'False
Strikethrough = O 'False = O 'False
Endproperty Height = 240 Left = 2160 ScaleHeight = 180 Scalewidth = 195 TabIndex = o Width Begin VB.PictureBox Picture1
Serif"
TOP = 6480 = 255
Appearance Backcolor
= O 'Flat
Borderstyle = O 'None ClipControls = O 'False DrawMode = 15 'Merge
Fillstyle = 2
FontTransparent = O 'False Forecolor = &H80000008& Height = 2055
- - &H80000005&
Pen Not
'Horizontal Line
67
Left = 360 Picture
ScaleHeight = 2055 Scalewidth = 3735 TabIndex = 1
Width = 3735 Begin VB.Labe1 Label1
- ~
"portada.frx":0000
TOP = 480
Caption
Height = 15 Left = 1440 TabIndex = 4
Width = 2295
- -
"Labell"
TOP = 2040
End End Begin VB.Frame Frame1
- -
&HOOCOCOCO& Backcolor
Height Left
= 4935
TabIndex = 240
TOP = 2
Width = 240 = 7695
Begin VB.PictureBox SSPanel2
Beginproperty Font (OBE35203-8F91- Backcolor = &HOOCOCOCO&
llCE-9DE3-00AA004BB851) Name = "MS Sans Serif" Size = 18 Charset = o Weight = 700 Underline Italic
= O False
Strikethrough = O False = -1 True
Endproperty Height = 1095 Left = 720 ScaleHelght = 1035 Scalewidth = 6195 TabIndex Top
= 3
Wldth = 3360 = 6255
End Begin VB.Labe1 Label3 Alignment = 2 Center Borderstyle = 1 Fixed Single Caption="Universidad Autonoma
Beginproperty Font (OBE35203-8F91- Metropolitana"
llCE-9DE3-00AA004BB851) Name="MS Sans Serif" Size= 12
Charset = o Weight = 700 Underline = o
Endproperty Height Left = 3960 TabIndex = 6
Width
= 735
TOP = 360
End Begin VB.Labe1 Label2
= 3615
Alignment = 2 Caption = "Casa abierta al Tiempo"
(OBE35203-8F91-1lCE-9DE3-OOAA004BB851) Beginproperty Font
Sans Serif" Name '"S
Size = 12 Charset Weight = I00
= o
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Underline = o EndProperty Height Left TabIndex = 5 TOP = 2280 Width = 3015
= 375 = 600
End End
End Begln VB.PictureBox SSPanel3
Backcolor = &HOOCOCOCO& Height = 6495 Left = 1440
Scalewidth ScaleHeight = 6435
= 9075 TabIndex = 7 TOP Width
= 720 = 9135
Begin VB. Frame Frame2 Height = 4695 Left = 600 TabIndex Top
= 8
Wldth = 600 = 7935
Begin VB.PictureBox SSPanel4 Backcolor
Beginproperty Font
- -
&HOOFF8080&
(OBE35203-8F91-llCE-9DE3-OOAAOO4BB851) Name = "Times New Roman" Size = 54.75 Charset = o Weight = 700 Underline = O 'False Italic = -1 'True Strikethrough = 0 'False Endproperty
Forecolor = &HOOFF0000& Helght = 1965 Left = 2880 ScaleHeight = 1905 ScaleWidtk TabIndex
= 3945
TOP = 15
Width = 1 6 8 0
Begin VB.Labe1 Label8 = 4005
BackColor = &H00000000& BackStyle = o
Beginproperty Font (OBE35203-8F91- 'Transparent
llCE-9DE3-00AA004BB851) Name = "Times New Roman" Size = 12 Charset = 0 Weight = 700 Underline = O 'False Italic = O 'False Strikethrough = O 'False
Forecolor = &H00000000& Height = 285 Left = 240 TabIndex = 1 8
TOP = 1320 Width = 3495
Endproperty
End Begln VB.Labe1 Label7 Backcolor Backstyle
= &HOOOOOOFF& = O 'Transparent
Beginproperty Font (OBE35203-8F91-
Name = "Times New Roman"
Charset Size = 12
= o Weight = IO0
11CE-9DE3-00AA004BB851)
2
-l
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Underline = O 'Falso Italic = O 'Falso Strikethrough = O 'Falso
ForeColor = &H00000000& Height = 285 Left = 240 TabIndex = 17
Wldth = 3495
Endproperty
TOP = 840
End Begin VB.Labe1 Label6 BackColor = &HOOOOOOOO&
Backstyle = o BeginProperty Font
'Transparent
{ O B E 3 5 2 0 3 - 8 F 9 1 - l l C E - 9 D E 3 - O O A A O O 4 B B 8 5 1 j Name= "Times New Roman" Size = 12 Charset Welght Underline = O 'False Italic = O 'False Strikethrough = O 'False
ForeColor = &H00000000& Height = 285 Left = 240 TabIndex = 16 Top = 360 Width = 3315
= o = 700
Endproperty
End End Begin VB.PictureBox SSPanel5
BackColor = &HOOCOCOCO& ForeColor = &HOOOOOOCO& Height = 2535 Left = 2520 ScaleHeight = 2475 Scalewidth = 4635 TabIndex = 19
Width = 4695 TOP = 1440
End Begin VB.PictureBox SSCommand4
BeginProperty Font (OBE35203-8F91-llCE-9DE3-OOAAOO4BB851)
Name= "MS Sans Serif" Size= 9.75 Charset= O Weight = 700 Underline = O 'False Italic = 0 ' F a l s e Strikethrough = 0 'False
Endproperty Height Left
= 495 = 360
ScaleHeight Scalewidth
= 435 = 1635
TabIndex = 12
Width = 1695 TOP = 3120
End Begin VB.PictureBox SSCommand3
llCE-9DE3-00AA004BB851) BeginProperty Font (OBE35203-8F91-
Name= "MS Sans Serif"
Charset Size= 9.15
Weight = 700 Underline = O 'False
Strikethrough = O 'False ItdllC = O 'False
Endproperty Height = 495 Left = 360
= o
ScaleHelght = 435 Scalewidth = 1635 TabIndex = 11 TOP Width
= 2625 = 1695
End Begin VB.PictureBox SSCommand2
BeginProperty Font
Name = "MS Sans Serif" Size = 9.15 Charset Weight Underline = 0 'False Italic = O 'False Strikethrough = O 'False Endproperty Height = 495 Left = 360 ScaleHeight = 435
{ O B E 3 5 2 0 3 - 8 F 9 1 - l l C E - 9 D E 3 - O O A A O O 4 B B 8 5 1 j
= o = 700
ScaleWidt!I = 1635 TabIndex = 10
Width = 1695 End Begin VB.PlctureBox SSCommandl
TOP = 2160
BeginProperty Font
Name= "MS Sans Serif" Size = 9.15 Charset Weight Underline = O 'False Italic = O 'False Strikethrough = O 'False Endproperty Height = 495 Left = 360 ScaleHeight = 435 Scalewidth = 1635 TabIndex = 9
Width
(OBE35203-8F91-llCE-9DE3-OOAAOO4BB851)
= o = 700
TOP = 1680 = 1695
End Begin VB.Labe1 Label4
Alignment = 2 'Center Borderstyle = 1 'Fixed Single Caption = "Contenido" BeginProperty Font (OBE35203-
Name = "MS Sans Serif"
Charset Size = 18
Weight = 700 Underline = 0 'False Italic = O 'False Strikethrough = O 'False Endproperty Helght = 495 Left = 1920 TabIndex = 13 TOP = 360 Width = 3975
8F91-llCE-9DE3-00AAOO4BB851)
= o
End End
Begin VB.Labe1 Label5 Appearance = O 'Flat
BackColor = &H80000005& BackStyle Caption ="Oprima el bóton de la opción
= O 'Transparent
que requiera" ForeColor= &H80000008& Height = 255 Left = 600 TabIndex = 14 TOP = 5400
Alejandro Montejo Rubio 3
i
Width = 3015 End
End End Attribute VB-Name = "Portada" Attribute VB-Creatable = False Attribute VB-Exposed = False
Private Sub Toolbar2-ButtonClick(ByVal Button As Button) End Sub
Private Sub Commandl-Click0 End Sub
Private Sub Command2-CllckO End End Sub
Private Sub Form-Load ( ) SSPanell.Height = 5535 SSPanell.Top = 720 SSPanell.Left = 720 SSPanell.Width = 8295 SSPanel3.Visible = False Timerl.Interva1 = 2000 End Sub
Private Sub SSComm2andl-Click0 Label6.Caption = "Alejandro Montejo Rubio" End Sub
Private Sub Label4-Click0 End Sub
Private Sub SSCommandl-Click0
Codigo Modulo Tipos y Variables Attribute VB-Name = "Tipos" Public Type TEprom
Inicio As Long Fin As Long
End Type
Public Type TInformacionOperaciones ByteRegl As Boolean'Estado 1 EyteReg2 As Boolean 'Estado 4 Dato8 As Boolean 'Estado 5 DatoHi As Boolean 'Estado 6 DatoLo As Boolean 'Estado I OffHi AS Boolean 'Estado 2 y 8 OffLo As Boolean 'Estado 3 y 9 mnemonic0 As String Micro(40) As String
End Type
Public mnemonicos0 As Strlng Public EstadoFetch As Integer Public Memoria(0 To 1048575) As Byte ' Declaración del arreglo de memoria Public DirecionamientoRegistro As Byte Public CodigoDireccionamiento As Byte Public CodigoRegistrol As Byte ' Con uso Public CodigoRegistro2 As Byte 'Con u s o Public CodigoSegmento As Long Public CodigoDesplazamiento As Long Public NumEprom As Integer, NumRam As
Public Eprom() As TEprom Integer
Public RAM() As TEprom Public Dato As Long Public DireccionEditar
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Label7.Caption = "Alejandro Montejo Rubio"
SSPanel4. Caption = " I '
End Sub
private Sub SSCommand2-Click0 Label6. Caption = " "
Label7.Caption = "Diplomado Miguel Angel Ruíz Sanchez. I' Label8 .Caption = " "
SSPanel4.Caption = I"'
End Sub
Private Sub SSCommand3-Click0 Label7.Caption = "Ejecutando"
Hide Form2. Show
Unload Portada End Sub
Private Sub SSCommand4-Click0 Hide End End Sub
End Sub Private Sub SSPanel4-ClickO
Private Sub Timerl-Timer0 Dim contador As Integer While contador < 4000
Wend contador = contador + 1
SSPanell.Vislble = False SSPanel3.Visible = True
End Sub
Public DigitosHex As Integer Public Registros ( O Tc. 19) As String Public RegistroActual As Integer Public Direccionamiento As Integer Public NumByteMeter Public ListaDirecclonamiento(1 To 2) As String 'Nueva modificación del 11 de mayo de 1997 Public MaximoCodlgo Public CodlgoOperacion As Byte Public ModoDireccionamiento As Byte Public Registro1 As Byte Public Registro2 As Byte Public DatoByte As Long Public DatoWord As Long Public Direccion As Long Public Operacion(100) As TInformacionOperaciones Public Edicion As Long Public BanderaRegistro AS Boolean Public CambioAdelante As Integer Public CambioAtras As Integer Public UltimoValor As Integer Public banderacambios As Boolean Public SegDesensamblar As Long Public Origen AS String 'Orlgen de instrucclón Public Destino As TextBox 'destlno de instrucción Publlc Codigosdeerror(0 To 10) AS String ' Arreglo de errores Public Descod As TextBox ' Varibale que guarda el desplazamiento de código Public Sub Error(numer0 As Integer) End Sub
Alejandro Montejo Rubio 4
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Public Function BinHex$(num AS Long)
While num <> O cad$ = " "
If num Mod 16 < 10 Then
16) 1 + cad$ cad$ = LTrim(Str$(num Mod
Else Select Case num Mod 16
Case 10
Case 11
Case 12
Case 13
Case 14
Case 15
cads = "A" + cad$
cad$ = "B" + cad$
cad$ = "C" + cad$
cad$ = "D" + cad$
cad$ = "E" + cad$
cad$ = "F" + cad$ End Select
End If num = num \ 16
Wend If cad$ = " I ' Then cads = " o " BinHex$ = cad$
End Function
Public Sub GuardarArchlvoO Dim Direccion As Long Dim Tamaño As Integer On Error GoTo Finalizar Abrirmem.DialogTitle = "Guardar
Abrirmem.ShowSave Open AbrirMemoria.filename For
Output As 1 Direccion = O Do
Direccion =
If Direccion >= 1023 Then Exit Do
memoria ''
Forml.ObtenDireccionNoCero(Direccion)
Print #1, Direccion dux& = Direccion
Forml.ObtenTamaño(aux&) Tamaño =
Print #1, Tamaño For i = 1 To Tamaño Print #1, Memoria(Direcci0n + i -
1 ) Next i Direccion = Direccion + Tamaño
Loop Until Direccion >= 1023 Close 1
Finalizar: End Sub
Public Sub LeeDatosOperacionO
" \ M i c r o I n s t r u c c i o n e s . I s t " For Input As 1
Open App.Path +
i = O While Not EOF(1)
W i t h Operacion (i) Input #1, .mnemonic0 Input #1, aux If Mid$(aux, 1, 1) = "V"
Then
Then
Else
End If If Mid$(aux, 2, 1 ) = "V"
.ByteReg2 = True
.ByteRegl = True
.ByteRegl = False
Else
Then
Then
Then
Then
Then
End If If Mid$ (dux, 3, 1) = "V"
.ByteReg2 = False
.Dato8 = True
.Dato8 = False Else
End If If Mid$(aux, 4, 1) = "V"
Else .DatoHi = True
End If .DatoHi = False
If MidS (dux, 5, 1) = "V"
.DatoLo = True Else
.DatoLo = False End If If Mid$(au.c, 6, 1 ) = "V"
.OffHi = True
.OffHi = False Else
End If If Mid$ (aux, 7, 1) = "V"
.OffLo = True
.OffLo = False Else
End If Input #1, Mic For k = 1 To Mic
Next k Input #1, .Micro(k)
End With i = i + l
Wend MaximoCodigo = i Close (1)
End Sub Public Sub AbrirArchivoO
Dim Direccion As Long Dlm Tamaño As Integer Dim Dato As Byte On Error GoTo Finalizar AbrirMemoria.ShowOpen Open AbrlrMemoria.filename For
On Error GoTo Finalizarcerrar While Not EOF(1)
Input As 1
Input #1, Direccion, Tamaño For i = 1 To Tamaño
Input #1, Dato Memoria(Direccion + i - 1 )
= Dato
Wend Finalizarcerrar:
Close 1 Forml.HazDump
Next i
Finalizar: End Sub
Public Sub ValidaHexadecimal(KeyAscii As Integer, Objeto As TextBox)
If KeyAscii = 8 Then 0bjeto.Text = "O" +
KeyAscii = O 0bjeto.SelStart = 4
Caracter = Chr(KeyAscii1 If (Caracter >= "O" And
Mid(Objeto.Text, 1, 3)
Else
Caracter <= "9") Or (Caracter >= "A"
Alejandro Montejo Rubio 2
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
And Caracter <= "F") Or (Caracter >= "a" And Caracter <= "f") Then
Asc (Ucase (Caracter) ) KeyAscii =
cadena$ = " "
cadena$ = Mid(Objeto.Text, 2, 3) 0bjeto.Text = cadena$
Codigo CPU Interno VERSION 4.00 Begin VB.Form Forml
Backcolor = &HOOCOCOCO& Borderstyle = 1 'Fixed Single Caption = "CPU 8088" ClientHeight = 6690 ClientLeft = -210 ClientTop = 720 ClientWldth = 9510 Beginproperty Font iOBE35203-8F91-
Name = "Courier" Slze = 9.15
Weight Charset = o Underline = O 'False Italic = O 'False Strikethrough = O 'False
llCE-9DE3-00AA004BB851;
= 400
Endproperty Height = 7380 HelpContextID = 3 Left = -270 LlnkTopic = "Forml" MaxButton = O 'False MinButton = O 'False ScaleHeight = 6690 Scalewidth = 9510 TOP Visible Width = 9630 Windowstate = 2 'Maximized Begin VB.TextBox DE
= 90 = O 'False
Backcolor = &H00000000& Beginproperty Font iOBE35203-
8F91-llCE-9DE3-00AAOO4BB85l)
Serif" Name = "MS Sans
Size Charset
= 8.25 = o
Weight Underline
= 700
Italic = O 'False
Strikethrough = O 'False = O 'False
EndProperty Forecolor = &HOOFFFFFF& Height Left
= 285 = 4680
MaxLength TabIndex
= 9
Text = 83 = "0000: 0000"
Width = 1095 TOP = 2280
End Begin VB.CommandButton Command3
Caption
Beginproperty Font (OBE35203-
- -
"Entrar-Dato-Mod"
8F91-llCE-9DE3-00AAOO4BB85l]
Serlf" Name = "MS Sans
Size = 8.25 Charset = o Welght = 400 Underline = O 'False Italic = O 'False Strikethrough = O 'False
Endproperty
0bjeto.SelStart = 4 Else
End If KeyAscii = O
End If End Sub
Height HelpContextID = Left TabIndex TOP WhatsThisHelpID = Width
- -
- - - - - -
- -
End Begin VB.TextBox 12
Height Left TabIndex Text TOP Visible Width
- - - - - - - - - - - - - -
End Begin VB.TextBox Ll
Height Left TabIndex Text TOP Visible Width
- - - - - - - - - - - - - -
End
255 2 6120 79 6600 1 1575
285 8520 78
5160 "Textl"
255 O 'False
285 8160 71
5160 "Textl"
O 'False 375
Begin VB.CommandButton Command2 Caption
Beginproperty Font iOBE35203-
- -
"&Desensamblador"
8F91-llCE-9DE3-0OAAOO4BB85l) Name = "MS Sans
Serlf" Size Charset Weight Underline Italic Strikethrough
8.25 O 400 O 'False O 'False O 'False
Endproperty Height Left TabIndex = 76
Width
= 255 = 2640
TOP = 7080 = 1335
End Begin VB.TextBox intervalo
Enabled Beginproperty Font (OBE35203-
= O 'False
8F91-llCE-9DE3-00AAO04BB851] Name = "MS Sans
Size = 8.25 Charset Weiqht
= = o = 400
Underline Italic
= O 'False
Strikethrough = O 'False = O 'False
Serif"
Height Endproperty
Left = 4320 MaxLength = 5 TabIndex = 73 Text = " 1 0 0 0 " TOP Width
= 285
= 6600 = 495
End Begin VB.CheckBox Checkl
Caption = "Checkl"
Alejandro Montejo Rubio 3
Name
Charset Size
Weight Underline Italic Strlkethrough
Endproperty Height Left Tablndex TOP Width
Serif"
- - - - - - - - - -
End Begin VB.TextBox MAR
Enabled Height - - Left Tablndex Text Top Visible Width
- -
- - - - - - - - - - - -
End Begin VB.TextBox T12
Helght - - Left TabIndex Text Top Visible Width
- - - - - - - - - - - -
End Begin VB.TextBox T2
Height - - Left TabIndex Text -
TOP Visible Width
- - - - - - - - - - -
End Begin VB.TextBox T1
Enabled Height - - Left TabIndex Text TOP Visible Width
- -
- - - - - - - - - - - -
End Begin VB.TextBox AL
BackColor - -
270 Left = 2880 TabIndex = 71 Top = 6585 Width = 255
End Begin VB.CommandButton Command1
Caption = "&Reset" Beginproperty Font {OBE35203-
8F51-llCE-9DE3-00AAOO4BB851) = "MS Sans
= 8.25 = o = 400 = O 'False = O 'False = O 'False
255 1680 64 6000 8 5 5
O 'False 285 8160 63 "MAR" 4920 O 'False 615
285 87 60 62 "T12" 4920 O 'False 615
495 9360 61 "T2 '' 4920 O 'False 615
O 'False 285 8760 60 "T1" 5160 O 'False 615
&H00000000& BeglnProperty Font iOBE35203-
8F91-llCE-5DE3-00AAOO4BB851) Name = "MS Sans
Size Charset
= 8.25
Weight = o
Underline = 400
Italic = O 'False
Strikethrough = O 'False = O 'False
Endproperty
Serif"
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Forecolor = &HOOOOFFOO& Height = 285 Left = 6840 TabIndex Text
= 55 = " 0 0 "
Width = 375 Top = 1200
End Begin VB.TextBox BL
BackColor = &H00000000& Beginproperty Font iOBE35203-
8F91-llCE-5DE3-00AAOO4BB851)
Serif" Name = "MS Sans
Size Charset
= 8.25
Weight = o = 400
Underline Italic
= O 'False
Strlkethrough = 0 'False = O 'False
Endproperty ForeColor = &HOOOOFFOO& Height = 285 Left = 6840 TabIndex = 54 Text = 11 0 0 I T
TOP Width
= 1560 = 375
End Begin VB.TextBox CL
BackColor = &H00000000& Beginproperty Font (0BE35203-
8F91-1lCE-5DE3-00AAOO4BB851] Name = "MS Sans
Charset Size = 8.25
Weight Underline = O 'False Italic = O 'False Strikethrough = O 'False
Serif"
= o = 400
Endproperty Forecolor = &HOOOOFFOO& Height = 285 Left = 6840 Tablndex Text
= 53 = "00"
TOP Wldth
= 1920 = 315
End Begin VB.TextBox DL
BackColor = &H00000000& Beginproperty Font (OBE35203-
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans
Charset Size = 8.25
Weight = 400 Underline = O 'False Italic = O 'False Strikethrough = O 'False
Serif"
= o
Endproperty Forecolor = &HOOOOFFOO& Height = 285 Left = 6840 Tablndex = 52 Text = "00"
Width TOP = 2280
= 375 End Begin VB.TextBox AH
BackColor = &H00000000& Beginproperty Font iOBE35203-
8F91-llCE-9DE3-00AAO04BB8511
2
Name = "MS Sans
Size Charset
= 8.25 = o
Weight Underline
= 400
Italic = O 'False = O 'False
Strikethrough = O 'False Endproperty ForeColor = &HOOOOFFOO& Height Left TabIndex Text TOP Width
Serif"
= 285 = 6480 = 47 = "00" = 1200 = 375
End Begin VB.TextBox BH
Backcolor &H00000000& Beginproperty Font (OBE35203-
8F91-llCE-5DE3-00AAOO4BB851) Name = "MS Sans
Size Charset Weight = 400 Underline = O 'False Italic = O 'False Strikethrough = O 'False
Serif" = 8.25 = o
Endproperty ForeColor = &HOOOOFFOO& Height = 285 Left = 6480 TabIndex = 46 Text = I. 0 0 11
TOP Width
= 1560 = 315
End Begin VB.TextBox CH
BackColor = &H00000000& Beginproperty Font (OBE35203-
8F51-llCE-5DE3-00AAO04BB851)
Serif" Name = "MS Sans
Size = 8.25 Charset = o Weight = 400 Underline = O 'False Italic = O 'False Strikethrough = O 'False
Endproperty ForeColor = &HOOOOFFOO& Height Left
= 285
TabIndex = 6480
Text = 45 = "00"
Width TOP = 1520
= 375 End Begin VB.TextBox DH
Backcolor = &H00000000& Beginproperty Font (OBE35203-
8F51-llCE-5DE3-00AAO04BB851) Name
Charset Size = 8.25
= o Weight Underline
= 400
Italic = O 'False
Strikethrough = O 'False = O 'False
Endproperty
Height Forecolor = &HOOOOFFOO&
Left = 6480 TabIndex = 44
Serif" = "MS Sans
= 285
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Text = "00"
Width TOP = 2280
= 315 End Begin VB.TextBox Nuevovalor
BackColor = &H00000000& Forecolor = &HOOOOFFOO& Height = 285 Left = 7080 MaxLength = 2 TabIndex = 43 Text TOP Width
= I I 0 0 11
= 6120 = 455
End Begin VB.TextBox DesplazamientoDump
BackColor = &H00000000& Beginproperty FQnt (OBE35203-
8F51-i~CE-5DE3-00AAO04BB851)
Serif" Name = "MS Sans
Size Charset
= 8.25
Weight = o
Underline = 400
Italic = O 'False
Strikethrough = O 'False = O 'False
Endproperty Forecolor = &HOOOOFFOO& Height Left
= 285
MaxLength = 5880 = 4
TabIndex Text
= 38 = "0000"
Width Top = 6120
= 615 End Begin VB.TextBox SegmentoDump
Backcolor = &H00000000& Peginproperty Font (OBE35203-
8F51-llCE-9DE3-00AA004BB851) Name = "MS Sans
Size Charset
= 8.25 = o
Weight = 400 Underline Italic
= O 'False
Strikethrough = O 'False = O 'False
Endproperty ForeColor = &HOOOOFFOO& Height = 285 Left = 3560 MaxLength = 4 TabIndex = 37 Text = "0000" TOP Width
Serif"
= 6120 = 615
End Begin VB. TextRox Piimp
BackColor = &HOOFF0000& Forecolor = &HOOFFFFOO& Height = 3015 Left = 2880 Locked = -1 'True MultiLine = -1 'True TabIndex = 36 Top = 3120 Width = 4655
End Begin VB. Frame Frame1
BackColor = &HOOOOOOFF& Caption
Beginproperty Font (OBE35203- memoria"
= "Mapa de
8F~1-llCE-~DE3-00AA004BB851)
3
Name = "MS Sans
Size Charset
= 8.25
Weight = o = 400
Underline Italic
= O 'False
Strikethrough = O 'False = O 'False
Height Endproperty
Left TabIndex = 34
Width = 3135 Begin VB.TextBox Eproml
Serif"
= 6135 = 7920
TOP = 1320
- -
&HOOFFFFOO& BackColor
Beginproperty Font (OBE35203-
Name = "MS
Size = 8.25 Charset Weight
= o = 700
Underline = o Italic = o Strikethrough = O
8F91-llCE-9DE3-00AAO04BB851)
Sans Serif"
' False
' False
' False Endproperty ForeColor
Height = 1155 Left = 15 Locked = -1 'True MultiLine = -1 'True TabIndex = 35 Text
- -
&H00000000&
- -
"cpuint-l. frx": O000 TOP = 240 Width
End Begin VB.Labe1 Label35
= 3105
Appearance = O 'Flat Backcolor
Caption = "ES estra
Beginproperty Font (OBE35203-
- -
&HOOOOFFOO&
OCOOH - OFFFH"
8F91-llCE-9DE3-00AAO04BB851) Name
Size Charset
= 8.25 = o
Weiqht = 700 Underline = o Italic = o Strikethrough = O
Sans Serlf" = "MS
' False
' False
' False Endproperty Forecolor
Height = 255 Left = 240 TabIndex Top Width
- -
&H80000008&
= 75 = 4680 = 2655
End Begin VB.Labe1 Label30
Appearance = O 'Flat Backcolor - -
&HOOOOFFOO&
Simulador del Sistema Minimo Inte l 8088 Proyecto Terminal
Caption = "SS pila
Beginproperty Font (OBE35203-
N ame = "MS
Size Charset
= 8.25
Weight = o
Underline = 700 = o
Italic = o Strikethrough = O
0800H - OBFFH"
8F91-llCE-9DE3-00AAO04BB851)
Sans Serif"
I False
' False
' False Endproperty Forecolor
Height = 255 Left = 240 TabIndex = 69
Width TOP = 4920
= 2655
- -
&H80002308&
End Begin VB.Label Label36
Alignment = 2 'Center Backcolor
Borderstyle = 1 'Fixed
Caption = "MEMORIA
Beginproperty Font (OBE35203-
Name = "MS
Size = 13.5 Charset = o Welght = 700 Underline = o Italic = o Strikethrough = O
- -
&HOOOOOOFF&
Single
LIBRE"
8F91-llCE-9DE3-00AA004BB851)
Sans Serif"
'False
' False
'False Endproperty Height Left
= 495
TabIndex = 120 = 82
Top = 2640 Width = 2625
End Begin VB.Label Label32
Appearance = O 'Flat BackColor
Caption = "CS código
Beginpropert\: Font (OBE35203-
- -
&HOOOOFFOO&
OOOOH - 03FFH"
8F91-ilCE-9DE3-00AAO04BB851)
Sans Serif" Name
Size Charset Weight Underline
Italic
Strikethrough
'False
'False
' False Endproperty Forecolor - -
&H80000008& Height - -
Left - -
= 8.25 = o = 700 = o
= o
= o
255 240
Alejandro Montejo Rubio 4
TabIndex TO? Width
= 70 = 5400 = 2775
End Begin VB.Labe1 Label29
Appearance = O 'Flat BackColor
Caption = "DS datos
Beginproperty Font (OBE35203-
- -
&HOOOOFFOO&
0400H - 07FFH"
8F91-llCE-9DE3-00AAO04BB851~ Name
Charset Size = 8.25
= o Weight = 100 Underline = o Italic = o Strikethrough = O
Sans Serif" = "MS
' False
' False
' False Endproperty Forecolor
Height Left
= 255
TabIndex = 240 = 68
Width = 2775
- -
&H80000008&
TOP = 5190
End Begin VB.Labe1 Label28
BackColor
Caption = "OO0OH
Beginproperty Font IOBE35203-
Name = "MS
Charset Size = 8.25
Weight = o = 700
Underline = o Italic = o Strikethrough = O
- -
&HOO@OFF@O&
Inicio de Ram"
8F91-llCE-9DE3-00AAO04BB851)
Sans Serif''
' False
' False
' False Endproperty Height Left TabIndex TOP Width
= 255 = 120 = 67 = 5790 = 2535
End Begin VB.Labe1 Label27
BackColor
Borderstyle = 1 'Fixed
Caption
Beginproperty Font (OBE35203-
Name = "MS
Charset Size = 8.25
Weight = o = 700
Underline = o Italic = o
- -
&HOOO@FFOO&
Single
MEMORIA RAM" = "FFFFH
8F91-llCE-9DE3-0OAAO04BB851)
Sans Serif"
' False
' False
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
' False Strikethrough = O
Endproperty Height Left TabIndex = 66 To? = 4380 Width = 3135
= 1725 = o
End End Begin VB.ComandButton ComandoAnima
Captlon = "&Anima" Beginproperty Font IOBE35203-
8F91-llCE-9DE3-00AA004BB851) Name = "MS Sans
Slze Charset
= 8.25
Welght = o
Underline = 400
Italic = O 'False = O 'False
Endproperty Strikethrough = O 'False
Height Left TabIndex To? Width
Serif"
= 255 = 1 6 8 0 = 33 = 6360 = 855
End Begin VB.Timer Anima
Enabled Interval
= O 'False
Left = 200 = 8760
TO? = 4920 End Begin VB.CommandButton Siguiente
Caption = "&Slguiente" SPginProperty Font (OBE35203-
8F91-1lCE-9DE3-00AAOO4BB851) Name = "MS Sans
Size Charset
= 8.25 = o
Weight Underline
= 400 = O 'False
Italic = O 'False Strikethrough = O 'False
Serif"
Endproperty Height = 255 Left = 1680 TabIndex = 31
Width = 855 TO? = 6720
End Begin VB.TextBox BusDatos
Alignment = 2 'Center BackColor = &HOOOOOOO0& Enabled EeginProperty Font (OBE35203-
= 0 'False
8F91-llCE-9DE3-00AAO04BB851] Name = "MS Sans
Size Charset
= 8.25
Weight = o
Underline = 400
Italic = O 'False
Strikethrough = 0 'False = 0 'False
Endproperty Forecolor Height
= &HO@OO@@FF&
Left = 285
TabIndex = 5040
Text = 30 = "0000"
Width = 615
Serif"
TOP = 1560
5
End Begin VB.TextBox BusDirecciones
BackColor = &H00000000& Enabled Beginproperty Font lOBE35203-
= O 'False
8F91-llCE-9DE3-00AAOO4BB85l) Name = "MS Sans
Size Charset Weight = 400 Underline = O 'False Italic Strikethrough = 0 'False
= O 'False
Endproperty Forecolor = &HOOOOOOFF& Height Left TabIndex = 28 Text = "00000"
Width = 615
Serlf" = 8.25 = o
= 285 = 5040
Top = 1 2 0 0
End Begin VB.TextBox DX
Backcolor = &HOOOOOOO0& Beginproperty Font iOBE35203-
8F91-llCE-9DE3-00AAO04BB851)
Serif" Name = "MS Sans
Size Charset
= 8.25
Weight = o = 400
Underline Italic
= O 'False = O 'False
Strikethrough = O 'False Endproperty Forecolor = &HOOOOFF00& Height = 285 Left TabIndex Text = " 0 0 0 0 "
Width
= 2160 = 26
TOP = 2400
End Begin VB.TextBox IP
= 615
BackColor = &H00000000& Beginproperty Font (OBE35203-
8F91-llCE-9DE3-00AAOO4BE851} Name = "MS Sans
Charset Size = 8.25
Welght = 400 Underline = O 'False Italic = O 'False Strikethrough = O 'False
Serlf"
= o
Endproperty Forecolor = &HOOOOFFOO& Helght Left
= 285 = 2160
MaxLength TabIndex
= 4
Text = 25 = " 0 0 0 0 "
Width = 615 TOP = 5640
End Begin VB.TextBox SP
Backcolor = &H00000000& Beginproperty Font (OBE35203-
8F91-llCE-9DE3-00AAO04EB851}
Serif" Name = "MS Sans
Size = 8.25 Charset = o Weight = 400 Underline = O 'False
Alejandro Montejo Rubio
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Itallc Strikethrough = 0 'False
= O 'False
Endproperty Forecolor = &HOOOOFFOO& Height = 285 Left TabIndex Text = " 0 0 0 0 " TOP Width
= 2160 = 23
= 5280 = 615
End Begin VB.TextBox ES
BackColor = &H00000000& Beginproperty Font lOBE35203-
8F91-11CE-9DE3-00AAO04BB851} Name = "MS Sans
Charset Size = 8.25
= o Weight Underline
= 400 = O 'False
Italic = O 'False Strikethrough = O 'False
Serif"
Endproperty Forecolor = &HOOOOFFOO& Height = 285 Left = 2160 TabIndex Text Top Width
= 21 = " 0 0 0 0 " = 4920 = 615
End Begin VB.TextBox SS
Backcolor = &H00000000& Beginproperty Font iOBE35203-
8F91-llCE-9DE3-00AAO04BB851}
Serif" Name = "MS Sans
Charset Size = 8.25
Weight = o = 400
Underline Italic
= O 'False = O 'False
Strikethrough = O 'False Endproperty Forecolor = &HOOOOFFOO& Height Left TabIndex = 1 9 Text = " 0 0 0 0 " Top = 4560 Width = 615
= 285 = 2160
End Begin VB.TextBox DS
Backcolor = &H00000000& Beginproperty Font (OBE35203-
8F91-llCE-9DE3-00AAO04BB851} N ame = "MS Sans
Size Charset
= 8.25
Weight = o
Underline = 400 = O 'False
Italic = O 'False Strikethrough = O 'False
Serif"
Endproperty Forecolor = &HOOOOFFOO& Height Left TabIndex Text
Width
= 285 = 2160 = 11 = " 0 0 0 0 "
= 615 TOP = 4200
End Begin VB.TextBox CS
BackColor = &HOO000000&
6
8F91-llCE-9DE3-00AAO04BB651} BeginProperty Font (OBE35203-
Name = "MS Sans
Size = 8.25 Charset = o Weight = 400 Underline Italic
= O 'False
Strikethrough = O 'False = O 'False
Endproperty Forecolor = &HOOOOFFOO& Height Left TabIndex Text
Width
Serif"
= 265 = 2160 = 15 == " 0 0 0 0 "
= 615 TOP = 3640
End Begin VB.TextBox BP
Backcolor = &H00000000& BeglnProperty Font iOBE35203-
8F91-llCE-9DE3-00AAO04BB851}
Serif" Name = "MS Sans
Size Charset
= 8.25
Weight = o = 400
Underline Italic
= O 'False = O 'False
Strikethrough = O 'False Endproperty Forecolor = &HOOOOFFOO& Height = 285 Left = 2160 TabIndex = 13 Text = " 0 0 0 0 "
Width TOP = 3480
End Begln VB.TextBox DI
= 615
Backcolor = &H00000000& Beginproperty Font (OBE35203-
8F91-llCE-9DE3-00AAO04BB851) Name
Size Charset Weight = 400 Underline = O 'False Italic = O 'False Strikethrough = 0 'False
Serif" = "MS Sans
= 6.25 = o
Endproperty Forecolor = &HOOOOFFOO& Height Left TabIndex Text TOP Width
= 285 = 2160 = 11 = " 0 0 0 0 " = 3120 = 615
End Begin VB.TextBox SI
Backcolor = &H00000000& Beginproperty Font (OBE35203-
8F91-llCE-9DE3-00AAOO4BB851} Name = "MS Sans
Charset Size = 8.25
= o Weight Underline
= 4 0 0 = O 'False
Italic = O 'False Strikethrough = O 'False
Serif"
Endproperty Forecolor = &HOOOOFFOO& Height = 285
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Left = 2160 TabIndex = 9 Text = " 0 0 0 0 "
Width TOP = 2760
End Begln VB.TextBox CX
= 615
Backcolor = &H00000000& Beginproperty Font (OBE35203-
8F91-llCE-9DE3-00AAO04BB651) Name
Charset Size = 6.25
Weight = 400 Underline = O 'False Italic Strikethrough = O 'False
= O 'False
Endproperty ForeColor = &HOOOOFFOO& Height = 265 Left TabIndex Text TOP Width
Serif" = "MS Sans
= o
= 2 1 6 0 = 6 = " 0 0 0 0 " = 2040 = 615
End Begin VB.TextBox BX
Backcolor = &HOOOOOOOO& Beginproperty Font iOBE35203-
8F91-llCE-9DE3-00AAO04BB651) Name = "MS Sans
Charset Size = 8.25
Weight = o = 400
Underline Italic
= O 'False = O 'False
Strikethrough = O 'False Endproperty Forecolor = &HOOOOFFOO& Height Left TabIndex = 4 Text = " 0 0 0 0 " TOP Width
Serif"
= 285 = 2160
= 1660 = 615
End Begin VB.TextBox AX
BackColor = &H00000000& Beginproperty Font (OBE35203-
8F91-llCE-9DE3-00AA004BB6511
Serif" Name = "MS Sans
Size Charset
= 8.25
Weight = o = 400
Underline Italic
= O 'False
Strikethrough = O 'False = O 'False
Endproperty Forecolor = &HOOOOFFOO& Helght Left TabIndex Text
Width
= 265 = 2160 = 2 = " 0 0 0 0 "
End = 615
Begin VB.CommandButton fin
TOP = 1320
Caption = "Fi&n" Beginproperty Font (OBE35203-
8F91-llCE-9DE3-00AAO04BB851) Name
Size = 8.25 Serlf"
= "MS Sans
7
Charset Weight
= o = 400
Underline Italic
= O 'False = 0 'False
Strikethrough = O 'False Endproperty Height = 255 Left = 1680 TabIndex = o Width TOP = 7080
= 855 End Begin VB.PictureBox SSPanell
AutoSize = -1 'True Height 7 6375 Left = 7800 ScaleHeight = 6315 Scalewidth = 3330 TabIndex = 85
Width TOP = 1200
= 3390 End Begin VB.PictureBox Proceso
Height = 255 Left = 4200 ScaleHeight = 195 Scalewidth = 3435 TabIndex TOP
= 81
Width = 7200 = 3495
End Begin VB.PictureBox AbrirMemoria
Height = 480 Left = 9840 ScaleHeight = 420 Scalewidth = 1140 TabIndex = 86
Width = 1200 TOP = 1800
End Begln VB.Labe1 Label17
Borderstyle = 1 'Fixed
Caption = "Segmento" Beginproperty Font iOBE35203-
Single
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans
lse lse lse
Serif" Size Charset
= 8.25
Weight = o
Underline = 400
Italic = O 'Fa
Strikethrough = O 'Fa = O 'Fa
EndProperty Height = 285 Left = 2880 TabIndex = 40
Width = 1095 TOP = 6120
End Begin VB.Labe1 Label38
Borderstyle = 1 'Fixed Slngle
Captlon = "Dirección
BeglnProperty Font iOBE35203- Edltar"
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans
Charset Size = 8.25
Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = O 'False
Serif"
= o
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Endproperty Height Left TabIndex = 84 Top Width
= 270 = 3000
= 2280 = 1455
End Begin VB.Labe1 Label37
Borderstyle = 1 'Fixed
BeginProperty Font (OBE35203- Single
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans
Size Charset Welght Underline = O 'False Italic = O 'False Strikethrough = 0 'False
Serif" = 8.25 = o = 400
Height Endproperty
Left = 255 = 4200
TabIndex = 8 0 TOP = 6960 Width = 3495
End Begin VB.Labe1 Label34
Alignment = 2 'Center Borderstyle = 1 'Fixed
Caption Beginproperty Font (OBE35203-
= "Intervalo" Single
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans
Size Charset
= 8.25
Weight = o = 400
Underline = O 'False Italic Strikethrough = O 'False
= O 'False
Endproperty Height Left TabIndex
Width
Serif"
= 300 = 4920 = 74
= 1095 TOP = 6600
End Begin VB.Labe1 Label33
Backstyle = o Borderstyle = 1 'Fixed
Caption = "A Tiempo" BeglnProperty Font iOBE35203-
'Transparent
Single
8F91-llSE-9DE3-00AAO04BB851] Name
Size = 8.25 Charset = o Weight = 400 Underline = O 'False Italic = O 'False Strikethrough = O 'False
Serif" = "MS Sans
EndProperty Height = 270 Left = 3240 TabIndex Top Width
= 72 = 6585 = 855
End Begin VB.Labe1 Ayudarapida
Alignment = 2 'Center BackColor = &HOOCOCOCO&
8
Borderstyle = 1 'Fixed
Caption = "Labe127" Beginproperty Font (OBE35203-
Slngle
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Serif" Size Charset
= 8.25
Weight = o = 400
Underline Italic
= O 'False = O 'False
Strikethrough = O 'False Endproperty Forecolor = &H00000000& Height Left
= 255
TabIndex = 1560 = 65 = 7560
Wldth = 9615 TOP
End Begin VB.Label Label26
Alignment = 2 'Center Borderstyle = 1 'Fixed
Caption = MAL VI Beginproperty Font IOBE35203-
Single
8F91-llCE-9DE3-00AAO04BB8511 Name = "MS Sans
Size = 8.25 Charset Weight
= o = 400
Underline Italic
= O 'False
Strikethrough = 0 'False = O 'False
Endproperty Height Left TabIndex = 59
Wldth
Serif"
= 285 = 7200
TOP = 1200
End Begin VB.Labe1 Label25
= 375
Alignment Borderstyle
= 2 'Center = 1 'Fixed
Caption = "BL" Beginproperty Font (OBE35203-
Single
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans
Size Charset Weight = 400 Underline = O 'False Italic = O 'False Strikethrough = O 'False
Serif" = 8.25 = o
Height EndProperty
Left = 7200 TabIndex = 58 TOP = 1560 Width = 375
= 285
End Begin VB.Label Label24
Alignment = 2 'Center Borderstyle = 1 ' Flxed
Caption Beginproperty Font íOBE35203-
= "CL" Single
8F91-llCE-9DE3-OOAAO04BB851) Name = "MS Sans
Size Charset Weight
Serif" = 8.25 = o = 400
Alejandro Montejo Rubio
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Underline = O 'False Italic Strikethrough = O 'False
= O 'False
Endproperty Height = 285 Left = 7200 TabIndex TOP
= 57
Width = 1920 = 315
End Begin VB.Labe1 Label23
Alignment Borderstyle
= 2 'Center = 1 'Fixed
Caption BeglnProperty Font (OBE35203-
= "DL" Single
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans
Size = 8.25 Charset = o Weight Underllne
= 400 = O 'False
Italic Strikethrough = O 'False
= O 'False
Endproperty Height = 285 Left = 7200 TabIndex = 56
Width TOP = 2280
Serif"
= 375 End Begin VB.Labe1 Label22
Alignment = 2 'Center QorderStyle = 1 'Fixed
Caption = "AH" BeglnProperty Font (OBE35203-
Single
8F91-llCE-9DE3-00AA004BB851) Name = "MS Sans
Size Charset
= 8.25 = o
Weight Underline
= 400
Italic = O 'False = O 'False
Strikethrough = O 'False
Height Endproperty
= 285 Left = 6120 TabIndex TOP
= 51
Width = 1200 = 315
Serif"
End Begin VB.Label Label21
4lignment = 2 'Center Borderstyle = 1 'Fixed
Captlon = "BH" Beginproperty Font íOBE35203-
Single
8F91-1lCE-9DE3-00AAOO4BB851) Name = "MS Sans
Size Charset
= 8.25
Weight = o
Underline = 400
Italic = O 'False = O 'False
Endproperty Strikethrough = O 'False
Height Left TabIndex TOP Width
Serif"
= 285 = 6120 = 50 = 1560 = 315
End
9
Begin VB.Labe1 Label20 Alignment = 2 'Center Borderstyle = 1 'Fixed
Caption = "CH" BeglnProperty Font lOBE35203-
Single
8F91-llCE-9DE3-00AAO04BB8511 Name = "MS Sans
Size = 8.25 Charset Weight
= o
Underline = 400 = O 'False
Italic Strikethrough = O 'False
= O 'False
Height Endproperty
Left TabIndex TOP Width
Serif"
= 285 = 6120 = 49 = 1920 = 375
End Begln VB.Labe1 Label19
Alignment Borderstyle
= 2 'Center = 1 'Fixed
Caption BeginProperty Font (OBE35203-
= " DH" Single
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans
Charset Size = 8.25
Weight = 400 Underline Italic
= 0 'False = O 'False
Strikethrough = O 'False
Height Endproperty
Left = 6120 TabIndex = 48
Width
Serif"
= o
= 285
TOP = 2280 = 375
End Begin VB.Label text19
Alignment = 2 'Center Borderstyle = 1 'Fixed
Caption = "Valor" BeginProperty Font (OBE35203-
Single
8F91-llCE-9DE3-00AAO04BB851] Name
Size = 8.25
Weight Charset = o
= 400 Underline Itallc
= 0 'False
Strikethrough = O 'False = O 'False
EndProperty Height = 270 Left = 6480 TabIndex TOP Width
Serlf" = "MS Sans
= 42 = 6120 = 615
End Begin VB.Labe1 Label18
Alignment = 2 'Center Backcolor = &HOOCOCOCO& Borderstyle = 1 'Fixed
Caption BeginProperty Font lOBE35203-
Single = "Dump"
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans
Serif"
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Size = 8.25 Charset = o Weight Underline
= 400
Italic = O 'False = O 'False
Strlkethrough = 0 'False Endproperty ForeColor = &H00000000& Height = 255 Left = 3000 TabIndex = 41
Width TOP = 2640
= 4815 End Begin VB.Labe1 Label16
Single
"Desplazamiento"
Borderstyle = 1 'Fixed
Caption - -
BeginProperty Font (OBE35203- 8F91-llCE-9DE3-00AA004BB851)
Serif" Name = "MS Sans
Size Charset Weight Underline = O 'False Italic = O 'False Strlkethrough = O 'False
= 8.25 = o = 400
EndProperty Height = 285 Left = 4680 TabIndex = 39 TOP Width
= 6120 = 1215
End Begin VB.Labe1 Estado
Alignment = 2 'Center Backstyle = o Borderstyle = 1 'Fixed
Caption = "CICLO DE
BeginProperty Font iOBE35203-
'Transparent
Single
FECH"
8F91-llCE-9DE3-00AAO04BB851] Name = "MS Sans
Slze = 8.25 Charset = o Weight Underline
= 400
Italic = O 'False
Strikethrough = O 'False = O 'False
Serif"
Endproperty qeight Left TabIndex = 32
Wldth
= 255 = 3000
TOP = 1920
End Begin VB.Labe1 Label15
= 3015
Borderstyle = 1 'Fixed
Captlon = "Bus Datos" BeginProperty Font lOBE35203-
Single
8F91-llCE-9DE3-00AAO04BB851) Name
Size = 8.25 Charset Weight = 400
= o
Underline Italic
= O 'False
Strikethrough = O 'False = O 'False
Endproperty
Serif" = "MS Sans
10
Height Left TabIndex Top Width
= 270 = 3000 = 29 = 1560 = 1935
End Begin VB.Labe1 Label14
Borderstyle = 1 'Fixed
Caption = "Bus
Beginproperty Font (OBE35203-
Single
Direcclones"
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans
Size Charset Weight = 400 Underline = O 'False Italic = O 'False Strikethrough = O 'False
Serlf" = 8.25 = o
Height Endproperty
Left = 3000 TabIndex = 21
Width
= 285
TOP = 1200 = 1935
End Begin VB.Labe1 Label13
BackColor = &HOOCOCOCO& Borderstyle = 1 'Fixed
Caption Beginproperty Font (OBE35203-
Single = 11 I I8
8F91-llCE-9DE3-00AAOO4BB851) Name = "MS Sans
Charset Size = 8.25
Welght Underline = O 'False Italic = O 'False Strikethrough = O 'False
Serif"
= o = 400
EndProperty Height Left TabIndex
Width
= 285 = 1680 = 24
= 375 TOP = 5640
End Begin VB.Labe1 Label12
Borderstyle = 1 'Fixed
Caption Beginproperty Font (OBE35203-
= "SP" Single
8F91-llCE-9DE3-00AAO04BB851) Name
Size Charset Weight = 400 Underline = O 'False Italic = O 'False Strikethrough = O 'False
Serif" = "MS Sans
= 8.25 = o
Endproperty Helght = 285 Left = 1680 TabIndex = 22
Width TOP = 5280
End Begin VB.Labe1 Label11
= 3 1 5
Borderstyle = 1 'Fixed
Caption = "ES" Single
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
8F91-llCE-9DE3-00AA004BB851) Beginproperty Font (OBE35203-
Serif" Name = "MS Sans
Size Charset Weight = 400 Underline = O 'False Italic = O 'False Strikethrough = O 'False
= 8.25 = o
Endproperty Height T,ef t 1 abIndex Top Wldth
= 285 = 1680 = 20 = 4920 = 315
End Begin VB.Labe1 Label10
Borderstyle = 1 Fixed
Caption Beginproperty Font (OBE35203-
= "SS" Single
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans
Slze = 8.25 Charset = o Weight = 400 Underline = O 'False Italic = O 'False Strikethrough = O 'False
Serif"
Endproperty Height Left 1 dbIndex = 18
Width
= 285 = 1680
TOP = 4560
End Begin VB.Labe1 Label9
= 375
Borderstyle = 1 'Fixed
Caption Beginproperty Font (OBE35203-
= "DS Single
8F91-llCE-9DE3-00AAO04BB851) Name
Size = 8.25 Charset Welght Underline = O 'False Italic = O 'False Strikethrough = O 'False
Serif" = "MS Sans
= o = 400
Endproperty Height = 285 Left = 1680 TdbIndex TOP
= 16
Width = 4200 = 315
End Begin VB.Labe1 Label8
Borderstyle = 1 'Fixed
Caption = * T C S "
Beginproperty Font (OBE35203-
Single
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans
Size = 8.25 Charset = o Weight = 400 Underllne = O 'False
Strlkethrough = O 'False Italic = O 'False
Serif"
Endproperty Height Left
= 285 = 1680
11
TabIndex = 14
Width TOP = 3840
= 375 End Begin VB.Labe1 Label7
Borderstyle = 1 'Fixed
Caption = "BP" Beginproperty Font (OBE35203-
Single
8F91-llCE-9DE3-00AAO04BB851} Name = "MS Sans
Charset Size = 8.25
Weight = 400 Underline = O 'False Italic = O 'False Strikethrough = O 'False
Serif"
= O
Endproperty Height Left TabIndex = 12
Width = 375
= 285 = 1680
TOP = 3480
End Begin VB.Labe1 Label6
Borderstyle = 1 Fixed
Caption = "DI" Beginproperty Font (OBE35203-
Single
8F91-llCE-9DE3-OOAA004BB851)
Serif" Name = "MS Sans
Size = 8.25 Charset = o Welght = 400 Underline Italic
= O 'False = O 'False
Strikethrough = O 'False Endproperty Height = 285 Left = 1680 TabIndex = 10 Top Width
= 3120 = 375
End Begin VB.Labe1 Label5
Borderstyle = 1 'Fixed
Caption = "SI" Beginproperty Font (OBE35203-
Single
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans
Size = 8.25 Charset = o Weight = 400 Underline = O 'False Italic = O 'False Strikethrough = O 'False
Serif"
Endproperty Height Left TabIndex
Width
= 285 = 1680 = 8
= 375 TOP = 2760
End Begin VB.Labe1 Label4
Borderstyle = 1 'Fixed
Caption = "DX" Beginproperty Font (OBE35203-
Single
8F91-llCE-9DE3-00AAOO4BB85l} Name
Size = 8.25 Serif"
= "MS Sans
Alejandro Montejo Rubio
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Charset Weight Underline = O 'False Italic = O 'False Strikethrough = O 'False
= o = 400
Endproperty Height = 285 Left = 1680 TabIndex = 7 TOP = 2400 Width = 375
End Beqin VB.Label Label3
EdrderStyle = 1 'Fixed
Caption = "CX" Beginproperty Font tOBE35203-
Sinqle
8F91-llCE-9DE3-00AA004BB851}
Serif" Name = "MS Sans
Size Charset
= 8.25
Weight = o = 400
Underline = O 'False Italic Strikethrough = O 'False
= O 'False
Endproperty Height = 285 Left = 1680 TabIndex TOP
= 5
Width = 2040 = 375
End Seqin VB.Labe1 La2;cl:
E,JrderStyle = 1 'Fixed
Caption = "BX" Beginproperty Font (OBE35203-
Single
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans
Size = 8.25 Charset = o Weight = 400 Underline = O 'False Italic = O 'False Strikethrough = O 'False
Serif"
Endproperty Helght Left
= 285
TabIndex = 1680 = 3
Width TOP = 1680
= 375 End Begin VB.Labe1 Labcll
Borderstyle = 1 'Fixed
Caption = "AX" Beginproperty Font (OBE35203-
Single
8F91-llCE-9DE3-00AAO04BB851) Name
Size = 8.25 Charset = o Weight = 400 Underllne = O 'False Italic Strikethrough = O 'False
= O 'False
Endproperty Height = 285 Left = 1680 TabIndex TOP
= 1
Width = 1320 = 315
Serlf" = "MS Sans
End Begin VB .Menu Arch: vo
12
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Caption = "&Archivo" Begin VB.Menu Abrir
End Begin VB.Menu Guardar
End Begin VB.Menu separadorl
End Begin VB.Menu Salir
End
Caption = "&Abrlr"
Caption = "&Guardar"
Caption - 11 - 11 -
Caption = "&Salir"
End End Attribute VB-Name = "Forml" Attribute VB-Creatable = False Attribute VB-Exposed = False
Public DireccionFisicaDump As Long Public Sub DecodificaCodigoO
Tamaño = 1 With Operacion(Codigo0peracion)
If .ByteRegl Then Registro1 =
Memoria ( (CLng ("&H" + MemorlaFisica$(cs.Text, ip.Text)) + Tamaño) Mod 1048575)
Tamaño = Tamaño + 1 End If If .OffH1 Then
aux = Memoria( (CLng("&H" + MemoriaFisica$(cs.Text, ip.Text) + Tamaño) Mod 1048575)
Direccion = aux * 256 ' corrimiento xx O0
Tamaño = Tamaño + 1
T1.Text = dux
End If If .OffLo Then
aux = Memorla( (CLng("&H" + MemoriaFislca$(cs.Text, ip.Text)) + Tamaño) Mod 1048575)
Direccion = Dlreccion + dux
Tamaño = Tamaño t 1 T2.Text = aux
End If If .ByteReg2 Then
' xxoo + yy= xxyy
Memoria ( ( CLng ( "&H" + Registro2 =
MemoriaFisica$(cs.Text, ip.Text)) t Tamaño) Mod 1048575)
Tamaño = Tamaño + 1 End If If .Dato8 Then
DatoByte = Memoria ( (CLng ("&H" + MemoriaFisica$(cs.Text, ip.Text)) + Tamaño) Mod 1048575)
Tamaño = Tamaño + 1 End If If .DatoHi Then
dux = Memoria( (CLng("&H" + MemoriaFisicaS (cs.Text, ip.Text)) + Tamaño) Mod 1048575)
DatoWord = aux * 2 5 6 Tamaño = Tamaño + 1
End If If .DatoLo Then
dux = Memoria( (CLng("&H" + MemoriaFisica$(cs.Text, ip.Text)) + Tamaño) Mod 1048575)
DatoWord = DatoWord + aux
Tamaño = Tamaño + 1 End If
End With IncrementaIP (Tamaño)
End Sub
Public Function DetectaOrigenyDestinoO Dim ExisteDestino As Boolean
ExisteDestino = False If
O p e r a c i o n ( C o d i g o O p e r a c i o n ) . B y t e R e g l Then
ExisteDestino = True Select Case Reglstrol
Case O
Case 1
Case 2
Case 3
Case 4
Case 5
Case 6
Case 7
Case 8
Case 9
Case 10
Case 11
Case 12
Case 13
Case 14
Case 15
Case 16
Case 17
Case 18
Case 19
Case 20
Case 21
Case 22
Case 23
End Select
Set Destino = AL
Set Destino = AH
Set Destino = BL
Set Destino = BH
Set Destlno = CL
Set Destlno = CH
Set Destlno = DL
Set Destlno = DH
Set Dpstino = ax
Set Destlno = bx
Set Destlno = cx
Set Destino = dx
Set Destino = si
Set Destino = di
Set Destino = bp
Set Destino = S S
Set Destino = es
Set Destino = ds
Set Destino = cs
Set Destino = T1
Set Destino = T2
Set Destino = T12
Set Destino = MAR
Set Destino = BusDatos
End If
If Operaclon(CodigoOperacion).ByteRegZ Then
Select Case Registro2 Case O
Case 1
Case 2
Origen = AL.Text
Origen = AH.Text
Alejandro Montejo Rubio 13
Case 3
Case 4
Case 5
Case 6
Case 7
Case 8
Case 9
Case 10
Case 11
Case 12
Case 13
Case 14
Case 15
Case 16
Case 17
Case 18
Case 19
Case 20
Case 21
Case 22
Case 23
Origen = BL.Text
Origen = BH.Text
Origen = CL.Text
Origen = CH.Text
Origen = DL. Text
Orlgen = DH.Text
Origen = ax.Text
Origen = bx.Text
Origen = cx.Text
Origen = dx.Text
Origen = si.Text
Origen = di.Text
Origen = bp.Text
Origen = ss.Text
Origen = es.Text
Origen = ds.Text
Origen = cs.Text
Origen = T1.Text
Origen = T2.Text
Origen = T12.Text
Origen = MAR.Text
Origen = BusDatos.Text End Select
End If If Operacion(CodigoOperaclon).DatoR
Then
si se usa BinHexO Origen = HexlDatoByte) 'checar
End If If
Operacion(CodigoOperacion).DatoHi Then If ExisteDestino Then
End If Orlgen = HexiDatoWord)
End If End Function
Public Sub EjecutaCodigo2() botones = vbRetryCance1 + vbCritical + vbDefaultButton1 ' Define los botones. Titulo = "Códigos de error" ' Define el titulo. Ayuda = "ayuda.hlp" ' Define el archivo
I de ayuda. numero = 1000 Dim dirreciondatos As Byte
For k = O To 30 Select Case
Operacion(CodigoOperacion).Micro(k)
Inicializa el segmento de datos Case "DATASEGMENT"
DATOS$ = "0400"
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Case "CODESEGMENT" Inlcializa el segmento de codigo
CODIGOS = "0000" Case "STACKSEGMENT" '
inicializa el segmento de pila STACK$ = "0800"
Case "EXTRASEGMENT" inicializa el segmento extra
Extra$ = "OCOO" Case "DETECTA" ' detecta el
origen y el destino
ala función detecta origen y detecta destino
valor del origen al destino
DetectaOrigenyDestino Llamada
Case "ASIGNA" ' aslgna el
Destino.Text = Orlgen Case "ASIGNA=MEMORIA" Asigna
el contenido de un registro al Segmento de datos
Segmento$ = DATOS$ T1.Text =
Hex(Val(Trim(T1.Text)))
Hex(Val(Trim(T2.Text))) T2.Text =
T12.Text = Trim(T1.Text + T2.Text) 'MAR.Text = Val ("&H" + T12.Text) 'valormem = Val ("&H" +
While Len(Desplazamiento$) < 4 Desplazamiento$ = T12.Text
Desplazamiento$ = "O" +
Trim(T12. Text) )
Desplazamiento$ Wend
DesplazdmientoS
Segmento$) * 16 + CLng("&H" + Desplazamiento$)
Memoria (DlreccionEdltar) = CLng("&H" + Left (Trlm(Origen), 2) )
+ 1) = CLng("&H" + Right(Trim(Origen),
SusDirecciones. Text = "O" +
DlreccionEditar = CLng ("&HI' +
If Len (Orlgen) = 4 Then
Memoria(DireccionEditar
2) ) Else
Memoria (DireccionEditar) = CLng ("&H.' + Left (Trim(Origen), 2) )
End If Case "MEMORIA=ASIGNA" 'Asigna el
contenido de una dirección de memoria del segmento 'de datos a un registro
Segmento$ = DATOS$
Hex ( V a l (Trim(T1 .Text) I )
Hex(Val(Trim(T2,Text)))
T2. Text)
T1.Text =
T2.Text =
T12.Text = Trlm(T1.Text +
DesplazamlentoS = T12.Text BusDirecciones. Text = "O" +
T12. Text Whlle
Len(BusDirecciones.Text) < 5
"O" + BusDirecclones .Text BusDirecciones.Text =
Wend 'BusDatos.Text = Origen
While Len(Desp1azamientoS) < 4 Desplazamiento$ = "O" +
Desplazamiento$ Wend
14
Segmento$) * 16 + CLng("&H" + Desplazamiento$)
Hex(Memoria(DireccionEditar) 1
DireccionEditar = CLng("&H" +
BusDatos .Text =
I Destino = BusDatos.Text ' MAR.Text =
Case "SUMA" ' Suma el contenido Memoria(Direcci0nEditar)
de dos registros de 8 y 16 bits
Origen) + Val ("&h" + Destino. Text) )
contenido de un registro entre el contenido de una direccón
' del segemnto de datos Segmento$ = DATOS$
T1.Text =
T2.Text =
T12.Text = Trim(T1.Text +
Desplazamiento$ = T12.Text BusDirecciones.Text = T12.Text
While Len(BusDirecciones.Text) < 5 BusDirecciones. Text = "O" +
Destino. Text = Hex (Val ("&h" +
Case "SUMAMEM" Suma el
Hex(Val(Trim(T1.Text)))
Hex(Val(Trim(T2.Text) 1 )
T2. Text)
BusDirecclones.Text Wend
DesplazamlentoS = "O" + While Len(Desp1azamientoS) < 4
DesplazamlentoS Wend
Segmento$) * 16 + CLng("&H" + DesplazamlentoS)
Val(Memoria(DireccionEditar))) Destino.Text) +
BusDatos.Text = Hex (Val (Memoria (DireccionEditar) ) )
DireccionEditar = CLng ("&H" +
Destino.Text = Hex (Val ("&h" +
Case "RESTA" 'Resta el contenido de un registro entre el contenido de otro registor
+ Destino.Text) - CLng ("&h" + Orlgen) ) Destino.Text = Hex(CLng("&h"
Case "RESTAMEM" 'Resta el contenido de un registro entre el contenido de una dirección de
datos ' del segemnto de
Segmento$ = DATOS$
Hex(Val(Trim(T1.Text)))
Hex (Val (Trim(T2 .Text) ) )
T2. Text)
T1.Text =
T2.Text =
T12.Text = Trim(T1.Text +
Desplazamiento$ = T12.Text BusDirecciones .Text = "O"
BusDatos.Text = Origen BusDirecciones.Text =
While
BusDirecciones .Text = "O"
Wend
+ T12.Text
T12 .Text
Len(BusD1recciones.Text) < 5
+ BusDirecciones.Text
While Len(Desp1azamientoS)
Desplazamiento$ = "O" + ¿ 4
Desplazamiento$
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Wend DlreccionEditar = CLng("&H"
+ Segmento$) * 16 + CLng("&H" + Desplazamiento$)
Memoria(DIRRECI0NEDITAR) Tl.Text =
+ Destino.Text) - Val(Memoria(DireccionEd1tar)))
Hex(Val(Memoria(D1reccionEditar)))
T12.Text = CLng("&h" + AL.Text)
Destino.Text = Hex(Va1 ("&h"
BusDatos.Text =
Case "MULTIPLICA"
' T! .Text = CLng ( " & I I "
Tl . Text = CLng ("&h"
ax.Text =
+ CL.T"ut)
+ Destino. Text)
Hex(Val("&h" + Tl2.Text) * Val("&h" + TI. Text) )
Case "MULTIPLICAMEM" ' Multiplica el contenido del registro AL por el contenido de una dirección
' del segmento de datos de 8 blts, y el producto lo respalda en el registro AX Segmento$ = DATOS$
Hex (Val (Trim (Tl. Text) ) ) T1.Text =
Hex (Val (Trim (T2. Text) ) ) T2.Text =
T2. Text) T12.Text = Trim(T1.Text +
Desplazamiento$ = T12.Text BusDirecciones.Text =
While T12. Text
Len(BusDirecciones.Text) ¿ 5
+ BusDirecciones.Text BusDlrecclones .Text = " O "
Wend
+ T12.Text ' BusDirecciones. Text = "O"
'BusDatos.Text = Origen While Len(Desp1azamientoS) < 4
Desplazamiento$ = "O" + Desplazamiento$
Wend DireccionEditar = CLng("&H"
+ Segmento$) * 16 + CLng ("&H" + Desplazamiento$)
Memorla(Direcc1onEditar)
AL.Text) ) * Val(Memoria(DireccionEditar)))
Hex (Val. (Memoria (DlreccionEditar) ) ) Case "DIVIDE" ' Divide el
contenido del registro AX entre un Registro de 16 bits' El cociente lo pone en el registro AL y el residuo en el registro AH.
T1.Text =
ax.Text = Hex ( (CLng ("&h" +
BusDatos.Text =
T12.Text = CLng("&h" + ax.Text) T1.Text = CLng("&h" + Destino.Text) BusDatos.Text = Destino If Len(Hex( (T12.Text) /
res = MsgBox (Codigosdeerror (4) ,
ComandoAnlma-Click If res = vbCancel Then
Val (T1.Text) ) ) > 2 Then
botones, Titulo, Ayuda, 5)
End If Else
Val (T1.Text)) AL.Text = Hex((Tl2.Text) /
15
AH. Text = Hex (Val (T12. Text) Mod Val(T1.Text)) End If
Case "DIVIDEMEM" ' Divide el contenido del registro Ax entre el contenido de 16 bits' de una direccion del segmento de datos
Segmento$ = DATOS$ T1.Text = Hex(Val(Trim(T1.Text))) T2.Text = Hex(Val(Trim(T2.Text))) T12.Text = Trim(T1.Text + T2.Text) Desplazamiento$ = T12.Text BusDirecciones.Text = T12.Text While Len(BusDirecciones.Text) < 5 BusDirecciones .Text = "O" +
BusDirecciones.Text Wend BusDatos.Text = Origen
Whlle Len(Desplazamiento$) < 4 Desplazamiento$ = "O" +
Desplazamiento$ Wend DireccionEditar = CLng ("&H"
+ Segmento$) * 16 + CLng ("&H.' + Desplazamiento$)
ax. Text)
CL. Text)
Destino.Text) If Len(Hex((Tl2.Text) /
Val(Memoria(Direcci0nEditar)))) > 2 Then
botones, Titulo, Ayuda, 5)
T12.Text = CLng("&h" +
' T1.Text = CLng("&h" +
' T1.Text = CLng("&h" +
res = MsgBox(Codigosdeerror(4),
ComandoAnima-Click If res = vbCancel Then
End If Else
AL.Text = Hex((T12.Text) / Val(Memoria(DireccionEditar))) ' Guarda el cociente en AL
Val(Memoria(DireccionEd1tar))) ' Guarda el residuo en AH
AH. Text = Hex (Val (T12. Text) Mod
End If
Hex(Val(Memoria(Direcci0nEditar)) ) BusDatos. Text =
Case "INCREMENTA" ' Incrementa el contenido en uno de un registro destino
Destino.Text = Hex (Val ("&h" + Destino.Text) + 1)
Case "INCREMENTAMEM" ' Incrementa el contenido de una dirección del segmento de datos
Segmento$ = DATOS$ T1.Text =
T2.Text =
T12.Text = Trlm(T1.Text +
Desplazamiento$ = T12.Text BusDlrecciones.Text =
While
BusDirecciones .Text = "O" +
Hex (Val (Trim (Tl. Text) ) )
Hex (Val (Trim(T2.Text) ) )
T2. Text)
T12. Text
Len(BusDirecci0nes.Text) < 5
BusDirecciones.Text Wend BusDatos.Text = Origen
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
< 4 While Len(Desp1azamientoS)
DesplazamlentoS = "O" + Desplazamiento$
Wend DlreccionEditar = CLng ("&H"
+ Segmento$) * 16 + CLng("&H" + Desplazamiento$)
Memoria(Direcci0nEditar)
Hex (CLng ( "&H" + MAR. Text) ) + 1
el contenido de un reqistro
Destino.Text) - I)
'Decrementa el contenldo de una direccion del segmento de datos
el segmento de datos
Hex(Val(Trim(T1.Text)))
Hex(Val(Trim(T2.Text)))
T2. Text)
MAR.Text =
Memoria(DireccionEditar) =
Case "DECREMENTA" ' Decrementa
Destino.Text = Hex (Val ("&H" +
Case "DECREMENTAMEM"
Segmento$ = DATOS$ ' Selecciona
T1.Text =
T2.Text =
Tl2.Text = Trim(T1.Text +
Desplazamiento$ = T12.Text
T12. Text BusDirecciones.Text =
While Len(BusDirecciones.Text) < 5
BusDirecciones. Text = "O" + BusDirecciones.Text
Wend
;nlhile Len(Desp1azamientoS) .C 4 BusDatos.iext = Origen
Desplazamiento$ = "O" + Desplazamiento$
Wend DireccionEditar = CLng("&H"
+ Segmento$) * 16 + CLng("&H" + Desplazamiento$)
Memoria(DireccionEditar)
Then
Hex(CLng("&h" + MAR.Text)) - 1 Else
End If
MAR.Text =
If Memoria(Direcci0nEditar) <> O
Memoria(DireccionEditar) =
Error 1
' Case "INCREMENTA A MAR"
MAR.Text) + 1) ' MAR.Text = Hex(CLng("&h" +
'Case "DECREMENTA"
I Destino.Text = Hex(Val(Destino.Text) - 1)
' Case "COMPLEMENTO" ' Destino.Text = Hex(255 -
'Case "MAR=DIRECCION"
Case "DESTINO=BUSDATOS" ' El
Val (Origen) )
contenido del busdatos lo carga al destino
BusDatos.Text Destino.Text =
I Case "BUSDATOS=DESTINO" ' Destino = BusDatos.Text
16
c Case "BUSDATOS=ORIGEN" 'El
contenido del origen lo carga al bus datos
y Case "ORIGEN=BUSDATOS" I BusDatos.Text = Origen I Case "ORIGEN=BUSDIRRECIONES" ' EsribirBusDirecciones ' Case "BUSDIRRECIONES=ORIGEN" ' Case "DESTINO=BUSDIRRECIONES" ' Case "BUSDIRRECIONES=DESTINO" ' Case "DESTINO ES T1"
Set Destino = TI 'Case "DESTINO ES T2" ' Set Destino = T2
'Case "DESTINO ES Tl2"
I Case "ORIGEN ES T1" ' Set Destino = T12
'Case "ORIGEN ES T2" ' Set Origen = T1
'Case "ORIGEN ES T12" ' Set Origen = T2
' Set Orlgen = T12
BusDatos.Text = Origen
'faltan los demas casos
Case "SALTA" ' Ejecución de
ip.Text = Hex ( (Val ("&h" +
Case "PUSHREG" 'Ejecución del
PILA = STACKS ' Seleccionamos
un salto relativo
ip.Text) + Val("&h" + Destino.Text) 1 )
apllamiento en SS de un registro
el segmento de pila T1.Text =
Hex(Val(Trim(Tl.Text) 1 ) T2.Text =
Hex(Va1 (Trlm(T2.Text)) )
T2. Text) T12.Text = Trim(T1.Text +
Desplazamiento$ = T12.Text
Hex( (Val("&h" + sp.Text) + Val("&H" + BusDirecciones.Text =
"0800") ) )
Len(BusDirecciones.Text) < 5
"O" + BusDirecciones. Text
While
BusDirecciones.Text =
Wend
T12. Text
Len(BusDirecci0nes.Text) < 5
"O" + BusDirecciones .Text
' BusDirecciones.Text =
'While
'BusDirecciones.Text =
U Wend While
Desplazamiento$ = "O" +
Wend DireccionEditar =
LeniDesplazarnientoS) < 4
Desplazamiento$
CLng("&H" + PILA) * 16 + CLng("&H" + sp. Text)
= CLng("&H" + Left (Trim(Destino), 2))
Left (Trim(Destin0) , 2) ) )
+ 1) = CLng("&H" + Right(Trim(Destino), 2) 1
Memoria(DireccionEd1tar)
Auxl = Hex (CLng("&H" +
Memoria(Direcci0nEditar
Rlght (Trim(Destin0) , 2) )
aux2
sp.Text) + Val(2) )
aux2 = Hex (CLng ("&H" +
BusDatos.Text = Auxl +
sp.Text = Hex( (Val("&h" +
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Case "PUSHMEM" ' Ejecución de Apilamiento en el SS de un dato del cs
PILA = STACK$ Seleccionamos el segmento de pila
Seleclonamos el segmento de pila
Trim(Hex(Val(Trim(T1.Text)) + Hex(Val(Trim(T2.Text) 1 ) )
Hex ( (Val ("&h" + sp.Text) + Val ("&H" + "0800") ) )
Len(BusDirecciones.Text) < 5
"O" + BusDirecciones .Text
Segmento$ = DATOS$
Desplazamiento$ =
BusDirecciones.Text =
While
BusDirecciones.Text =
Wend
While Len(Desplazamient0S) < 4 Desplazamiento$ = "O" +
Desplazamiento$ Wend DirecclonEditar = CLng ("&H"
+ Segmento$) * 16 + CLng ("&H" + Desplazamiento$)
Str(Mernorla(Direcc1onEditar)) Auxl =
aux2 =
While Len(sp.Text) < 4
Wend DireccionEditar = CLng ("&H"
Memoria(Direcci0nEditar) =
Memoria(Direcci0nEditar +
sp.Text = Hex( (Val("&h" +
BusDatos .Text = Hex(Aux1) +
Str(Memoria(Direcci0nEditar + 1))
sp.Text = "O" + sp.Text
+ PILA) * 16 + CLng("&H" + sp.Text)
Hex (Val ("&h" + Auxl) )
1) = Hex (Val ("&h" + aux2) )
sp.Text) + Val (2) 1 )
Hex (dux2 )
Case "POPREG" E~ecución de Desapila del SS a un reg destino de 16 Bites
Seleccionamos el segmento de pila Segmento$ = STACK$
While Len(sp. Text) < 4
Wend DireccionEditar = CLng ("&H"
sp.Text = "O" + sp.Text
+ Segmento$) * 16 + CLng("&H" + sp.Text) ' Direccion del SS
Hex((Val("&h" + sp.Text) + Val("&H" + BusDirecciones.Text =
"0800") ) ) While
Len(BusDlrecciones.Text) < 5
"O" + BusDirecciones .Text BusDirecciones.Text =
Wend auxiliar1 =
auxiliar2 =
BusDatos.Text = auxiliar2 +
Destino.Text = auxiliar2 +
Hex(Val(Memoria(DireccionEditar - 1)))
Hex(Val(Memoria(Direcci0nEdltar - 2)))
auxlliarl
auxiliarl ' Asignación al resgistro destino
17
Memoria(Direcci0nEditar - 1 ) = O ' Eliminación de valoes de la pila
2) = O ' Eliminación de valoes de la pila
sp.Text = Hex (Val ("&h" + sp.Text) - Val (2) ) ' Decremento del Sp
Memoria(Direcci0nEditar -
Case "POPMEM" Segmento$ = STACK$
While Len(sp.Text) < 4
Wend DireccionEditar = CLng("&H"
Seleccionamos el segmento de pila
sp.Text = "O" + sp.Text
+ Segmento$) * 16 + CLng("&H" + sp.Text) ' Direccion del SS
Hex (Val (Memoria (DireccionEditar - 1) )
Hex(Val(Memoria(DireccionEd1tar - 2) ) )
1) = O ' Eliminación de valoes de la pila
2) = O ' Eliminación de valoes de la pila
auxiliar1 =
auxiliar2 =
Memoria(Dlrecci0nEditar -
Memoria(Direcci0nEditar -
sp.Text = Hex(Va1 ("&h" +
Segmentos = DATOS$ T1.Text =
T2.Text =
T12.Text = Trim(T1.Text +
BusDirecc1ones.Text =
While
BusDirecciones .Text = "O" t
sp. Text) - Val (2) ) ' Decremento del Sp
Hex(Val(Trim(T1.Text))
Hex(Val(Trim(T2.Text) 1 )
T2. Text)
T12. Text
Len(BusDirecciones.Text) < 5
BusDirecciones.Text Wend Desplazamiento$ = Tl2.Text BusDatos.Text = Origen While Len(Desp1azamientoS)
Desplazamiento$ = "O" + < 4
Desplazamiento$ Wend DireccionEditar = CLng ("&H"
+ Segmento$) * 16 + CLng("&H" + Desplazamiento$)
Memoria(DireccionEditar)
Val ("&h" + auxiliar2)
1) = Val("&h" + auxlliarl)
auxillarl
MAR.Text =
Memoria(Direcci0nEditar) =
Memoria(Direcci0nEditar +
BusDatos.Text = auxiliar2 +
End Select Next k
End S u b
Public Sub HazDump ( )
MemoriaFisica$(SegmentoDump.Text, DesplazamientoDump.Text)
MICad$ =
While Len(MiCad$) < 5
Wend MiCadS = "O" + MiCadS
Alejandro Montejo Rubio
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
MiCadS) DireccionFisicaDump = CLng ("&H" +
Dump. Text = " "
Dim OffsetAux As Long AuxlS = "&H" +
DesplazamientoDump.Text OffsetAux = CLng(Auxl$) For i = DlreccionFisicaDump To
NumAuxTruco = OffsetAux CadenaAuxS = BinHex(0ffsetAux) OffsetAux = NumAuxTruco While Len(CadenaAuxS) < 4
CadenaAuxS = "O" t
DireccionFlsicaDump + 12 * 8 Step 8
CadenaAuxS Wend CadenaAuxS = CadenaAuxS + " "
F o r ] = i T o i + 7 num$ = Hex (Memoria ( 1 ) ) If Len (num$ ) = 1 Then numS
CadenaAuxS = CadenaAuxS + = "O" + num$
numS + 'I IT
Next j For j = i T o 1 + 7
If Memorla (j) <> O And Memorla(j) <> 9 Then
+ Chr (Memorla ( j ) ) CadenaAuxS = CadenaAuxS
Else
End If CadenaAuxS = CadenaAuxS + " "
Next J Dump.Text = Dump.Text + Chr(l3)
+ Chr (10) + CadenaAuxS OffsetAuy = OffsetAux + 8
End Sub
Public Sub LeeCodigoO CodigoOperacion = Memorla(CLng("&H"
+ MemoriaFisica$(cs.Text, ip.Text)) Mod 1048576) End Sub
Public Function ObtenDireccionNoCero(Direcci0n As Long)
Memoria(Direcci0n) = O
Next i
While Direccion < 1023 And
Wend Direccion = Direccion + 1
ObtenDireccionNoCero = Direccion End Function
Public Function ObtenTamaño(Direccion As Long)
WtAlle Direccion < 1024 And DireccionInicial = Direccion
(Memoria(Direcci0n) <> O Or Memoria(Direcci0n + 1) <> O Or Memoria(D1reccion + 2 ) <> O Or Memoria(D1reccion + 3) <> O Or Memoria(Direcci0n + 4 ) <> O )
Dlreccion = Direccion + 1 Wend ObtenTamaño = Direccion -
DirecclonInicial End Function
Private Sub Abrlr-Click0 Dim Direccion As Long D i m Tamaño As Integer Dim Dato As Byte D i m i
Memoria(i) = CLng("&h" + "00") For 1 = O To 65535 Step 1
18
Next i DE.Text = "OOOO:OOOO" CodigoOperacion = O DireccionEditar = &HO Proceso.Min = 1 Proceso.Max = 27 Proceso.Value = Proceso.Min On Error GoTo Finalizar
' L a b e 3 7 .Caption = "Archivo: " + AbrirMemoria.filename
'AbrirMemoria.Action = 1 AbrirMemoria.ShowOpen Open AbrirMemoria.fi1ename For
On Error GoTo Finalizarcerrar Input As 1
Label37.Caption =
While Not EOF(1) AbrirMemoria.filename
Input #1, Direccion, Tamaño For 1 = 1 To Tamaño Input #1, Dato Memoria(Direcci0n + i - 1) = Dato
Proceso.Value = i Next i
Wend 'Proceso.Value = Proceso.Min
Finalizarcerrar: Close 1 HazDump
End Sub Flnalizar:
Private Sub AH-Change ( ) If BanderaRegistro Then
BanderaRegistro = False
If Len(AH.Text) < 2 Then While Len(AH.Text) < 2
Wend AH.Text = "O" t AH.Text
End If If Len(AH.Text) > 2 Then AH.Text =
ax.Text = AH.Text + AL.Text BanderaRegistro = True
Right (AH. Text, 2 )
End If End Sub
Private Sub AH-KeyPress(KeyAscii As Integer)
BanderaRegistro = False Caracter = Chr(KeyAscii) If (Caracter >= " O " And Caracter <=
"9") Or (Caracter ?= "A" And Caracter <= "F") Or (Caracter >= "a" And Caracter <= "f") Then
KeyAscii = Asc(UCase (Caracter) ) cadena$ = " I '
cadena$ = Mid(AH.Text, 2, 1) AH.Text = cadenas AH.SelStart = 1
KeyAscii = O Else
End If BanderaRegistro = True
End Sub
Private Sub AL-Change0 If BanderaRegistro Then
If Len(AL.Text) < 2 Then While Len(AL.Textj < 2
Wend AL.Text = "O" + AL.Text
End If If Len(AL.Text) > 2 Then AL.Text =
Right (AL. Text, 2 j
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
BanderaRegistro = False ax.Text = AH.Text + AL.Text BanderaRegistro = True
End If End Sub
Private Sub AL-KeyPress(KeyAscii AS Integer)
BanderaRegistro = False Caracter = Chr (KeyAscii) If (Caracter >= "O" And Caracter <=
"9") Or (Caracter >= "A" And Caracter <= "F") Or (Caracter >= "a" And Caracter <= "f") Then
KeyAscii = Asc (Ucase (Caracter! ) cadenas = " "
cadenas = Mid(AL.Text, 2, 1 ) AL.Text = cadena$ AL.SelStart = 2
KeyAscil = O Else
End If BanderaRegistro = True
End Sub
Private Sub Anima-Timer0
End Sub
Private Sub ax-ChangeO If BanderaRegistro Then
Siguiente-Click
BanderaRegistro = False If Len(ax.Text) < 4 Then
While Len(ax.Text) < 4
Wend ax.Text = "O" + ax.Text
Ena If If Len(ax.Text) > 4 Then ax.Text =
AH.Text = Left(ax.Text, 2) AL.Text = Right(ax.Text, 2 ) BanderaRegistro = True
Right (ax.Text, 4)
End If End Sub
Private Sub ax-KeyPress(KeyAscii As Integer)
BanderaReglstro = False ValidaHexadecimal KeyAscii, ax BanderaReglstro = True
End Sub
Private Sub BH-Change0
If BanderaRegistro Then 'bx.Text = BH.Text + BL.Text
BanderaReglstro = False
If Len(BH.Text) < 2 Then While Len(BH.Text) < 2
Wend BH.Text = "O" + BH.Text
End If If Len(BH.Text) > 2 Then BH.Text =
bx.Text = BH.Text + BL.Text BanderaRegistro = True
Right(BH.Text, 2)
End If End Sub
Prlvate Sub BH-KeyPress(KeyAscii As
<= "9") Or (Caracter >= "A" And Integer)
And Caracter <= "f") Then Caracter <= "F") Or (Caracter >= "a"
* 19
J
BanderaRegistro = False Caracter = Chr(KeyAscii1 If (Caracter >= "O" And Caracter <=
"9") Or (Caracter >= "A" And Caracter <= 11 F") Or (Caracter >= "a" And Caracter <= "f") Then
KeyAscii = Asc(UCase(Caracter)) cadena$ = " I '
cadena$ = Mid(BH.Text, 2, 1) BH.Text = cadena$ BH.SelStart = 2
KeyAscii = O Else
End If BanderaRegistro = True
End Sub
Private Sub BL-Change0 'bx.Text = BH.Text + BL.Text If BanderaRegistro Then
If Len(BL.Text) < 2 Then While Len(BL.Text) < 2
Wend BL.Text = "O" + BL.Text
End If If Len(BL.Text) > 2 Then BL.Text =
BanderaRegistro = False bx.Text = BH.Text + BL.Text BanderaRegistro = True
Right (BL.Text, 2)
End If End Sub
Private Sub BL-KeyPress(KeyAscii As Integer)
Caracter = Chr(KeyAscii1 If (Caracter >= "O" And Caracter <=
"9") Or (Caracter >= "A" And Caracter <= "F") Or (Caracter >= "a" And Caracter <= "f") Then
KeyAscii = Asc (Ucase (Caracter) ) cadena$ = " "
cadena$ = Mid(BL.Text, 2, 1) BL.Text = cadena$ BL.SelStart = 2
KeyAscii = O Else
End If
End Sub
Private Sub bp-ChangeO
End Sub If bp.Text = " " Then bp.Text = "0000"
Private Sub bp-KeyPress(KeyAscii As Integer)
End Sub
Private Sub BusDatos-Change0
BusDatos. Text = "0000"
ValidaHexadecimal KeyAscii, bp
If BusDatos.Text = " " Then
If Len(BusDatos.Text) = 1 Then BusDatos.Text = "O" +
BusDatos .Text End If If Len(BusDatos.Text) = 3 Then BusDatos .Text = "O" +
BusDatos.Text End If
Val ("&h.' + BusDatOS .Text) Mod 256 End Sub
' Memorla(CLng("&H" + MAR.Text)) =
I Alejandro Montejo Rubio
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Private Sub BusDatos-KeyPress(KeyAsci1 As Integer)
BanderaRegistro = False ValidaHexadecimal KeyAscii,
BanderaRegistro = True BusDatos
' ValidaHexadecimal KeyAscii, BusDatos End Sub
Private Sub BusDirecclones-Change0
BusDirecclones. Text = "0000" End Sub
Private Sub Busnirecclones - KeyPress(KeyAsci1 As Integer)
ValidaHexadecimal KeyAscii, BusDirecciones End Sub
Private Sub bx-ChangeO 'BH.Text = Left(bx.Text, 2) 'BL.Text = Right(bx.Text, 2) If BanderaRegistro Then
If BusDirecciones .Text = '"I Then
BanderaRegistro = False
If Len(bx.Text) < 4 Then While Len(bx.Text) < 4
Wend bx.Text = "O" + bx.Text
End If If Len(bx.Text) > 4 Then bx.Text =
BH.Text = Left(bx.Text, 2) BL.'rext = Right(bx.Text, 2) BanderaRegistro = True
Rlght(bx.Text, 4)
End If End Sub
Private Sub bx-KeyPress(KeyAscii As Integer)
End Sub
Private Sub CH-Change() If BanderaRegistro Then
If Len(CH.Text) < 2 Then
ValidaHexadecimal KeyAscli, bx
BanderaRegistro = False
While Len(CH.Text) < 2
Wend CH.Text = "O" + CH. Text
End If If Len(CH.Text) > 2 Then CH.Text =
c~.Text = CH.Text + CL.Text BanderaRegistro = True
Right(CH.Text, 2)
End If End Sub
Private Sub CH-KeyPress(KeyAscii As
<= "9") Or (Caracter >= "A" And Integer)
And Caracter <= "f") Then Caracter <= "F") Or (Caracter >= "a"
BanderaReglstro = False Caracter = Chr(KeyAsc1i) If (Caracter >= "O" And Caracter <=
"9") Or (Caracter >= "A" And Caracter <= "F") Or (Caracter >= "a" And Caracter <= "f") Then
KeyAscii = Asc (Ucase (Caracter) ) cadena$ = " "
cadena$ = Mld(CH.Text, 2, 1 ) CH.Text = cadena$
20
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
CH.SelStart = 2
KeyAscii = O Else
End If BanderaRegistro = True End Sub
Private Sub Checkl-Click0 If Checkl.Value = O Then
intervalo.Enabled = False Label33.Caption =
"Intervalo-tiempo-desactivado" Else
intervalo.Enabled = True Label33.Caption =
"Intervalo-tiempo-actlvado" End If End Sub
Private Sub CL-Change()
If BanderaRegistro Then 'cx.Text = CH.Text + CL.Text
If Len (CL.Text) < 2 Then While Len(CL.Text) < 2
Wend CL.Text = "O" + CL.Text
End If If Len(CL.Text) > 2 Then CL.Text =
BanderaRegistro = False cx.Text = CH.Text + CL.Text BanderaRegistro = True
Right (CL.Text, 2)
End If End Sub
Private Sub CL-KeyPress(KeyAscii As Integer)
Caracter = Chr(KeyAscii) If (Caracter >= "O" And Caracter <=
"9") Or (Caracter >= "A" And Caracter
Caracter <= "f") Then < = 11 F") Or (Caracter >= "a" And
KeyAscli = Asc(UCase(Caracter)) cadena$ = " "
cadena$ = Mid(CL.Text, 2, 1) CL.Text = cadena$ CL.SelStart = 2
KeyAscii = O Else
End If End Sub
Private Sub ComandoAnima-Click0 If Anima.Enabled Then
Anima.Enabled = False Siguiente.Enabled = True ComandoAnima.Caption = "&Anima"
Anima.Enabled = True Siguiente.Enabled = False ComandoAnima.Caption = "&Parar"
Else
End If End Sub
Private Sub ComandoAnima-MouseMove(Butt0n As
Y As Single) Integer, Shift As Integer, X As Single,
' Muestra mensaje en la parte inferior de la pantalla el mensaje" Ayudarapida.Caption = "Ejecuta el programa residente en memoria,
por el Intervalo" continuamente a velocidad determinada
End Sub
Private Sub Commandl-Click0 Inicializa-Registros Dim i For i = 1024 To 65535 Step 1 Memoria(i) = CLng("&h" + "00") Next i End Sub
Private Sub Commandl-MouseMove(Butt0n As Integer, Shlft As Integer, X As Single, Y As Slngle)
de la pantalla el mensaje" ' Muestra mensaje en la parte inferior
Ayudaraplda.Caption = "Resetea el IP y los registros para eir?pezar una nueva e j ecucl hn" End Sub
Private Sub Command2_Cl1ck() Desensamblador.Show 1 End Sub
Private Sub Command2-MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
de la pantalla el mensaje" ' Muestra mensaje en la parte inferior
Ayudaraplda.Caption = "Muestra el
End Sub código en lenguaje ensamblador"
Private Sub Command3-Click0
MemoriaFisica(SeqmentoDump.Text, DesplazamientoDump.TpYt)
dux$ =
While Len(aux$) < 5
Wend dux$ = "&H" + dux$ Memoria (CLng (dux$) ) = Val ( "&H" i
NuevoValor.Text) Dump.Refresh HazDump Dump.Refresh
dux$ = "O" + dux$
End Sub
Private Sub Command3-MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Este botón nos permite introduclr un valor nuevo en la memoria" End Sub
Private Sub cs-Change ( )
End Suh 'If cs .Text = " I ' Then cs .Text = "0000"
Pr1,rate Sub es-Keypress (KeyAscii As Integer)
If cs.Text <> "0000" Then
End If End Sub
Private Sub cx-ChangeO If EanderaReglstro Then
If Len(cx.Text) < 4 Then
ValldaHexadecimal KeyAscii, cs
MsgBox (Codigosdeerror ( O ) ) '
BanderaRegistro = False
Whlle Len(cx.Text) < 4
Wend cx.Text = "O" + cx.Text
End If
Alejandro Montejo Rubio 21
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
If Len(cx.Text) > 4 Then cx.Text = Rlght (cx. Text, 4 )
CH.Text = Left(cx.Text, 2) CL.Text = Right(cx.Text, 2) BanderaRegistro = True
End If End Sub
Private Sub cx-KeyPress(KeyAscii As Integer)
End Sub
Private Sub DE-Change0 Descod = DE. Text End Sub
Private S u b DesplazamientoDump-Change0
dux$ = MemoriaFisica(SegmentoDump.Text, Desp1azamientoDump.Text)
ValidaHexadecimal KeyAscii, cx
HazDump
While Len(aux$) < 5
Wend aux$ = "&H" t aux$ NuevoValor.Text =
While Len(NuevoValor.Text1 < 2
dux$ = "O" t aux$
Hex (Memoria (CLng (aux$) Mod 1024) I
NuevoValor.Text = "O" + NuevoValor.Text
Wend
Dump.Refresh End S u b
Private Sub DesplazamientoDump-KeyPress(KeyAscii As Integer)
DesplazamientoDump End Sub
ValidaHexadecimal KeyAscii,
Prlvate Sub DH-Change0 'dx.Text = DH.Text + DL.Text
If BanderaRegistro Then BanderaRegistro = False If Len(DH.Text) < 2 Then
While Len(DH.Text) < 2
Wend DH.Text = "O" t DH.Text
End If If Len(DH.Text) > 2 Then DH.Text =
dx.Text = DH.Text + DL.Text BanderaRegistro = True
Right (DH.Text, 2)
End If End Sub
Private Sub DH-KeyPress(KeyAscii As
Caracter <= "F") Or (Caracter >= "a" Integer)
And Caracter <= "f") Then BanderaRegistro = False
Caracter = Chr(KeyAscii)
"9") Or (Caracter >= "A" And Caracter If (Caracter >= " O " And Caracter <=
<= 11
Caracter <= "f"1 Then F") Or (Caracter >= "a" And
KeyAscii = Asc(UCase(Caracter)) cadena$ = " "
cadena$ = Mid(DH.Text, 2, 1) DH.Text = cadena$ DH.SelStart = 2
Else
KeyAscii = O End If BanderaRegistro = True
End S u b
Private Sub di-Change()
End Sub If di .Text = "" Then di .Text = "0000"
Private Sub di-KeyPress(KeyAsci1 As Integer)
End Sub
Private Sub DL-Change ( )
If BanderaReglstro Then 'dx.Te.'t = DH.Text t DL.Text
ValidaHexadecimal KeyAscii, di
If Len(DL.Text) < 2 Then While Len(DL.Text) < 2
Wend DL. Text = "O" + DL.Text
End If If Len(DL.Text) > 2 Then DL.Text =
BanderaRegistro = False dx.Text = DH.Text + DL.Text BanderaRegistro = True
Right (DL. Text, 2
End If
End Sub
Private Sub DL-KeyPress(KeyAscii As Integer)
Caracter = ChriKeyAscii) If (Caracter >= "0" And Caracter c=
"9") Or (Caracter >= " A " And Caracter <= "F") Or (Caracter >= "a" And Caracter <= "f") Then
KeyAscil = Asc(UCase(Caracter)) cadena$ = " "
cadena$ = Mid(DL.Text, 2, 1) DL.Text = cadena$ DL.SelStart = 2
KeyAscii = O Else
End If
End Sub
End S u b Private Sub ds-ChangeO
Private Sub ds-KeyPress(KeyAscii As Integer)
ValidaHexadeclmal KeyAscii, ds If cs.Text < > "0400" Then
End If MscBox (Codigosdeerror ( 1 ) ) '
End Sub
Private Sub dx-Change0 'DH.Text = Left(dx.Text, 2 ) 'DL.Text = Rlght(dx.Text, 2)
If BanderaRegistro Then BanderaRegistro = False
If Len(dx.Text) < 4 Then While Len(dx.Text) < 4
Wend dx.Text = "O" + dx.Text
End If If Len(dx.Text1 > 4 Then dx.Text =
Right (dx. Text, 4
Alejandro Montejo Rubio 22
~~
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
DH.Text = Left(dx.Text, 2 ) DL.Text = Right (dx. Test, 2) BanderaRegistro = True
End If
End Sub
Private Sub dx_KeyPress(KeyAscii As Integer)
End Sub ValidaHexadecimal KeyAscil, dx
Prlvate Sub Eproml-MouseMove(Button As
Y As Single) Integer, Shift As Integer, X As Slngle,
memoria EPROM, 64KB" Ayudarapida.Caption = "Segmento de
End Sub
Private Sub es-ChangeO ' If es .Text = " " Then es .Text = "0000"
End Sub
Private Sub es-KeyPress(KeyAscii As Integer)
ValidaHexadecimal KeyAscii, es If cs .Text <> "OCOO" Then
MsgBox (Codigosdeerror (3) ) End If End Sub
Private Sub fin_Cllck() Unload Me DireccionEditarl = Descod End Sub
Private Sub Fin_MouseMove(Button AS Integer, Shift As Integer, X As Single, Y AS Single) ' Muestra mensaje en la parte inferlor de la pantalla el mensaje" Ayudarapida.Caption = "Regresa ala pantalla de edición y componentes electronicos" End Sub
Private Sub Form-Load0 ReDim Eprom( 1) , RAM(1) 'defino mi memoria RAM y ROM
cero
dump
NumEprom = 1 solo hay 1 Eprom y 1 RAM
NumRam = 1 Inicializa-Registros
LeeDatosOperacion 'Cargar la
BanderaRegistro = True
DireccionDump = 0 'Dump en
Haz Dump
Eprom(1) .Inicio = fiHFE000
'Creamos el
'Idicamos que
'Estado inicial del Fetch
tabla de los mnemonicos
' DE = Descod
End Sub
MemoriaFisica$(Segmento$, Offset$) Publlc Function
Then Segmento$ = "0000" If Segmento$ = " "
Then Offset$ = "0000"
Segmento$
Offset$
If Offset$ = " "
Auxl$ = "&H" +
aux2$ = "&H" +
16 + CLng(aux2S)) End Function
Publlc Sub IncrementaIP(i As Integer)
MemoriaFisicaS = Hex$(CLng(Auxl$) *
"0000" If ip.Text = " " Then ip.Text =
Dim Ausl As I.ong au;-q = "&H" + 1p.Text Auxl = CLng (aux$) Auxl = Auxl + 1 ip.Text = BlnHex(Aux1)
End Sub
Private Sub FormMouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Simulador del sistema 8088"
End Sub
Private Sub Framel-MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudaraplda.Caption = "Segmento de memoria asiganada para otros dispositlvos" End Sub
Private Sub Guardar-Click0 Dim Direcclon As Long Dim Tamaño AS Integer On Error GoTo Finalizar AbrirMemoria.Flags = &H806& AbrirMemoria.DialogTit1e = "Guardar
AbrirMemoria.ShowSave Open AbrirMemoria.fi1ename For
Output As 1 Direccion = O Do
memoria"
Direccion =
If Direccion >= 1023 Then Exit
Prlnt #1, Dlreccion dux& = Dlreccion Tamaño = ObtenTamaño(auxfi) Print #1, Tamaño For i = 1 To Tamaño
ObtenDireccionNoCero(Direccion)
Do
t i - 1) Print #1, Memoria(Direcci0n
Next 1 Direccion = Direccion + Tamaño
Loop Until Direccion >= 1023 Close 1
Finalizar:
End Sub
Private Sub Intervalo-Change0 Anima.Interva1 = Val(intervalo.Text) End Sub
Private Sub Ip-ChangeO 'While Len(ip.Text) < 4 'ip.Text = "O" + ip.Text'
Atejandro Montejo Rubio 23
' Wend End Sub
Private Sub ip_KeyPress(KeyAscii As Integer)
End Sub
Prlvate Sub labell-MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Registro Acumulador de 16 bits ó 2 bytes conserva el resultado temporal despues de realizar operaciones" End Sub
ValidaHexadecimal KeyAscli, ip
Private Sub Labello-Click0 SegmentoDump.Text = ss.Text NuevoValor. Text = "00" End Sub
Private Sub LabellO-MouseMove(Button As
Y As Single) Integer, Shift As Integer, X As Single,
Ayudarapida.Caption = "Registro de Segmento de Pila, Direcclona el inicio
pila" de la sección de memoria que es la
End Sub
Private Sub Labelll-Click() SegmentoDump.Text = es.Text NuevoValor.Text = "00"
End Sub
Private Sub LabelllMo11seMove(Button As
Y As Single) Integer, Shift As Integer, X As Single,
Ayudarapida.Caption = "Registro de Segmento Extra, lo utllizan algunas
End Sub instruciones para cadenas"
Private Sub Labell2~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Registro Apuntador de pila, direcciona datos en
End Sub la pila de memoria"
Private Sub Labell3~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Registro Apuntador de Instruciones, dlrreciona slempre aquella instrución a ejecutar" End Sub
Private Sub Labell4~MouseMove(Button As Integer, Shift As Integer, X As Slngle, Y As Single) Ayudarapida.Caption = "El bus de dirreciones suministra una dirrecion en
End Sub la memoria"
Private Sub Labell5~MouseMove(Button As
Y As Single) Integer, Shift As Integer, X As Single,
Ayudarapida.Caption = "El bus de datos transfiere estos entre el microprocesador y la memoria" End Sub
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Private Sub Labellb~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Este campo nos permite trasladarnos al desplazamiento
E,nd Sub indicado, dentro del segmento asignado"
Private Sub Labell7_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Este campo permlte cambiar el segmento, que esta asiqnado por default" End Suh
Private Sub Labell8-MouseMove(Button As
Y As Single) Integer, Shift As Integer, X As Single,
Ayudarapida.Captlon = "El DUMP es un zoom que se realiza sobre la memoria en el segmento asignado" End Sub
Prlvate Sub Labell9_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Reglstro de datos de un byte, es de uso general"
End Sub
Private Sub Label2~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Cjngle) Ayudaraplda.Captlon = "Registro Base de 2 bytes, a menudo conserva el desplazamiento de los datos que hay en memoria"
End Sub
Private Sub Label20_MouseMove(Button As Integer, Shlft As Integer, X As Single, Y As Single) Ayudaraplda.Caption = "Registro Contador de un byte, contiene el conteo de varias lnstruclones"
End Sub
Private Sub Label21~MouseMove(Button As
Y As Single) Integer, Shift As Integer, X As Single,
Ayudaraplda.Caption = "Registro Base de un byte, a menudo conserva el desplazamiento de los datos que hay en memoria" End Sub
Private Sub Label22-MouseMove(Button As
Y As Slngle) Integer, Shift As Integer, X As Single,
Ayudaraplda.Caption = "Reqistro Acumulador de 8 bits 0 un byte conserva el resultado temporal despues de reallzar operaclones" End Sub
Private Sub Label23_MouseMove(Button As
Y As Single) Integer, Shift As Integer, X As Single,
24
Ayudarapida.Caption = "Registro de datos de un byte, es de u s o general" End Sub
Private Sub Label24_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Registro Contador de un byte, contiene el conteo de varias instruclones" End Sub
Private Sub Label25-MouseMove(Button As
Y As Single) Integer, Shift As Integer, X As Single,
Ayudarapida.Caption = "Registro Base de un byte, a menudo conserva el desplazamiento de los datos que hay en memoria" End Sub
Private Sub Label26_MouseMove(Button As
Y As Slngle) Integer, Shift As Integer, X As Single,
Ayudarapida.Caption = "Registro Acumulador de 8 bits ó un byte conserva el resultado temporal despues de realizar operaciones"
End Sub
Private Sub Label27-MouseMove(Button As
Y As Single) Integer, Shift As Integer, X As Single,
Ayudarapida.Caption = "Dirreción final del la memoria RAM" End Sub
Private Sub Label28-MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Inlcio de la memoria, y del segemnto de código"
End Sub
Private Sub Label29~MouseMove(Button As
Y As Single) Integer, Shift As Integer, X As Single,
Ayudarapida.Caption = "Segmento de datos, dirrección inicial y dirreción
End Sub final"
Private Sub Label3~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudaraplda.Caption = "Registro Contador de 2 bytes, contiene el conteo de varias instruciones" End Sub
Private Sub Label30~MouseMove(Button As
Y As Single) Integer, Shift As Integer, X As Single,
Ayudarapida.Caption = "Segmento de pila, dirreción inicial, y dirreción
End Sub final"
Private Sub Label32~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Ayudarapida.Capt1on = "Segmento de codigo, dirreción inicial, y dirreción final" End Sub
Private Sub Label33_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Activa la opción Intervalo" End Sub
Private Sub Label34_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Es el intervalo para Id velocidad de ejecución, Rango 1 - 9000 ( Recomendado 1000)" End Sub
Private Sub Label35-MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Segmento extra, dlrreción inicial y dirreción final" End Sub
Private Sub Label4_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Registro de datos de 2 bytes, es de uso general" End Sub
Private Sub Label5"ouseMove(Button As Integer, Shift As Integer, X As Single, Y As Slngle) Ayudara:?ida.Caption = "Registro Indice de fuente; dirreciona datos fuente de cadenas o arreglos" End Sub
Private Sub Labelb_MouseMove(Button As
Y As Single) Integer, Shift As Integer, X As Single,
Ayudarapida.Caption = "Registro Indice de Destino, dirreciona datos destino en
End Sub forma indirecta"
Private Sub Label7_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Registro Apuntador de Base, apuntador de uso general que dirreciona a una matriz de datos en la pila" End Sub
Private Sub Label8-ClickO SegmentoDump.Text = cs.Text NuevoValor.Text = "00" End Sub
Private Sub Label8~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Ayudarapida.Caption = "Registro de segmento de código,Define la dirección inicial de la memoria que tiene el código" End Sub
Private Sub Label9-ClickO SegmentoDump.Text = ds.Text NuevoValor.Text = "00"
Alejandro Montejo Rubio
1
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
End Sub
Private Sub Label9-MouseMoveiButton As
Y As Single) Integer, Shift As Integer, X As Single,
Ayudarapida.Caption = "Registro de Segmento de Datos,define la dlrección inicial de la sección de memoria que tiene los datos" End Sub
Privte Sub MAR-Change0 I Dim aux As Long 'aux = Memoria(CLng("&H" +
' BusDatos.Text = BinHex(aux) MAR.Text) Mod 1048576)
End Sub
Prlvate Sub NuevoValor-KeyPress(KeyAscii As Integer)
If KeyAscli = 13 Then
BinHexS ( (CLng ("&h" + Desp1azamientoDump.Text =
DesplazamientoDump.Text) + 1) Mod 65536)
Len(DesplazamlentoDump.Text) < 4
"O" + DesplazamientoDump. Text Wend KeyAscii = O NuevoValor.SelStart = 2
Caracter = Chr(KeyAscii) If (Caracter >= "O" And
While
DesplazamientoDump.Text =
Else
Caracter <= "9") Or (Cüracter >= "A" And Caracter <= "F") Or (Caracter >= "a" And Caracter <= " f " ) Then
Asc(UCase(Caracter)) KeyAscil =
cadena$ = " "
cadena$ =
NuevoValor.Text = cadena$ NuevoValor.Se1Start = 2
KeyAscii = O
Mid(NuevoValor.Text, 2, 1)
Else
End If End If
End Sub Private Sub NuevoValor-LlnkError(LinkErr As Integer) End Sub
Private Sub ProgressBarl-MouseDown(Button As
Y As Single) Integer, Shift As Integer, X As Single,
End Sub
Private Sub Salir-Click0
Unload Me End Sub
Private Sub SegmentoDump-Change()
DireccionEditarl = Descod
Nuevovalor. Text = "
Haz Dump aux$ =
MemoriaFisica(SegmentoDump.Text, DesplazamientoDump.Text)
While Len (dux$) < 5
aux$ = "O" + aux$ Wend dux$ = "&H" + aux$ NuevoValor.Text =
While Len(NuevoVa1or.Text) < 2 NuevoValor.Text = "O" +
Hex(Memoria(CLng(aux$) Mod 1024)
NuevoValor.Text Wend Dump. Refresh
End Sub
Private Sub SegmentoDump-KeyPress(KeyAscii As Integer)
SegmentoDump End Sub
Private Sub si-ChangeO If sl.Text = " I ' Then sl.Text = "0000" End Sub
Private Sub si-KeyPress(KeyAscii As Integer)
End Sub
Private Sub Siguiente-Click()
Right (Descod, 4 ) ) Then respuesta = MsgBox ("Ejecución
Terminada, para volver a ejecutar el código Tecle RESET ' I , vbOKOnly, "Ejecución de Programas")
VaiLdaHexadecirnal KeyAscli,
ValidaHexadecimal KeyAscii, si
If Val("&h" t ip.Text) > Val("&h" +
If respuesta = 1 '?;en ColwndoAnima-Cllck End If
Else Select Case EstadoFetch
Case O BusDatos .Text = "0000" BusDirecciones.Text =
LeeCodlgo Estado.Caption = "Leer el
"00000"
codlgo de instrucción"
Case 1 DecodificaCodigo Estado.Caption =
Operacion(CodigoOperacion).mnemonico
Case 2 E1ecutaCodigo2 Estado.Captlon =
HazDun,p "Instrucción ejeclltada"
End Select EstadoFetch = (EstadoFetch + 1) Mod
3 End If End Sub
Public Function EsribirBusDlreccionesO Resultado = False If NumRam >= 1 Then
dux$ = "&H" +
For i = 1 To NumRam If (CLng(aux$) >= RAM(i) .Inicio)
Resultado = Resultado Or True
BusDirecciones.Text
And (CLng(aux$) <= RAM(i) .Fin) Then
End If Next 1
End If
Alejandro Montejo Rubio 26
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
If Not Resultado Then AnimaAnterior = Anima.Enabled Anima.Enabled = False MsgBox ("La dirección especifica es
Anima.Enabled = AnimaAnterior inválida, se leyo basura")
End If LeerBusDirecciones = Resultado End Function Public Function LeerBusDireccionesO
Resultado = False If NumEprom >= 1 Then
aux$ = vv&npv + BusDirecciones.Text
For i = 1 To NumEprom If (CLng(aux$) >=
Eprom(i) .Inicio) And (CLng(aux$) <= Eprom (i) . Fin) Then
Resultado = Resultado Or True End If
End If If NumRam >= 1 Then
aux$ = "&H" +
For i = 1 To NumRam If (CLng(aux$) >= RAMii) .Inicio)
Resultado = Resultado Or True
Next i
BusDirecciones.Text
And (CLng (aux$) <= RAM(i) .Fin) Then
End If Next i
If Not Resultado Then End If
AnimaAnterior = Anlma.Enabled Anima.Enabled = False MsgBox ("La direcclón especifica es
Anima.Enabled = AnimaAnterior inválida, se leyo basura")
End If LeerBusDirecciones = Resultado End Function
As Integer, Shift As Integer, X As Private Sub Siguiente-MouseMove(Button
Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensale" Ayudarapida.Caption = "Ejecuta el programa residente en memoria, paso a paso, considerando el ciclo de Fech" End Sub
Private Sub sp-ChangeO
While Len(sp.Text) < 4 If sp.Text = " I ' Then sp.Text = "0000"
sp.Text = "O" + sp.Text Wend End Sub
Begin VB.PictureBox Picture12 Appearance =
Codigo Sistema Mínimo VERSION 4.00 Begin VB.Form Form2
Appearance = O 'Flat BackColor = &H00400000& Caption
ClientHeight = 5235 ClientLeft ClientTop
= 450
Clientwidth = 1605
Drawstyle = 5220
DrawWidth = 1 'Dash
FlllColor = 3 = &HOOFFFFFF&
Sistema Minimo 8080" = "Simulador
Private Sub sp-KeyPress(KeyAscii As Integer)
End Sub
Private Sub ss-Change() 'If ss.Text = " " Then ss.Text = "0000" End Sub
Private Sub S S KeyPress(KeyAscii As
ValidaHexadecimal KeyAscii, sp
"
Integer) ValidaHexadecimal KeyAscii, If cs.Text <> "0800" Then
MsgBox (Codigosdeerror(2)) End If End Sub
Public Sub Inicializa-Registros
ip.Text = "0000" ' In
cs.Text = "0000" ax.Text = "0000" bx.Text = "0000"
dx.Text = "0000" cx.Text = "0000"
di .Text = "0000" si.Text = "0000"
bp.Text = "0000" ds.Text = "0400" ss.Text = "0800" es.Text = "OCOO" ip.Text = "0000" sp.Text = "0000" BusDatos = "0000" SeumentoDumD.Text = "0000"
los valores de los registros
S S
0
iciamos
DesplazamientoDump. Text = "0000" EstadoFetch = 0
End Sub
Private Sub Textl-Change0 End Sub
Private Sub T12-ClickO T1.Text = Hex(Val(Trim(T1.Text))) T2.Text = Hex(Val(Trim(T2.Text) ) ) Tl2.Text = Trim(T1.Text + T2.Text) valormem = Val("&H" + Trim(T12.Text)) End Sub
Private Sub textl9_MouseMove(Button As
Y As Single) Integer, Shift As Integer, X As Single,
Ayudarapida.Caption = "ese campo nos permite modificar el dato que se
End Sub encuerLtra en segmento:desplazamiento"
Fillstyle - ~
Beginproperty Font Cross
name
charset weight size underline italic
Endproperty strikethrough
FontTransparent =
Forecolor
Roman"
- -
I Diagonal
= "Times New
= o = 700
= O 'False = 18
= 0 'False = -1 'True
O 'False &H00000000&
Alejandro Montejo Rubio 27
Height = 5955 HelpContextID = 2 Icon = "Sistema
minimo. frx": O000 KeyPreview Left
= -1 'True = 390
LinkMode LinkTopic
= 1 'Source = "Principal"
MouseIcon = "Sistema minimo . f rx" : O4 42
ScaleHeight = 5235 Scalewidth = 5220
Width = 5340 WindowState = 2 'Maximized Begin VB.Frame Informacion
TOP = 945
BackColor = &HOOEOEOEO& Beginproperty Font
name = "Arial" charset weight
= o = 700
underllne size = 9.75
italic = 0 'False
strikethrough = 0 'False = -1 'True
Endproperty Height Left TabIndex
Visible Width Begin VB.ConunandButton Command2
= 255 = 3000 = 47
= O 'False = 135
TOP = 240
Caption = "C&errar" Beginproperty Font
name = "Times
charset weight size = 12 underline = o italic = o
strikethrough = 0
New Roman" = o = 700
' False
' False
' False Endproperty Height Left
= 495
TabIndex = 4920
TOP = 50
Width = 1200 = 1455
End Begin VB.PictureBox componente
AutoSize Backcolor
= -1 'True
Borderstyle = O 'None FillColor
- -
&HOOCOCOCO&
- -
&HOOFFFFCO& Forecolor
Height Left Picture
minimo.frx":0884 ScaleHeight - -
Scalewidth TabIndex Top Width
- -
&HOOFFFFCO& - -
- - - -
- - - - - - - -
End Begin VB.TextBox Text1
BackColor
Beginproperty Font
- -
&HOOFF0000&
Alejandro Montejo Rubio
675 120 "Sistema
675 2010
240 49
2010
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
name = "Times
charset = o weight = 700 size underline
= 9 = o
italic = o strikethrough = O
New Roman"
' False
' False
' False Endproperty ForeColor
Height = 1455 Left = 240 MultiLine ScrollBars
= -1 'True
TabIndex = 3 'Both
Text = 48 = "Sistema
- -
&HOOFFFFOO&
minimo . f rx" : 4 FCA TOP = 1920 Width = 7095
End Begin VB.Label Label10
Alignment = 2 'Center BackColor
Borderstyle = 1 'Fixed
Caption - -
Beginproperty Font
- -
&HOOCOCOCO&
Single
"Componentes Electronicos del Sistema"
name = "MS
charset weight
= o = 700
size underllne
= 9.75 = o
Italic = o
strlkethrough = O
Sans Serif"
' False
' False
' False Endproperty ForeColor
Height = 615 Left = 4080 TabIndex = 56
Width
- -
&A00000000&
TOP = 360 = 2895
End End Begin VB.CommandButton Tecla
Caption Beginproperty Font
= "F"
name = "Times New
charset weight
= o = 700
slze underline
= 21.75
Italic = 0 'False
strikethrough = 0 'False = O 'False
Endproperty Height = 495
Left Index = 15
TabIndex = 38
Width TOP = 4080
Roman"
= 8400
= 975 End Begin VB.CommandButton Tecla
Caption = "E " Beginproperty Font
2
name = "Times New
charset = o weight = 700 size = 21.75 underline italic
= 0 'False
strikethrough = 0 'False = 0 'False
Endproperty Height = 495
Left Index = 14
TabIndex = 37
Width
Roman"
= 7440
TOP = 4080
End Begin VB.CommandButton Tecla
= 975
Backcolor = &HOOFFFFFF& Caption BeginProperty Font
= 11 11
name = "Times New
charset weight
= o = 700
size = 21.75 underline ltalic
= O 'False
strikethrough = O 'False = O 'False
Height Endproperty
Left Index = 13
TabIndex = 36
Width
Roman"
= 495
= 6600
TOP = 4080 855
End Begln VB.CommandButton Tecla
Captlon BeginProperty Font
name
charset weight size = 21.75 underline = O 'False italic = O 'False strikethrough = O 'False
= "C"
Roman" = "Times New
= o = 700
Height Endproperty
Index = 12 Left = 5640 TabIndex = 35
Wldth = 975 End Begin VB.CommandButton Tecla
Caption = "B" Beginproperty Font
= 495
TOP = 4080
name = "Times New
charset weight
= o = 700
size = 21.75 underline italic
= O 'False
strikethrough = O 'False = O 'False
Endproperty Height = 495
Left Index = 1 1
TabIndex = 8400 = 34
Width = 975
Roman"
TOP = 3600
End Begin VB.CommandButton Tecla
Caption = "A"
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
BeginProperty Font name
charset = o weight = 700 size = 21.75 underline = O 'False italic = O 'False strikethrough = O 'False
Roman" = "Times New
Endproperty Helght = 495
Left Index = 10
= 7440 TdbIndex = 33
Width Top = 3600
= 975 End Begin VB.CommandButton Reset
Caption BeginProperty Font
= "&Reset"
name = "MS Sans
charset = o weight = 700 size = 8.25 underline = O 'False italic strikethrough = O 'False
= O 'False
Endproperty Height = 495 Left = 7440 TabIndex TOP
= 46
Width = 4695 = 1935
Ser1 f "
End Begin VB.CommandButton Command1
Captlon = "&Ejecutar" BeginProperty Font
name = "MS Sans
charset weight
= o = 700
size = 8.25 underline italic
= 0 'False = O 'False
strikethrough = O 'False Endproperty Height = 495 Left = 5625 TabIndex = 39
Wldth
Serif"
TOP = 4695
End Begin VB.CommandButton Tecla
= 1830
Appearance d6ckColor = &H80000005&
= 0 'Flat
Cancel Caption
= -1 'True
BeginProperty Font = "O"
name = "Times New
charset weight
= o = 700
underline size = 21.75
italic = O 'False
strikethrough = O 'False = O 'False
Endproperty Height = 495
Left Index = o TabIndex = 24
Wldth
Roman"
= 6600
TOP = 3600 = 855
End Begln VB.CommandBuiton Tecla
3
Captlon Beginproperty Font
= "9"
name = "Times New
charset weight size = 21.15 underline = O 'False italic strikethrough = O 'False
= O 'False
Endproperty Height = 495
Left Index = g
TabIndex = 32 TOP Width
Roman" = o = 700
= 5640
= 3600 = 975
End Begin VB.Timer Timer1
Interval = 1000 Left = 2160 Top = 3240
End Begin VB.CommandButton Funcion
Caption Beginproperty Font
name
charset = 2 weight = 700 size = 18 underline = O 'False italic strikethrough = O 'False
Endproperty Height = 615
Left Index = 4
TabIndex = 45
Width
- 11 - 11 -
- -
"Wingdings"
= -1 'True
= 8760
TOP = 1800
End Begin VB.CommandButton Funcion
= 615
Caption Beginproperty Font
name
charset weight
= 2 = 700
size underline
= 18 = O 'False
italic = -1 'True strikethrough = O 'False
- 11 ~ 11 -
- -
"Wingdings"
Endproperty Height = 615 Index Left TabIndex TOP Wldth
= 3 = 8160 = 44 = 1800 = 615
End Begin VB.CommandButton Funcion
Caption Beginproperty Font
name
charset = 2 weight = 100
underline size = 18
= O 'False italic = -1 'True strikethrough = O 'False
= "A"
- -
"Wingdings"
Endproperty Helght = 615
Left Index = 2
= 6840
Alejandro Montejo Rubio
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
TabIndex TOP Width
= 43 = 1800 = 1335
End Begin VB.CommandButton Funcion
Captlon Beginproperty Font
name
charset = 2 weight = 700 size underline
= 18
italic = O 'False
strikethrough = O 'False = -1 'True
Endproperty Helght Index Left = 6240 TabIndex = 42
Width
- 11 - I , - n
- -
"Wingdings"
= 615 = 1
TOP = 1800 = 615
End Begln VB.ComandButton Funclon
Caption Beginproperty Font
name
charset = 2 weight = 700 size underline
= 18
Italic = O 'False
strikethrough = O 'False = -1 'True
Endproperty Height = 615
Left Index = o
TabIndex = 5640 = 41
TOP = 1800 Width = 615
- 1, ~ I, -
- -
"Wingdings"
End Begln VB.TextBox DireccionEditarl
Alignment BackColor
= 2 'Center = &HOOCOCOCO&
Beginproperty Font = "MS Sans name
charset = o weight = 400 size = 8.25 underline = O 'False italic = O 'False strikethrough = O 'False
Serif"
Endproperty Forecolor = &HOOOOOOFF& Height = 285 Left = 8160
TabIndex Locked = -1 'True
Text = "0000: 0000"
Width
= 40
TOP = 5610 = 975
End Begin VB.CommandButton Tecla
Caption = "8" Beginproperty Font
name
charset = o welght = 100 size underline
= 21.15 = O 'False
italic strikethrough = O 'False
= O 'False
Endproperty
Roman" = "Times New
4
Height = 495
Left Index = E
TabIndex = 31
Width
= 8400
TOP = 3120 = 975
End Begln VB.CommandButton Tecla
Caption Beginproperty Font
= "7"
name = "Times New
charset = o weight = 700 size = 21.75 underline italic
= O 'False
strikethrough = O 'False = O 'False
Endproperty Height Index Left TabIndex TOP Width
Roman"
= 495 = 7 = 7440 = 30 = 3120 = 975
End Begin VB.CommandButton Tecla
Caption = I 8 6 I T Beginproperty Font
name = "Times New
charset = o weight = 700 size = 21.75 underline = O 'False italic = O 'False strikethrough = O 'False
Roman''
Endproperty Helght = 495
Left Index = 6
TabIndex = 29
Width
= 6600
TOP = 3120 = 855
End Begin VB.CommandButton Tecla
Caption = "5" Beginproperty Font
name = "Times New
charset weight
= o = 700
size = 21.75 underline italic
= O 'False
strikethrough = O 'False = O 'False
Endproperty Height Index Left TabIndex Top Width
Roman"
= 495 = 5 = 5640 = 28 = 3120 = 975
End Begin VB.CommandButton Tecla
Caption Beginproperty Font
= " 4 "
name = "Times New
charset weight
= o = 1 0 0
size = 21.75 underline italic
= O 'False
strikethrough = O 'False = O 'False
Endproperty
Roman"
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Height Index Left TabIndex Top Wldth
= 495 = 4 = 8400 = 27 = 2640 = 915
End Begin VB.CommandButton Tecla
Captlon = "3" Beginproperty Font
Roman" name = "Times New
weight charset = o
= 700 size = 21.75 underline italic
= O 'False = O 'False
strikethrough = O 'False Endproperty Height = 495 Index = 3 Left = 7440 TabIndex = 26
Width = 975 End Begin VB.CommandButton Tecla
TOP = 2640
Caption Beginproperty Font
name
charset weight size = 21.75 underline = O 'False italic = O 'False strikethrough = O 'False
= "2"
Roman" = "Times New
= o = 700
Endproperty Height Index Left TabIndex TOP Width
= 495 = 2 = 6600 = 25 = 2640 = 855
End Begln VB.CommandButton Tecla
Caption = " 1" BeglnProperty Font
name = "Times New
charset weight
= o = 700
size = 21.75 underline italic
= O 'False
strikethrough = O 'False = O 'False
Endproperty Height = 495 Index = 1 Left TabIndex TOP = 2640 Wldth
Roman"
= 5640 = 23
= 975 End Begin VB.PictureBox Picture16
Appearance = O 'Flat BackColor = &HOOFF0000& Beginproperty Font
= "MS Sans name
weight charset = o size = 8.25 underline = O 'False italic = O 'False strikethrough = O 'False
Serif"
= 700
5
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
EndProperty Forecolor = &H80000008& Height = 420' Left = 3840 Picture
minimo . f rx" : 4FD0 ScaleHeight = 390 Scalewidth TabIndex
= 1260 = o
Width Top = 5400
= 1290
= "Slstema
End Begin VB.PictureBox Picture15
Appearance = O 'Flat Backcolor = &HOOFF0000& Beginproperty Font
name = "MS Sans
charset weight
= o = 700
size underline
= 8.25 = O 'False
italic strlkethrough = O 'False
= O 'False
Endproperty Forecolor = &H80000008& Height = 435 Left = 240 Picture = "Sistema
ScaleHeight = 405 Scalewidth = 1260 TabIndex = 21 Top = 5400 Width = 1290
Serif"
minimo.frx1':5916
End Begin VB.PictureBox Picture14
Appearance = o 'E'lat Backcolor = &HOOFF0000& Beginproperty Font
name = "MS Sans
charset = o weight = 700
underline size = 8.25
italic = O 'False = O 'False
strikethrough = O 'False EndProperty Forecolor = &H80000008& Height Left
= 435 = 1680
Picture mlnimo. f rx" : 62B0
= "Sistema
ScaleHeight Scalewidth
= 405
TabIndex = 945
TOP = 20
Width = 5400 = 975
Serif"
End Begin VB.PictureBox Picture13
Appearance Backcolor
= O 'Flat = &HOOFF0000&
Beginproperty Font name = "MS Sans
charset = o weight = 700
underline size = 8.25
= O 'False ltalic = 0 'False strlkethrough = O 'False
Serif"
EndProperty Forecolor = &H80000008& Height = 435 Left = 2760
Picture = "Sistema minimo, f rx" : 6A2E
ScaleHeight ScaleWldth
= 405 = 945
TabIndex = 19 TOP = 5400 Width
End Begln VB.TextBox Dlsplay
= 975
Alignment Backcolor
= 2 'Center = &H00000000&
D-itaField Beginproperty Font
- 11 I, -
name = "Aria1
charset = o weight = 700 size underline
= 18 = O 'False
italic strikethrough = O 'False
= O 'False
Endproperty ForeColor = &HOOOOFFOO& Height = 855 Left = 5640 Locked = -1 'True MaxLength = 14 TabIndex Text
= 18 = "DISPLAY "
Width TOP = 240
= 3735
Narrow"
End O 'Flat
Backcolor = &HOOFF0000& Beginproperty Font
name = "MS Sans
charset = o weight = 700
underline size = 8.25
= O 'False Italic strikethrough = O 'False
= O 'False
Endproperty Forecolor = &H80000008& Height Left Picture = "Sistema
minimo . f rx" : 7 1AC ScaleHeight Scalewidth
= 465
TabIndex = 840
TOP = 17
Width = 4680 = 870
Serlf"
= 495 = 3240
End Oegln VB.PictureBox Plcturell
Appearance Backcolor
= O 'Flat = &HOOFF0000&
BeglnProperty Font name = "MS Sans
weight charset = o size = 8.25 underline = O 'False Italic = O 'False strikethrough = O 'False
Serif"
= 700
Endproperty Forecolor = &H80000008& Height = 495 Left = 3240 Picture
ScaleHeight = 465 ScaleWldth = 840 TabIndex = 16
mlnimo.frx":7932 = "Sistema
Alejandro Montejo Rubio 6
TOP Width
= 3960 = 870
End Begln VB.PlctureBox Picture10
Appearance = O 'Flat Backcolor = &HOOFF0000& Beginproperty Font
name = "MS Sans
charset = o weight = 700 size = 8.25 underline = O 'False italic strikethrough = O 'False
= O 'False
Endproperty Forecolor = &H80000008& Height Left Picture = "Sistema
minimo . f rx" : 80B8 ScaleHeight Scalewidth
= 465
TabIndex = 840 = 15
TOP Width
= 3120 = 870
Serif"
= 495 = 4200
End Begin VB.PictureBox Picture9
Appearance = O 'Flat Backcolor = &HOOFF0000& Beginproperty Font
name = "MS Sans
charset weight
= o = 700
size = 8.25 underline italic
= O 'False = O 'False
strikethrough = O 'False Endproperty Forecolor = &H80000008& Height = 480 Left = 4200 Picture
minimo.frx":883E ScaleHeight = 450 Scalewidth TabIndex
= 840 = 14
Width = 870 End Begin VB.PictureBox Picture8
Serif"
= "Sistema
TOP = 4680
Appearance = O 'Flat Backcolor = &HOOFF0000& Beginproperty Font
name = '7% Sans
charset weight
= o = 700
size underline
= 8.25
italic = O 'False
strikethrough = O 'False = O 'False
Endproperty Forecolor = &H80000008& Height Left
= 480 = 1200
Picture minimo.frx":8FC4
= "Sistema
ScaleHeight Scalewidth
= 450
TabIndex = 825
TOP = 13
Width = 4560 = 855
Serif"
End Begin VB.PictureBox Picture7
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Appearance Backcolor
= O 'Flat = &HOOFF0000&
Beginproperty Font name = "MS Sans
charset weight size = 8.25 underline italic
= O 'False = O 'False
strikethrough = O 'False Endproperty Forecolor = &H80000008& Height Left Picture = "Sistema
minimo,frx":974A ScaleHeight Scalewidth
= 465
TabIndex = 840 = 12
TOP Width
= 3960 = 870
Serif" = o = 700
= 495 = 4200
End Begin VB.PictureBox Picture6
Appearance Backcolor
= O 'Flat = &HOOFF0000&
Beginproperty Font name = "MS Sans
charset weight size = 8.25 underline = O 'False italic = O 'False strikethrough = O 'False
Serif" = o = 700
Endproperty Forecolor = &H80000008& Height = 480 Left = 2160 Picture
ScaleHeight = 450 Scalewidth = 840 TabIndex TOP Width
minimo . f rx" : 9EDO = "Sistema
= 11 = 4560 = 870
End Begin VB.PictureBox Plcture5
Appearance = O 'Flat Backcolor = &HOOFF0000& Beginproperty Font
name = "MS Sans
charset weight
= o = 700
size underllne
= 8.25
Italic = O 'False
strlkethrough = O 'False = O 'False
Endproperty Forecolor Height
= &H80000008& = 495
Left Index = o
= 3240
mlnimo.frx":A656 Picture = "Sistema
ScaleHeight ScaleWldth
= 465
TabIndex = 840
Top = 10
Width = 3120 = 870
Serlf"
End Begin VB.PictureBor Picture4
ADpearance Backcolor
= O 'Flat = &HOOFF0000&
BeglnProperty Font
7
name = "MS Sans Serif"
charset = o weight = 700 size = 8.25 underline italic
= O 'False = O 'False
strikethrough = O 'False Endproperty Forecolor = &H80000008& Height = 495 Left = 240 Picture = "Sistema
ScaleHeight = 465 Scalewidth = 840 TabIndex
Width
minimo . f rx" : ADDC
TOP = 9 = 4560 = 870
End Begin VB.PictureBox Picture3
Appearance = O 'Flat Backcolor = &HOOFF0000& Beginproperty Font
name = "MS Sans
charset weight size = 8.25 underline = O 'False italic = O 'False strikethrough = O 'False
Serif" = o = 700
Endproperty Forecolor = &H80000008& Height = 495 Left = 1800 Plcture = "Sistema
ScaleHeight = 465 Scalewidth = 1185 TabIndex TOP
= 8 = 3720
Width = 1215
minimo. frx" : B52A
End Begin VB.PictureBox Picture1
Appearance = O 'Flat BackColor = &HOOFF0000& Beginproperty Font
name = "MS Sans
charset = o weight = 700 size underline
= 8.25 = O 'False
italic = O 'False strlkethrough = O 'False
Serif"
Endproperty Forecolor = &H80000008& Height Left
= 495 = 360
Picture minimo. f rx" : BF98
= "Slstema
ScaleHeight Scalewidth
= 465
TabIndex = 1185
TOP = 7
Width = 3720 = 1215
End Begin VB.PictureBox Picture2
Appearance Backcolor
= O 'Flat = &HOOFF0000&
Beginproperty Font name = "MS Sans
charset = o weight = 700
Serif"
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
size = 8.25 underllne = O 'False italic = O 'False strikethrough = O 'False
Endproperty Forecolor = &H80000008& Height = 735 Index Left Picture = "Sistema
minimo . f rx" : CA06 ScaleHeight Scalewidth
= 705
TabIndex = 1605
TOP = 6 = 240
Width = 1635
= o = 3480
End Begin VB.PictureBox ASB-8805
Appearance = O 'Flat BackColor = &HOOFF0000& Beginproperty Font
name = "MS Sans
charset weight size = 8.25 underllne = 0 'False ltalic = 0 'False strlkethrough = O 'False
Serif" = o = 700
EndProperty Forecolor = &H80000008& Height Left Plcture = "Sistema
minimo.frx":DE98 ScaleHelght Scalewidth
= 705 = 1590
TabIndex = 5
Width = 1620
= 735 = 3480
TOP = 1080
End Begin VB.PictureBox PHIL-9131XN
Appearance = O 'Flat Backcolor = &HOOFF0000& Fillcolor = &HOOFFFFFF& Beginproperty Font
name = "MS Sans
charset welght
= o = 700
underllne size = 8.25
italic = O 'False
strikethrough = O 'False = O 'False
Endproperty Forecolor = &HOOFFFFFF& Height = 735 Left = 3480 Picture = "Sistema
ScaleHeight = 705 ScaleWldth = 1575 TabIndex = 4
Width
Serif"
minlmo.frx":F31E
TOP = 2040 = 1605
End Begin VB.PictureBox Intel-D80314H
Appearance = O 'Flat BackColor = &HOOFF0000& Beginproperty Font
name = "MS Sans
charset welght
= o = 700
underline size = 8.25
= O 'False
Serif"
8
italic = O 'False strikethrough = O 'False
Endproperty Forecolor = &H80000008& Height Left Plcture = "Sistema
minimo. frx": 107A4 ScaleHeight Scalewidth
= 705 -7 2550
TabIndex = 3
Width = 2580 End Begin VB.PictureBox Nec-8627P7
= 735 = 240
TOP = 1320
Appearance = O 'Flat Backcolor = &HOOFF0000& FillColor = &HOOFFOOFF& Beginproperty Font
name = "MS Sans
charset weight size = 8.25 underline = O 'False italic strikethrough = O 'False
= O 'False
Endproperty Forecolor = &H0080FFFF& Height = 735 Left = 240 Picture = "Sistema
ScaleHeight = 705 Scalewidth = 2520 TabIndex Top
= 2 = 2400
Wldth = 2550 End Begin VB.PictureBox Nec-D8279C2
Appearance = O 'Flat Backcolor = &HOOFF0000& Beginproperty Font
name = "MS Sans
charset weight size = 8.25 underline = O 'False italic = O 'False strikethrough = O 'False
Serif" = o = 700
minimo. frx": 127F6
Serif" = o = 700
Endproperty Forecolor = &H80000008& Height Left
minirno. frx":14848 Picture = "Slstema
ScaleHeight Scalewidth
= 705
TabIndex = 2535 = 1
Width = 2565
= 735 = 240
TOP = 240
End Begin Threed.SSPane1 SSPanell
Height Left TabIndex
Wldth = 4245 ~ Version ExtentX
= 65536 = 7488
- ExtentY = 10848 - StockProps = 15 Backcolor = 12632256 Bevelwidth = 5 Begin VB.Labe1 Label9
= 6150 = 5370 = 62
TOP = -15
-
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Alignment = 2 'Center Borderstyle = 1 'Fixed
Caption - -
Beginproperty Font
Single
"Registros"
name = "MS
charset welght
= o = 700
underline size = 8.25
= o italic = o strlkethrough = O
Sans Serif"
' False
' False
'False
Height Endproperty
Left = 2760 TabIndex = 61
Width
= 255
TOP = 1320 = 1215
End Begin VB.Labe1 Label5
Alignment = 2 'Center Borderstyle = 1 'Fixed
Caption = "Enter" Beginproperty Font
Single
name = ."S
charset = o weight = 700 size underline
= 8.25 = o
italic = o strikethrough = O
Sans Serif"
' False
'False
' False Endproperty Helght Left TabIndex
Width
= 255 = 1440 = 60
= 1335 TOP = 1320
End Begin VB.Labe1 Label4
BorderStyle = 1 'Fixed
Caption - -
Beginproperty Font
Single
"Instrucciones"
Sans Serif" name = "MS
charset weight size = 8.25 underline = o italic = o strikethrough = O
= o = 700
' False
' False
' False Endproperty Height Left TabIndex Top = 1320 Width
= 255 = 240 = 59
= 1215 End Yegin VB.Label Label2
Alignment Borderstyle
= 2 'Center = 1 'Fixed
Single
9
Caption = "Dirección
Beginproperty Font Editar"
name = "MS
charset weight
= o = 700
size = 8.25 underline = o italic = o strikethrough = O
Sans Serif"
' False
' False
' False Endproperty Height = 255 Left TabIndex
= 240 = 58
Top = 5640 Wldth = 2415
End End Begin Threed.SSPane1 SSPanel2
Height Left
= 6135
Tablndex = o = 57
Width = o = 5415
- Version = 65536 ExtentX = 9551 ExtentY = 10821
Forecolor = 15
Backcolor = 33023 = 4210752
Bevelwidth Borderwidth
= 10
Outline = 5
FloodColor = -1 'True = 14737632
Font3D = 2
TOP
- - - StockProps
End Begin VB.Label Label8
Borderstyle = 1 'Fixed
Caption - ~
Beginproperty Font
Single
"c: \actualizacion\anonimo"
name
charset = o weight = 400 size = 8.25 underline = O 'False italic strikethrough = O 'False
= O 'False
Endproperty Height Left TabIndex TOP Wldth
Serif" = "MS Sans
= 255 = o = 54 = 6120
End = 4575
Begin ComctlLib.ProgressBar ProgressBarl
Height Left TabIndex = 55
Width ~ Version ExtentX ExtentY
= 255 = 4560
TOP = 6120 = 2655 = 65536 = 4683 = 450
~ StockProps = 192 Appearance = 1 Borderstyle = 1
- -
End Begin VB.Labe1 Label7
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Alignment Borderstyle
= 2 'Center = 1 'Fixed
Captlon = "Label7" Beyinproperty Font
Single
Serif" name = "MS Sans
charset = o weight = 400 size = 8.25 underline = O 'False italic = O 'False strikethrough = O 'False
Height Endproperty
Left = 8400 TabIndex = 53
Width
= 255
TOP = 6120
End Begin VB.Labe1 Label6
= 1215
Alignment = 2 'Center Borderstyle = 1 'Fixed
Captlon = "Label6" Beginproperty Font
Single
name
charset = o weight = 400
underline size = 8.25
= O 'False Italic = O 'False strikethrough = O 'False
Serif" = "MS Sans
Endproperty Helght Left TabIndex = 52
Wldth
= 255 = 7200
= 6120 = 1215
TOP
End Begln VB.Labe1 Label3
Alignment Backcolor
= 2 'Center = &HOOCOCOCO&
Borderstyle = 1 'Flxed Single
Caption Sistema Minim0 8088"
Beginproperty Font
= "Simulador
name = "MS Sans
charset = o weight = 400 size = 8.25 underline = O 'False italic = O 'False strikethrough = O 'False
Serlf"
Endproperty Forecolor = &H00000000& Height = 255 Left = o TabIndex TOP Width
= 51 = 6360 = 9615
End Begin MSComDlg.CommonDialog Abrirmem
Left = 2520 TOP = 3960 Verslon ExtentX
= 65536
ExtentY = 841
StockProps = o FlleName = IN * . mem" Filter = I8 * , mem"
~
~
- = a47 ~
End Begln VB.Labe1 Label1
10
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Alignment = 2 'Center Appearance = O 'Flat BackColor = &HOOCOCOCO& Borderstyle = 1 'Fixed
Caption = "Universidad
Beginproperty Font
Single
Autonoma Metropolitana"
name = "MS Sans
charset = o weight = 700 size = 8.25 underllne = O 'False italic = O 'False strikethrough = O 'False
Serif"
EndProperty Forecolor = &H00000000& Height Left TabIndex
Width
= 270 = o = 22
= 9615 TOP = 6645
End Begln VB.Menu Archivo
Captlon = "&Archivo" Begin VB.Menu MenuAbrir
Caption = "&Abrir" Shortcut
End Begin VB.Menu MenuGuardar
= ^A
Caption = "&Guardar" Shortcut
End Begin VB.Menu Regresar-indice
= "G
Caption Shortcut
= "&Indice" = ^I
End Begin VB.Menu Salir
Caption Shortcut
= "&Salir" = ^X
End End Begin VB.Menu Comandos
Caption = "&Comandos" Begin VB.Menu
CambiaDireccionEdicionComando
direccion Edicion" Caption = "&Cambiar
Shortcut = ^C End Begin VB.Menu Separador
End Begin VB.Menu Ejecutar
~ Caption - 11 - 11
- ~
"&Ejecutar" Caption
Shortcut = ^E End Begin VB.Menu MenuDesensamblar
- -
"&Desensamblar"
End
Caption
Shortcut = ^D
End Begin VB.Menu Ayuda
Caption = "&Ayuda" Begin VB.Menu Hlstoarial
- -
"&Historial" Caption
Shortcut = ^H End
End Attribute VB-Name = "Form2" Attribute VB-Creatable = False
End
Attrlbute VB-Exposed = False
Private Sub ASB-8805-ClickO ' Este evento ejecuta los procedimientos necesarios para mostrar el grafico y la informaclón ' textual de cada componente flsico del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando los argumentos al procedimiento 'con los nombres de los archlvos necesarios para cada componente
Call Coordenadas Call Componentes-lnformacion ("pic7 .bmp", "hm6264. txt")
End Sub
Private Sub ASB_8805~MouseMove(Button As Inteqer, Shift As Integer, X As Single, Y As Single) ' Muestra mensale en la parte inferior de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un click, para información" End Sub
Private Sub CambiaDireccionEdicionComando-Click0 'Segmento$ = InputBox("Dame el segmento") ' 'While Len(Segmento$) < 4
I Wend Segmento$ = "0000" Desplazamiento$ = InputBox ("Dame el desplazamiento")
Val (1023) Then If CLng("&h" + Desplazamiento$) <
While Len(Desp1azamientoS) < 4
Desplazamiento$ Wend DlreccionEditar = CLng ("&H" + Segmento$) * 16 + CLng("&H" + Desplazamiento$) DireccionEditarl = UCase(Segmento$ +
Else respuesta = MsgBox("E1 desplazamlento esta fuera de rango ,ya que el segmento de código es de tamaño lk (1024) equivalente a '03FF'") End If
End Sub
1 Segmento$ = "O" t Segmento$ I '
DesplazamlentoS = "O" +
11 . . I, t Desplazamiento$)
Private Sub Commandl--Click ( ) Set Descod = DireccionEditarl
End Sub Forml.Show 1
Alejandro Montejo Rubio 11
Prlvate Sub Commandl-MouseMoveiButton As Integer, Shift As Integer, X As Single, Y As Single) I Muestra mensale en la parte inferior de la pantalla el mensaje" Label3,Caption = "Tecle de elecución, llama al CPU interno" End Sub
Private Sub Command2-ClickO 1nformacion.Visible = False
End Sub
Private Sub Command3-Click0 ' Esta Sub Cierra la ventana de información de componentes fisicos
End Sub
Private Sub DISPLAY-MouseMove(Butt0n AS Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Display de edición, solo vlsula imposible editar programas" End Sub
SSPanel1.Vlsible = False
Private Sub Ejecutar-CllckO Descod = DireccionEdltar1,Text Forml.Show 1 End Sub
Private Sub Form-Load0
"\mnemonicos. 1st" Nombre$ = App.Path f
1 = 0 ReDim mnemonicos (10) Open Nombre$ For Input As 1 '
Apertura del archivo microinstruciones.lst
While Not EOF(1) Input #1, mnemonicos (i) ' Se
i = i + l inicializa el arreglo de mnemonicos
Wend MaximoCodigo = i Close 1 CodigoOperacion = O DireccionEditar = &HO ' Se
inlcailiza la dirreccion inicial para edltar un programa
For i = O To 15
Next i For i = 3 To 4
Next i DISPLAY.Text =
Direccionamiento = 1
RegistrosiO) = "AL" ' Se
Tecla (i) .Enabled = False
Funcion(i).Enabled = False
mnemonicos(Codigo0peracion)
lniclalizan el arreglos de registros del microporcesador
Registros (1) = "AH" Registros (2) = "BL" Registros ( 3 ) = "BH" Registros ( 4 ) = "CL" Registros (5) = "CH" Registros ( 6 ) = "DL" Registros (7) = "DH" Registros ( 8 ) = "AX"
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Registros (9) = "BX" Registros(l0) = "CX" Registros(l1) = "DX" Reglstros(l2) = "SI" Registros (13) = "DI" Registros (14) = "BP" Registros(l5: = "SS" ReGistros (16) = "ES" Registros(l7) = "DS" Registros (18) = "CS" ( 1 Inicialización del arreglo de
codigos de error
Codigosdeerror ( O ) = "El Segmento de código, esta definido en O000 H"
Codigosdeerror ( 1 ) = "El Segmento de datos, esta definido en 0400 H"
Codigosdeerror(2) = "El Segmento de pila, esta definodo en 0800 HI'
Codigosdeerror(3) = "El Segmento estra esta, deflnido en OCOO H"
Codigosdeerror ( 4 ) = "La divlsión excede el tamaño de un registro de 8 bits,favor de modificar los registros AX y el XL ''
Codigosdeerror (5) = "libre" Codigosdeerror (6) = "libre" Codigosdeerror (7) = "libre" Cod'gosdeerror (8) = "libre" Codigosdeerror (9) = "libre"
' ListaDirecclonamiento(1) =
' ListaDirecclonamiento ( 2 ) = "Inmediato"
"Registro"
de operación LeeDatosOperacion ' llamada a datos
Edicion = O SegDesensamblar = O
End Sub
Control, X As Single, Y As Single) Private Sub FramelpDragDrop(Source As
End Sub
Private Sub Funcion-Click(1ndex As Integer)
Select Case Index Case O
'TECLA DE BUSQUEDA DE
CodigoOperacion =
If CodigoOperacion >=
CODIGO DE OPERACION 1
CodigoOperacion + 1
MaximoCodigo Then CodigoOperacion = MaximoCodigo - 1
Operacion(CodlgoOperaclon).mnemonico DISPLAY.Text =
Case 1
CODIGO DE OPERACION 2 'TECLA DE BUSQUEDA DE
If CodigoOperacion > O Then CodigoOperacion =
CodigoOperacion - 1 End If DISPLAY.Text =
Operacion(CodigoOperacion).mnemonico Case 2
' ENTER Select Case Edicion
Case O If
Operacion(CodigoOperacion).ByteRegl Then
12
1
Edicion = 1
Funcion(O).Enabled = False
Funcion(1) .Enabled = False
Funcion(3) .Enabled = True
Funcion(4).Enabled = True
Operacion(CodigoOperacion).Dato8 Then
ReglstroActual > 7 Then RegistroActual = 7
If
If
End If If
Operacion(CodigoOperacion).DatoHi Then
RegistroActual < 8 Then RegistroActual = 8
If
End If DISPLAY.Text =
Registros(RegistroActual!
Operacion(CodigoOperacion!.OffHi Then ElseIf
Ediclon = 2 DISPLAY.Text =
'I o o Funcion ( O ) .Enabled = False
Funcion (1) .Enabled = False
15
Tecla(Temp).Enabled = True
End If
Memoria(Direcci0nEditar) = CodigoOperacion
DireccionEditar + 1
Left(DirecclonEditarl.Text, 5 )
Right(DireccionEditarl.Text, 4 )
Tipos.BinHex(CLng(AuxlS) + 1 )
4
For Temp = O To
Next Temp
DireccionEditar =
auxS =
AuxlS = "LH" +
AuxlS =
While Len(Aux1S) <
AuxlS = "o" + AuxlS
Wend
DlreccionEditarl.Text = dux$ + AuxlS Case 1
If Operaclon(CodigoOperacion).ByteReg? Then
Edicion = 4 If
Operaclon(CodlgoOperacion).DatoHi Then
RegistroActual < 8 Then RegistroActual = 8
If
End If DISPLAY.Text =
Reglstros(RegistroActua1)
Funcion
Funcion
Funcion
Alejandro Montejo Rubio
O) .Enabled = False
1) .Enabled = False
3) .Enabled = True
Simulador del Sistema Minimo Inte l 8088 Proyecto Terminal
Funcion(4).Enabled = True
Operacion(CodigoOperacion).Dato8 Then Elself
Ediclon = 5 DISPLAY.Text
o o " Funzion (3) .Enabled = False
Funclon (4) .Enabled = False
15
Tecla(Temp).Enabled = True
ElseIf
For Temp = O To
Next Temp
Operacion(CodigoOperacion).DatoHi Then Edlcion = 6 D1SPLAY.Text =
"00"
Funcion ( 3 ) .Enabled = False
Funcion(4).Enabled = False
15
Tecla (Temp) .Enabled = True
ElseIf
For Temp = 0 To
Next Temp
Operacion(CodigoOperaclon).OffHi Then Edicion = 8 DISPLAY.Text =
o o Funcion(3).Enabled = False
Funcion (4) .Enabled = False
15
Tecla(Temp) .Enabled = True
For Temp = O To
Next Temp
Edicion = O DISPLAY.Text =
For Temp = O To
Else
Operacion(CodigoOperacion).mnemonico
15
Tecla(Temp).Enabled = False Next Temp
Funcion (01 .Enabled = True
Funcion(l).Enabled = True
Funcion ( 3 ) .Enabled = False
Funclon(4) .Enabled = False End If
Memoria(DireccionEdltar) =
RegistroActual
DireccionEditar + 1
Left(DireccionEditarl.Text, 5)
Right(DlreccionEdltarl.Text, 4)
Tipos. BinHex (CLng (AuxlS) + I)
4
DireccionEditar =
auxS =
AuxlS = "&H" +
AuxlS =
While Len(Aux1S) <
13
Aux 1 $ Auxl$ = "O" -I
Wend
DireccionEditarl.Text = dux$ + Auxl$ Case 2
Edicion = 3
Memoria(DireccionEditar) = CLng("&h" + DISPLAY. Text)
DireccionEdltar + 1
Left(DireccionEditarl.Text, 51
Right(DireccionEditarl.Text, 4 )
Tipos.BinHex(CLng(Auxl$) + 1)
4
AuxlS
DireccionEditar =
auxS =
AuxlS = "&H" +
Auxl$ =
While Len (AuxlS) <
AuxlS = "O" +
Wend
DireccionEditarl.Text = dux$ + Auxl$ DISPLAY. Text = "00"
Case 3 If
Operacion(CodigoOperaclon).ByteRegZ Then
Edicion = 4 If
Operacion(CodigoOperacion).DatoHl Then
RegistroActual < 8 Then RegistroActual = a
If
End If For Temp = O TO
15
Tecla(Temp).Enabled = False Next Temp
Funcion(3) .Enabled = True
Funcion(4).Enabled = True
Memoria (DireccionEditar) = CLng ("&h" + DISPLAY.Text)
DISPLAY.Text =
Registros(RegistroActua1) Else
Edicion = O
Memoria (DireccionEditar) = CLng("&h" + DISPLAY.Text)
DISPLAY.Text =
Operacion(CodigoOperacion).mnemonico For Temp = O To
15
Tecla(Temp).Enabled = False Next Temp
Funcion(0) .Enabled = True
Funcion(l).Enabled = True
Funcion ( 3 ) .Enabled = False
Funcion (4) .Enabled = False End If DireccionEditar =
auxS = DireccionEditar + 1
Left(DireccionEdltarl.Text, 5 )
Alejandro Montejo Rubio
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Right(DirecclonEditarl.Text, 4 )
Tipos.BinHex(CLng(Auxl$) + 1)
4
AuxlS
Auxl$ = "&H" +
Auxl$ =
Wh.lle Len(Auxl$) c
AuxlS = "O" +
Wend
DireccionEditarl.Text = aux$ + AuxlS Case 4
Edlcicn = O DISPLAY.Text =
For Temp = O To Operacion(CodigoOperacion).mnemonico
15
Tecla(Temp).Enabled = False Next Temp
Funcion(O).Enabled = True
Funcion(l).Enabled = True
Funclon ( 3 ) .Enabled = Fa1 se
Funclon ( 4 ) .Enabled = False
Memoria(DireccionEd1tar) = RegistroActual
DireccionEditar + 1
Left(DireccionEditarl.Text, 5)
Right(DireccionEditarl.Text, 4 )
Tipos. BinHex (CLng (AuxlS) + 1)
4
AuxlS
DireccionEditar =
auxS =
Auxl$ = "&H" +
AuxlS =
While Len(Auxl$) <
Auxl$ = "O" +
Wend
DirecclonEditar1,Text = dux$ + AuxlS Case 5, 7, 9
Edicion = O For Temp = O To
15
Tecla(Temp).Enabled = False Next Temp
Funclon(O).Enabled = True
Funcion(l).Enabled = True
Funcion (3) .Enabled = False
Funcion(4).Enabled = False
Memoria (DireccionEditar) = CLng ("&h" + DISPLAY.Text1
DireccionEdltar + 1
Left(DirecclonEditarl.Text, 5 )
Right(DlreccionEditarl.Text, 4)
Tipos.BinHex(CLng(Auxl$) + 1)
4
Aux 1 $
DirecclonEditar =
dux$ =
AuxlS = "&H" +
Auxl$ =
While Len (AuxlS) <
AuxlS = "O" +
14
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Wend
DireccionEditarl.Text = aux$ + AuxlS
Operacion(CodigoOperacion).mnemonico DISPLAY.Text =
Case 6 Edicion = 7
Memoria (DireccionEditar) = CLng("&h" + DISPLAY.Text)
DISPLAY. Text = "00" DireccionEditar =
auxS = DireccionEditar + 1
Left(DireccionEdltarl.Text, 5)
Right
Tipos
4
AuxlS
Direc
1 AuxlS = "&U" +
AuxlS =
While Len(Aux1S) <
DireccionEditarl.Text, 4)
BinHex (CLng (AuxlS) + 1)
AuxlS = "O" +
C
Wend
ionEditarl.Text = aux$ + AuxlS Case 8
Edicion = 9
Memoria (DireccionEditar) = CLnq ("&h" + DISPLAY.Text)
DISPLAY .Text = "00" DireccionEditar =
auxS = DireccionEditar + 1
Left(DlreccionEditarl.Text, 5)
Right(DireccionEditarl.Text, 41
Tipos.BlnHex(CLnq(Auxl$) + 1)
4
AuxlS
AuxlS = "&H" +
Auxl$ =
While Len(Aux1S) <
Auxl$ = "O" +
Wend
DireccionEditar1.Text =- aux$ + AuxlS
End Select
RegistroActual =
If RegistroActual > 18 Then
If
Case 3
RegistroActual + 1
RegistroActual = 18
Operaclon(CodlgoOperacion).Dato8 Then If RegistroActual > 7
Then RegistroActual = 7 End If If
Operacion(CodigoOperacion).DatoHi Then
Then RegistroActual = 8 If RegistroActual < 8
End If DISPLAY.Text =
Registros (RegistroActual) Case 4
If RegistrcActual > O Then
If RegistroActual = RegistroActual - 1
Operacion(CodigoOperaclon).DatoE Then If RegistroActual > 7
Then RegistroActual = 7 End If If
Operaclon(CodigoOperaclon).DatoHi Then
Alejandro Montejo Rubio
If RegistroActual c 8 Then RegistroActual = 8
End If DISPLAY.'cxt =
Reqistros(ReqistroActua1)
End Sub End Select
Private Sub Funcion-MouseMove(1ndex As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3. Caption = "Teclas de edición" End Sub
Private Sub Histoarlal-CllckO historial.Show End Sub
Prlvate Sub Intel-D80314H-ClickO ' Este evento elecuta los procedimientos necesarios para mostrar el grar:co y la información ' textual de cada componente fisico del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando los argumentos al procedimiento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes-informacion ("pic9. bmp", "8088.txt")
End Sub
Private Sub Intel-D80314H~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensale en !a parte inferior de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un click, para información"
End Sub
Private Sub MenuAbrir-CllckO ' AbrirArchivo
Dim Dlreccion A s Long Dim Tamaño As Integer Dim Dato As Byte Dim contador As Integer
For i = O To 65535 Step 1 Memoria(i) = CLng("&h" + "00")
Dlm i
Next i ' Form1 . DE. Text = "O000 : 0000" CodigoOperacion = O DireccionEditar = &HO
Pru?ressBarl.Min = 1 ProgressBarl.Max = 25 ProgressBarl.Value =
ProgressBarl.Min
On Error GoTo Finalizar Label8.Captlon = "Archivo: " +
Abrirmem.ShowOpen Abrirmem.filename
15
1 Open Abrirmem.filename For Input As
While Not EOF(1j On Error GoTo Finalizarcerrar
Input # I , Direccion, Tamaño
For i = 1 To Tamaño
Input #1, Dato Memoria(Direcci0n + i - 1)
= Dato ProgressBarl.Value = i
Wend
ProgressBarl.Min
Finalizarcerrar: Close 1 Forml.HazDump
Next i
' ProgressBarl.Value =
Finalizar:
End Sub
Private Sub MenuDesensamblar-Click0 Desensamblador.Show 1
End Sub
Private Sub MenuGuardar-Click0 ' GuardarArchivo
Dim Direccion AS Long
On Error GoTo Finalizar Dim Tamaño As Integer
Abrirmem.Flags = &H806& Abrirmem.DialogTit1e = "Guardar
Abrirmem.ShowSave Open Abrirmem.filename For Output
As 1 Label8 .Caption = "Archivo : " +
Abrirmem.filename Direccion = O Do
memoria"
Direccion =
If Direccion >= 1023 Then Exit
Print #1, Direccion dux& = Direccion Tamaño =
Print #1, Tamaño For i = 1 To Tamaño
Forml.ObtenDireccionNoCero(Direccionj
Do
Forml.ObtenTamaño(aux&j
Print # I , Memoria(Direcci0n + i - 1)
Next i Direccion = Direcclon + Tamaño
Loop Until Direccion >= 1023
Close 1 Finalizar:
End Sub
Private Sub Nec-8627P7-ClickO
procedimientos necesarios para mostrar ' Este evento ejecuta los
el grafico y la información
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
' textual de cada componente fisico del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando l o s argumentos al prozedimiento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes informacion("picl4 .bmp", " 8 2 5 5 . txt"j-
End Sub
Private Sub Ne~-8627P7~MouseMove(Button As Integer, Shift As Integer, X As Slngle, Y As Single) ' Muestra mensaje en la parte inferlor de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un cllck, para Información" End Sub
Prlvate Sub Nec-D8279C2_CllckO ' Este evento ejecuta los procedimientos necesarios para mostrar el grafico y la información ' textual de cada componente fisico del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando los argumentos al procedimiento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes-informacion ("pic13 .bmp", "8279.txt"j
End Sub
Private Sub Nec D8?79C2-MouseMove(Button As Integer, Shift As Integer, X As Single, Y A; Single) ' Muestra mensale en la parte inferior de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un click, para información" End Sub
Private Sub PHIL-9131XN-CllckO ' Este evento ejecuta los procedimientos necesarios para mostrar el grafico y la información ' textual de cada componente fisico del slstema 8088, 'La llamada al segundo procedimiento se efectua pasando los argumentos al procedimiento 'con los nombres de los archivos necesarios para cada componente Call Coordenadas Call Componentes informacion ( " ~ 1 ~ 6 . bmp", "0809.txt")-
End Sub
Private Sub PHIL_9131XNMouseMove(Button AS
Y As Single) Integer, Shift As Integer, X As Single,
16
' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un click, para información" End Sub
Private Sub Picturel-Click0 ' Este evento ejecuta los procedimientos necesarios para mostrar el grafico y la información ' textual de cada componente flslco del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando los argumentos al procedimiento 'con los nombres de l o s archlvos necesarios para cada componente
Call Coordenadas Call Componentes-informaclon ( " ~ 1 ~ 1 7 . bmp", "14245. txt")
End Sub
Private Sub Picturel-MouseMove(Butt0n As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte Inferior de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un click, para información" End Sub
Private Sub Picturelo-Click0 ' Este evento ejecuta los procedimientos necesarios para mostrar el grafico y la información ' textual de cada componente fisico del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando los argumentos al procedimiento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes-informacion ("picl9. bmp", "7404. txt")
End Sub
Private Sub Picturelo-MouseMove(Butt0n As Integer, Shift As Integer, X As Slngle, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un cllck, para informaclón" End Sub
Private Sub Picturell-Click0 ' Este evento elecuta los procedimientos necesarlos para mostrar el grafico y la información ' textual de cada componente fislco del sistema 8088, 'La llamada al segundo procedimiento se
procedimiento efectua pasando los argumentos al
'con los nombres de los archivos necesarios para cada componente
Call Coordenadas
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Call Componentes informacion ("picl9. bmp", 9 , 7 4 0 4 . txt")-
End Sub
Private Sub Picturell-MouseMove(Butt0n As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3,Caption = "Oprlrna sobre el componente un click, para información" End Sub
Private Sub PicturelZPClick0 ' Este evento ejecuta los procedimientos necesarios para mostrar el grafico y la información ' textual de cada componente fislco del sistema 8088, 'La llamada al segundo procedlmiento se efectua pasando los argumentos al procedimiento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes lnformacion ("pic15 .bmp", "7414. txt")-
End Sub
Private Sub Pi~turel2~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un click, para información" End Sub
Private Sub Plcturel3-ClickO ' Este evento elecuta los procedimientos necesarios para mostrar el grafico y la información ' textual de cada componente fisico del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando los argumentos al procedimiento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes informacion("pic2. bmp", "8push. txt"7
End Sub
Private Sub Picturel3~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Muestia mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un click, para información" End Sub
Private Sub Picturel4-Click0 ' Este evento ejecuta los procedimientos necesarios para mostrar el grafico y la información
17
' textual de cada componente fisico del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando los argumentos al procedimiento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes-informacion ("pic21. bmp", "resis. txt")
End Sub
Prlvate Sub Pi~turel4~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Captlon = "Oprima sobre el componente un click, para información" End Sub
Private Sub Picturel5-Click0 ' Este evento ejecuta los procedimientos necesarios para mostrar el grafico y la información ' textual de cada componente fisico del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando los argumentos al procedlmiento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes-informacion ("picl6. brnp", "resis. txt")
End Sub
Private Sub PicturelS~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) I Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un cllck, para información" End Sub
Private Sub Pict~relG~ClickO ' Este evento ejecuta los procedimientos necesarios para mostrar el graflco y la información ' textual de cada componente fisico del sistema 8088, 'La llamada al segundo procedlmiento se efectua pasando los argumentos al procedimlento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes informacion ("pic12 .bmp", "capa. txt")
End Sub
Private Sub PicturelG-MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje"
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
Label3.Taption = "Oprima sobre el componente un click, para información" End Sub
Private Sub PictureZ-Click(Index As Integer) ' Este evento ejecuta los procedimientos necesarios para mostrar el grafico y la información ' textual de cada componente fisico del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando los argumentos al procedimiento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes informacion ("pic3. bmp", "2764. txt")-
End Sub
Private Sub Picture2-MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Oprlma sobre el componente un click, para información" End Sub
Private Sub Pi~ture3~ClickO ' Este evento ejecuta l o s procedimientos necesarios para mostrar el grafico y la Información ' textual de cada componente fisico del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando l o s argumentos al procedimiento 'con lo$ nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes-informacion ("pic8. bmp", "74373. txt") End Sub
Private Sub Picture3_MouseMove(Button As Integer, Shift As Integer, X As Slngle, Y As Single) ' Muestra mensaje en la parte inferlor de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un click, para información" End S u b
Private Sub Pict~re4~CllckO ' Este evento elecuta los procedimientos necesarios para mostrar el yrzfico y la información ' textual de cada componente fisico del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando los argumentos al procedimiento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes-informacion ("pic1 .bmp", "7432. txt")
18
End Sub
Private Sub Picture4~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Captlon = "Oprima sobre el componente un click, para información" End Sub
Private Sub Pi~ture5~Click(Index As Integer) ' Este evento ejecuta los procedimientos necesarios para mostrar el grafico y la información ' textual de cada componente flsico del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando los argumentos al procedimiento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes informacion ("pic4 .bmp", "74121. txt")
End Sub
Private Sub Picture5-MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un click, para información" End Sub
Private Sub Picture6-Click0 ' Este evento ejecuta los procedimientos necesarios para mostrar el grafico y la información ' textual de cada componente fisico del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando los argumentos al procedlmiento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes-informacion ("piclo. bmp", ''7400. txt")
End Sub
Private Sub PictureG-MouseMove(Butt0n As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un click, para información" End Sub
Private Sub Pi~ture7~ClickO
procedimientos necesarios para mostrar ' Este evento ejecuta los
el grafico y la información ' textual de cada componente fisico del sistema 8088,
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Intel 8088 Proyecto Terminal
'La llamada al segundo procedimiento se efectua pasando los argumentos al procedimiento 'con los nombres de los archlvos necesarios para cada componente
Call Coordenadas Call Componentes-informacion ("pic5 .bmp", "sn75188. txt")
End Sub
Private Sub Picture7~MouseMove(Button As Integer, Shlft As Integer, X As Single, Y As Slngle) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un cli.ck, rara informaclón" End Su;.
Private Sub Picture8PClick0 ' Este evento ejecuta los procedimientos necesarios para mostrar el grafico y la información ' textual de cada componente fisico del sistema 8088, 'La llamada al segundo procedimiento se efectua pasando los argumentos al procedimiento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes-informacion ("picll. bmp", "74138.txt")
End Sub
Private Sub Pi~ture8~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un click, para información" End Sub
Private Sub Picture9-Click0 ' Este evento ejecuta los procedimientos necesarios para mostrar el grafico y la información
slstema 8088, ' textual de cada componente fislco del
'La llamada al segundo procedimiento se efectua pasando los argumentos al procedimiento 'con los nombres de los archivos necesarios para cada componente
Call Coordenadas Call Componentes informacion ("picl8. bmp", "74138. txt"7
End Sub
Private Sub Picture9MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Oprima sobre el componente un click, para información"
19
End Sub
Private Sub Regresar-indicePClick() Hide Unload Form2
End Sub Portada.Show
Prlvate Sub Reset-Click0 Dlm i For i = 0 To 65535 Step 1 Memoria(i) = CLng("&h" + "00" Next i DirecclonEditarl.Text = "0000 CodigoOperacion = O
DirecclonEditar = &HO End Sub
1
: 0000"
Private Sub Reset-MouseMovelButton As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Resetea la memoria" End Sub
Private Sub Salir-Click0
End Sub End
Private Sub SSCommandl-CllckO
End Sub
Prlvate Sub SSPanell"ouseMove(Butt0n As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Area de edición de programas" End Sub
Private Sub SSPanel2~MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensaje" Label3.Caption = "Area sin uso en ejecución" End Sub
Private Sub Tecla-Click(1ndex As Integer)
ob~eto display el valor hexadecimal de ' Este procedimiento muestra en el
la tecla oprimlda
If DigitosHex = O Then DISPLAY.Text
If DigitosHex = 2 Then DISPLAY.Text =
Rlght (DISPLAY. Text, 11 DigitosHex = DigitosHex - 1
I , I, ~
End If If DigitosHex < 2 Then
Select Case Index
Codigo Desensambla VERSION 4.00
Alejandro Montejo Rubio
Simulador del Sistema Mínimo Inte l 8088 Proyecto Terminal
Case O To 9 DISPLAY.Text =
DISPLAY.Text + Chr(&H30 + Indexl Case 10 To 15
DISPLAY.Text + Chr(&H37 + Indexl DISPLAY. Text =
End Select DlgitosHex = DigltosHex + 1 End If
End Sub
Public Sub Componentes lnformacion(picture As String, archlvo AS string) ' este procedimiento se utiliza para llamar los archivos *.bmp que tienen información grafica de los 'componentes fisicos del sistema 8088,
COMPONENTE.picture; los cuales son asignados al objeto
' Ademas de cargar al Objeto form2.textl.text el archivo de texto de información del componente Set X = Loadpicture (App.Path + " \ " + picture) componente.picture = X b$ = App.Path + " \ " + archivo Open b$ For Input As #1 Texto$ = " "
Do While Not EOF(1) Line Input #1, a$ Texto$ = Texto$ + a$ + ChrS (131
+ ChrS(101 LOOP
Textl.Text = Texto$
Close #1
End Sub Public Sub Coordenadas0 ' El objeto FRAME llamado Información conlunta a los objetos text1 y plcture , los cuales
grafica de cada componente fisico del ' n o s muestran la información textual y
sistema. ' Aqul se modifican l a s propiedades de coordenadas, para restaurar el objeto Información.
1nformaclon.Visible = True 1nformacion.Height = 3495 1nformacion.Left = 960 1nformacion.Top = 360 1nformacion.Width = 7695
End Sub
Private Sub TeclaMouseMove(1ndex As Integer, Button As I~~ceger, Shift As Integer, X As Single, Y As Single) ' Muestra mensaje en la parte inferior de la pantalla el mensale" Label3.Caption = "Teclas de ediclón numerica , hexadecimal" End Sub
Private Sub Timerl-Timer0 Label6.Caption = Time Label7.Caption = Date End Sub
Begin VB.Form Desensamblador
20
Appearance - - BackColor Caption - -
ensamblador" ClientHeight = ClientLeft ClientTop - - Clientwidth ControlBox FillColor Fillstyle - - Beginproperty Font
- -
- -
- - - - - -
name
charset weight
underline size
italic strikethrough
Endproperty FontTransparent = Forecolor Height - - HelpContextID = Left LinkTopic - - ScaleHeight - - ScaleMode Scalewidth TOP Width
Serif"
- -
- -
- - - -
- - - -
O 'Flat &HOOFF0000& "Codigo
4965 1035 1455 2535 O 'False &HOOFFFFFF& O 'Solid
= "MS Sans
= o = 700 = 9.75 = O 'False = O 'False = O 'False
O 'False &HOOFFFFOO& 5655 4 975 "Form3" 20. 687 4 'Character 21.125 825 2655
Begin ~~.VScrollBar Barravertical Height = 4815 Largechange Left
= 20 = 6960
Max = 1024 TabIndex = o Top Width = 240
= o
End Begin VB.Menu Comandos
Caption = "&Comandors" Begin VB.Menu CambiarDireccion
Caption = "&Cambiar dlreccion de inicio"
End Begin VB.Menu Ejecutar
Caption - - "&Ejecutar"
End Begin VB.Menu Borrar
End Caption = "&Salir"
End End Attribute VB-Name = "Desensamblador" Attribute VB-Creatable = False Attrlbute VB-Exposed = False
Public Sub PonCódigo(NumLinea As Integer, segini As Long)
Llnea = O Dim dux As Long indice = O Tamaño = 1
Operandol = False
Desensamblador.CurrentX = O Desensamblador.Sca1eMode = 4
While indice < 1024 And Llnea < Desensamblador.CurrentY = O
NumLinea
Operacion(Memoria(indice + segini)).mnemonico
Texto =
Simulador del Sistema Minimo Inte l 8088 Proyecto Terminal
While Mid(Texto, k, 1) <> " "
k = l
And k < Len(Texto) k = k + l
Wend Texto = Mid(Texto, 1, k) + " "
If Operacion(Memoria(indice + segini)).ByteRegl Then
Registros(Memoria(indice + segini + Tamaño) )
Texto = Texto +
Tamaño = Tamaño + 1 Operandol = True
End If If Operacion(Memoria(indice +
If Operandol Then Texto =
Texto = Texto + " [ ' I
dux = Memoria(indice +
Texto = Texto + BlnHex(aux) dux = Memoria(indice +
Texto = Texto + BinHex(aux) Texto = Texto + " I " Tamaño = Tamaño + 2
segini)).OffHi Then
Texco + " , "
segini + Tamaño)
seginl + Tamaño + 1)
End If If Operacion(Memoria(indice +
If Operandol Then Texto =
aux = Memoria(indice +
segini) ) . Dato8 Then
Texto + ", "
segini + Tamaño1
c
segin?
Texto
seginl
segini
Texto = Texto + BinHex(aux) Tamaño = Tamaño + 1
End If If Operacion(Memoria(ind1ce +
If Operando1 Then Texto =
aux = Memoria(1ndice +
Texto = Texto + BinHex(aux1 dux = Memoria(indice +
Texto = Texto + BinHex(aux) Tamaño = Tamaño + 2
).DatoHi Then
11 11
+ Tamaño)
+ Tamaño + 1)
End If If Operacion(Memoria(indice +
segini) ).ByteReg2 Then
Registros(Memoria(indice + segini + Tamaño) )
Texto = Texto +
Tamaño = Tamaño + 1 End If Operandol = False If indice < BarraVertlcal.Va1ue
And Llnea = O Then CambioAtras = Tamaño If indice >=
BarraVeLtical.Value Then If Linea = O Then
End If Linea = Linea + 1 Print Texto
CambioAdelante = Tamaño
End If indice = indice + Tamaño Tamaño = 1
End Sub
Private Sub BarraVertical_ChangeO If banderaCambios Then banderacambios = False
Wend
Alejandro Montejo Rubio 2
If UltimoValor = BarraVertical.Value - 1 Then
CambioAdelante UltimoValor = BarraVertical.Va1ue ElseIf UltimoValor =
BarraVertical.Va1ue + 1 Then
CambioAtras UltimoValor = BarraVertical.Va1ue Else
End If Desensamblador.ScaleMode = 4 Desensamblador.ScaleWldth =
Desensamblador.ScaleWidth Desensamblador.ScaleHe!.ght =
Desensamblador.Sca1eHeight Desensamblador.BarraVertica1.Left = Desensamblador.ScaleWidth - 2 Desensamblador.BarraVertica1.Top = O Desensamblador.BarraVertica1.Height =
Desensamblador.Sca1eHeight Desensamblador.Cls PonCódigo Desensamblador.ScaleHeight, SegDesensamblar banderacambios = True End If End Sub
BarraVertical.Va1ue = UltimoValor +
BarraVertica1.Value = UltimoValor -
UltimoValor = BarraVertical.Va1ue
Código Historial VERSION 4.00 Begin VB.Form historial
Backcolor = &HOOCOCOCO& Caption = "Form3" ClientHeight = 4140 ClientLeft = 1140 ClientTop Clientwidth
= 1515 = 7305
ClipControls = O 'False ControlBox = O 'False Height = 4545 Left = 1080 LinkTopic = "Form3" ScaleHeight = 4140 Scalewidth = 7305
Width = 7425 Windowstate = 2 'Maximized Begin VB.PictureBox SSPanell
TOP = 1170
Forecolor = &H00000000& Height = 6975 Left = 1440 ScaleHeight = 6915 Scalewidth = 9555 TabIndex TOP
= o Width
= 600 = 9615
Begin VB.CheckBox Check1 Caption
Helght = 255 Left = 840 TabIndex TOP Width
Ambar" = "Color
= 6 = 6240 = 1215
End Begin VB.CommandButton Command3
Caption = "C&errar"
Alejandro Montejo Rubio
Size Charset Weight Underline Italic Strikethrough = Endproperty ForeColor
Height Left ScaleHeight Scalewidth TabIndex TOP Width
- - - - - - - - - -
- -
End
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
Private Sub Borrar-Click0 Hide End Sub
Private Sub CambiarDireccion-Click0 aux = InputBox("Dirección de inicio para desensamblar", "Cambio", Str(SegDesensamb1ar)) 'SegDesensamblar = CLng("&h" + aux) SegDesensamblar = Val("&h" + aux)
End Sub Desensamb1ador.Refresh
Prlvate Sub Form-Load ( ) CambioAtras = 1 bander2Sambios = True End Sub
Private Sub Form-Paint ( 1 Desensamb1ador.ScaleMode = 4 Desensamblador.ScaleWidth =
Desensamblador.ScaleWidth Desensamb1ador.ScaleHeight = Desensamblador.Sca1eHeight Desensamblador.BarraVertica1.Left = Desensamblador.ScaleWidth - 2 Desensamblador.BarraVertica1.Top = O Desensamblador.BarraVertical.Height =
Desensamblador.Sca1eHeight Desensamblador.Cls PonCódigo Desensamblador.ScaleHeight, SegDesensamblar End Sub
8 F 9 1 - l l C E - 9 D E 3 - 0 O A A O l 7 4 B B 8 5 1 ) Beginproperty Font IOBE35203-
N ame = '"S Sans Serif"
Size Charset Weight Underline = O 'False Italic = O 'False Strikethrough = O 'False
Height Endproperty
Left = 3720 TabIndex = 1
Wldth = 1935
= 12 = o = 400
= 420
TOP = 6360
End Begin VB.PictureBox SSTabl
Backcolor
Beginproperty Font (OBE35203-
- -
&H00808080&
8F91-llCE-9DE3-00AAO04BB851) Name = "MS Sans Serlf"
' False ' False ' False
FF0000& 735 600 675 8355 2 840 8415
Begin VB.PictureBox SSPanel2 Height = 4455
3
I
Left = 600 ScaleHeight = 439s Scalewidth = 8355 TabIndex TOP
= 4 = 1560
Width = 8415 Begin VB.TextBox Text2
BackColor
Beginproperty Font
- -
&HOOFF0000&
{OBE35203-8F91-llCE-9DE3-0OAAOO4BB851) Name = "MS
Sans Serif" Size = 9.75 Charset Weight
Italic = 0 'False Strikethrough = O 'False Endproperty
= o = 400
Underline = O 'False
Forecolor = &HOOFFFFOO& Height = 3 6 1 5
Left = 600 MultiLine = -1 'True ScrollBars = 3 'Both TabIndex = 5
Visible Width
TOP = 480 = O 'False
= I455 End
End Begin VB.Label Label10 Alignment = 2 'Center AutoSize = -1 'True Caption = "Familia
Intel"
8F91-1lCE-9DE3-00AAOO4BB8~~] Beginproperty Font (OBE35203-
Name = "MS Sans Serif" Size = 13.5 Charset = o Weight = 700 Underline = O 'False Italic = O 'False Strlkethrough = O 'False
Height = 360 Left = 3615 TabIndex = 3
Width Top = 240
Endproperty
= 1725 End
End
Attribute VB-Name = "historial" End
Attribute VB-Creatable = False Attribute VB-Exposed = False Sub llamarhistorial(archivo As String)
Open b$ For Input As #1 Texto$ = I"'
Do While Not EOF(1)
b$ = App.Path + " \ " + archivo
Line Input #1, a$ Texto$ = Texto$ + a$ + ChrS(13) +
Chr$ ( 10)
Simulador del Sistema Minimo Intel 8088 Proyecto Terminal
tEXT2.Text = Texto$ LOOP
Close #1 End Sub
Private Sub Checkl-Click0 If Checkl.Value = 1 Then
tEXT2.BackColor = &HO& tEXT2.ForeColor = &HFFOO& Checkl.Caption = "Color Azul"
Else If Checkl.Value = O Then tEXT2,BackColor = &HFF0000 tEXT2.ForeColor = &HFFFFOO Checkl. Caption = "Color Ambar" End If
Ena If
End Sub
Private Sub Command3-Click0 Hide Unload historial
End Sub Form2.Show
Private Sub Form-Load ( ) tEXT2.Vlslble = True Call llamarhistorial ("3000.TXT") End Sub
Sub SSTabl-Click(Previ0usTab As
tEXT2.Visible = False Integer)
tEXT2.Visible = True Index = sstabl.Tab
Select Lase Index Case O
Case 1
Case 2
Case 3
Case 4
Call llamarhistorial ("3000.TXT")
Call llamarhistorial ("4004. txt")
Call llamarh~storial("4040. txt")
Call llamarhistorial ("8008. txt")
Call llamarhistorial ("8048. txt") Case 5
Case 6
Case 7
Case 8
Case 9
Case ,O
End Select
Call llamarhistorial('
Call llamarhistorial(
Call llamarhistorial(
C a l l llamarhlstorial(
Call llamarhistorial(
Call llamarhistorial
End Sub
Private Sub tEXT2-ChangeO End Sub
"8080. txt")
"8085. txt")
"8086. txt")
"80088.txt")
"80286. txt")
"80386. txt")
Alejandro Montejo Rubio 2
Top Related