Download División - TESIUAMI
Document related concepts
no text concepts found
Transcript
División: Ciencias Basicas Ingenieria. e Carrera: Computación. Materia: Proyecto de Investigación II. Fecha: 30 de Marzo I99 7 Alumno: Alejandro Briones Gerardo. Matricula: 882244 19. Asesor: Ing. Ornar A\laldonado Hernandez. , I I I i . Índice Sección l. Reseña histórica del microprocesador Intel Sección 2. Arquitectura del microprocesador Intel 8088 Sección 3. Manual de Usuario Sección 4. Manual Técnico Sección 5. Código del sistema. Sección 6. Conclusiones. Sección 1 Reseña histórica del microprocesador Intel RESEÑA DEL PROCESADOR 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 ciclosde microinstrucciones de 160 ns. La arquitectura es tal que permite confeccionar un calculador de palabra de cualquier longitud se consiguenmejores en incrementosde 2 bits,añadiendohardwarecomplementario, características incluso lade 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 bits deestadoy 8 bitsde la de ROM analizando la microins-truccionactual,los macroinstruccion 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). EI 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 registrosgenerales.Disponede salidas de carry para generar ripple-carry o lookahead. 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. o desdeun Cadarnicroinstruccionmuevedatosdesde un busdeentradaespecificado registro, hacia un destino seleccionado, a través de la ALU. La rnicroinstruccion incluye el código de función de la ALU, bits de control de estado, y saltos condicionales hacia la próxima microinstruccion. y todo ello se ejecuta en un ímico ciclo de 160 ns. Disponiendo hardware externo, concretamente un conjunto de latches entre ROM y CPE, la ejecución puede solaparsecon la extracción(fetch) de la siguiente rnicroinstruccion. Conello los ciclos de microinstruccionesquedan reducidos a 120 ns. i El Intel 4004es el primermicroprocesadoraparecidoenelmercado y miembrode la familia MCS-4, conjunto microcomputador 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 hnciones de CPU. RAM y ROM (con entradas y salidas en el mismo chip) y puedenserinterconectadosconvariosmediosdealmacenamiento.Lascomunicaciones entre los chips se realizan a través deun Único bus de 4 bits, lo cual permit.e que todos los chips del MCS-4 estén realizados en circuitos integrados dual-inline de 16 patillas; pero esto es causa de que elciclode instrucción sea lento ya que debe recurrirse a un uso multiplexado del bus, y los tiempos deejecución son 10.8 o 21.6 microsegundos ( según las instrucciones de que setrate). El microprocesador tiene un conjunto de registros para uso general constituido por 16 registros de 4 bits además de un acumulador, tambien de 4 bits. Las direcciones de retorno se almacenan en un stack de 4 posiciones, en el cual el dígito seleccionado es el contadordeprogramaactual. El stack y por lo tantoelcontador de programa es de 12 bits con lo cual la capacidad de direccionadoes de 4 Kbits de programa. Las instrucciones no pueden hacer referencia a datos por medio de un direccionado directo; unicamente se dispone del modo dedireccionado indirecto atravésderegistro.Para seleccionar un datoalmacenado es necesaria una secuenciaenteradeinstrucciones. Únicamente una cuidadosa colocación de los datosen la memoria RAM puede hacer menos difícil el direccionado. INTEL 4040 De la misma forma quela experiencia con el8008 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 velocidad lenta, ahorabien la mayoría de losdefectos del 4004 han sidosolventadosenel.El4040 comparado con el 4004 ofrece las siguientes diferencias: 4040 Cdpsula Espacio en ROM Numero De Registros Instrucciones Lógicas -Interrupciones Instrucciones HALT Stack De Dirección De Retorno 4004 16 Terminales 4K 16 NO NO NO 4" 12 24 Terminales 8K 24 SI SI SI S* 12 El espacio de memoria para programa ha sido ampliada de 4 K a 8 K creando un nuevo 4 ). banco de memoria (el 4004 solo tenia un banco de 4 K y el 4040 tiene dos bancos de 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 llamadasarutinasentre bancos. Las interrupcionesse manejan creandounallamadaa 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 desubrutina.Paraquelas interrupciones puedan ser atendidasconviene dejar siempre un nivel de chip de entraday salida para utilización universal. INTEL 8008 El 8008es el microprocesador de 8 bits, introducido por Intel después del 4004. Esta realizado con tecnología P-MOSy 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 CPUesta organizada internamente como un computador de 7 registros. Uno de ellos es el acumulador que es el registro por el cual pasantodaslas instrucciones aritméticas y de entradalsalida. El 8008 no soporta instrucciones con direccionamiento directo de memoria, porlo 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 multiplexores y latches necesarios para almacenar la direccion. El sistema de interrupción del 8008 es un modelo de sencillez. Cuando llega una petición de interrupcion, el procesador acaba la instrucción en curso e inhibe la incrementacion 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 instruccion. Unos circuitos exteriores activados por la señal de interrupción reconocida fuerzan entonces en el bus de datos una instruccion, 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 indice, 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 direccionado poco elaborado. La aparición del 8080 ha solucionado la mayoría 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. I INTEL 8048 (MCS-48) Microcomputador en un chip,que incluye en una pastillade 40 patillastodoslos componentes necesarios para realizar un microcomputador totalmente operativo. Concretamente incluye : - CPU de 8 bits con generador dereloj - 1 K * 8 ROM para memoria de programa - 64 * 8 RAM para memoria de datos - 27 líneas de entraddsalida - 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 ofrecela modificación de la memoria de programa. En cambiola 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 necesariautilizandoROMexternas.Los8048/8748/8035puedenutilizarlíneas de entraddsalida como líneas de comunicación con elementosde memoria externos cuando se desea expandir la capacidad propia del chip. Para este fin hay una serie de dispositivos directamenteconectablessin necesidad de ningún circuitoauxiliar.8243Extensión de Extensión de la memoria de datos (módulos de 256 * 8 de entrada y salidas. 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 instruccionesqueincluyenaritméticaBCD y queestáncodificadasenforma muy eficiente, ocupando solo uno o dos octetos y ejecutándose en uno o dos ciclos de maquina (2.5 ms/ciclo). 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 ofrecenningúntipodecompatibilidadcon los delasseries4000u8000. No obstante, el sistemadedesarrollo MDS-800 disponedesoftware para aplicacionesal sistema 48, incluyendo editor ensamblador y monitor para puesta a punto de programas junto con un emulador en tiemporeal del sistema con 8048 (ICE-48).El ultimo miembro de la la familia MSC-48 es el 8049. escompatible pin a pin con losdemásmiembrosde familia y dispone de 2K ROM.y 128 octetos R4M. Estemicroprocesadorde INTEL ha dado nombre a la llamadasegundageneraciónde microprocesadores. aunque desde elpunto de vista de la programación es compatible con su predecesor su arquitectura es substancialmente distinta. Nació de la experiencia adquirida los inconvenientesmencionadosenlaanterior conel 8008,8080 hasolucionadotodos descripción del 8008. Los cambios mas substanciales entre ambos microprocesadores son: en primer lugar encapsulado en40 patillas en vez de18, lo que permite disponer en paralelo los buses de datos y direcciones evithndose la necesidad de multiplexados; en segundo lugar, la utilización de la tecnología 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 conreferencia directa a memoria, instrucciones de manejo de stack, etc. Estructuralmente el 8080 tiene 3 registros como siete de 16 bits y unacumulador. El conjuntoderegistrospuedeversetambién 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 desdeelpuntodevistadelprogramadorsehechaenfaltalaausenciade 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 interfase de aplicación personal, interfase para comunicaciones, generador de reloj, etc. 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 características. Las ventajasque ofrece son las siguientes: a) Masprestaciones -En la velocidad de proceso (ciclo básico de instruccihn 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 altaprioridad y no enmascarable ) b) Mayor simplicidad de uso - Alimentación a una sola tensión( 5 V en vez de 5.12 y - 12 ) - Generador de reloj incluido en el chip - Decodificador de estados incluido en el chip ( En el sistema 8080 la señales de control paraacceso memoria a y periféricos seemiten por el busdedatoscodificados y codificar las requiriéndose la utilización de un circuito auxiliar, 8228, para almacenar señales de control; en el sistema 8085 la funcihn del 8228 esta incluida en el chip y la señaldecontrolsaledirectamente 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 a que haya que direccion, y los 8 bits altos se envían por el bus de datos, esto da lugar disponer unos biestables fuera del chip que memorizan la parte alta de la dirección. De todasformas, Intel ofrecetoda una serie de productos dememoriayE/Sdirectamente conectables al 8085 que incluyen los biestables de dirección alta. Estos dispositivos, orientados específicamenteal 8085 son : 8155 256*8 RAM, 2*8 16 ports programables y 1 temporizador de 14 bits. 8355 2 K * 8 bits Rob1 y 2 ports de 8 bits programables 8755 2 I( * 8 bits EPROM >- 2 ports de 8 bits programables Con el uso de estos dispositi\.os puede realizarse un sistema completo con 3 chips ( CPU 8085. memoria de programa a j j j . memoria de datos 8 1 5 5 y E/S en los anteriores 8155 y 8355 ). Además del 8085soporta toda la familia de productos del sistema 8080 ( RAM.ROM,EPROM.circuiros de control de memoria y circuitos de control de periféricos. INTEL 8086 Es el iniciador de unanuevageneración de micro Procesadoresdealtasprestaciones 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 capacidad de Mbytes. El 8086 tiene una longitud de palabra de 16 bits y una direccionamiento de un Megabyte. Contiene internamente un sistema de segmentación dela memoria y puede trabajar en tres espacios de direccionado, para codigo, 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 multiu-suarios. 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, el otro 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 capazdesoportarconfiguracionesmultiprocesador, 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 division, 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 soportehardware y software para el desarrollo es así mismo muy completo,incluye y el programadeconversiónCONV-86para compiladoresdePLM86.ensamblador compatibilidad con los sistemas8080 y 8085. Se iniciará la exposición de la máquina convencional con el Intel 8088, el "cerebro" de la IBMPC y sus clones,y como tal, sin dudala CPU de uso mas extendidoen el mundo. En el nivel de la máquina convencional, el 8088 y el 8086 son idénticos, de modo que que se mencione acerca del primero aplica por igual al otro. El 8088 puede direccionar2 bytes, numerados de manera consecutiva partir a de O. & Las instrucciones operan ya sea en palabras de 8 o de 16 bits. No se necesita que las palabras inicien enun bit par, aun cuando el 8086es un poco más eficientesi esto sucede. 20 Con 2 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 recurso de usar un kludge (que en la jerga de cómputo significa una forma torpe ypocoelegante de haceralgo).Elkludge consistió en introducir cuatro registros de segmento (códigos, datos, pila y extra), cada una conteniendo una dirección de memoria que apuntalaabase de un segmentode 64K. Cada registro de segmento apunta a alguna parte dentro del espacio de direccionamiento 20 de 2 bytes.Todaextraccióndeinstrucciones se hace en formarelativaalregistro de segmento de código. Por ejemplo, se éste apunta a la direccibn 96 O00 y el contador de programa tiene un valor de 1 204, la siguiente instrucción será extraída de la dirección 97 204.Conestevaloren el registrodesegmentodecódigo,sepodránextraerlas 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 segmentode 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 senecesite. un máximo de 256K Este esquema significa que en cualquier instante, se puede accesar de memoria sin cambiar ningún registro de segmento.Algunoscompiladoreslimitan el código (las instrucciones) delos programas a 64K y otros a 64K para los datos y pilas, afin de evitar la sobrecarga asociadacon la carga y almacenamiento constante delos 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 apuntaracualquierdirección dentro delespaciodedireccionamiento de 2" bytes. No obstante. como se mencionó anteriormente, el 8088 no está muy bien equipado para trabajar connúmeros de 20 bits. Este problema se resolvió haciendo quetodoslosregistrosde 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ólo16 bits superic;res de las direcciones de20 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 cargaruno deellosen AX, luegosumarle el segundoy por últimoalmacenar AX en memoria. Se pueden también usar otros registros, pero las instrucciones para hacerlo son más largas y lentas que aquellas quesólo usan AX. BX se usa por lo general para almacenar apuntadores de memoria;CX paraalmacenar el contador en las instrucciones de iteración. Para repetir una iteración n veces, se carga n en y cuando llega a cero, ésta termina. CX, en cada iteración se decrementa CX 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 de16 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 maneraes un remanente de la formaen que trabajaba el antiguo 8088. Losregistros A 0 y AD se usan para operacionesconcadenasdecaracteres.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. 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 direccionanormalmentedandoeldesplazamientodeAB(yaqueno 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 A I (Apuntador de Instrucciones) y el de BANDERAS. que en la mayoría de otras máquinasse 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 debits 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(resultadonegativo,cero, etc.) El bit D tomaelvalor de 1 cuandoocurreun Desbordamiento en elresultado de una operación aritmética. Elbit 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. Losbits A y C representan los acarreosde la parte media y extrema de los operandos, respectivamente. Por último, el bit P indica la Paridad (non o par) del resultadode una instnlcci6n aritmética. Existen además siete bits que no tienenuso en el 8088, aunque algunos de ellosse utilizan en los sucesoresde este. En el juego de instrucciones del 8088, muchas de ellas hacen referencia a uno o dos operandos, yaseaen losregistros o enmemoria. Por ejemplo, la instrucciónINC incrementa(suma 1 a)suoperando; ADD sumaeloperandofuentealdestino.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 mayor parte delasinstruccionestienenunavariedad de especial o nohacerlo.La codificaciones, dependiendo dela naturaleza de los operandos. Los campos SYC son orígenes o fuente de información y no se modifican; en contraste, los campos dst sondestinos y por lo general lasinstruccionesmodificansucontenido. 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 ciertomodo errática. La mayoría de las instrucciones 8 bits tienen dos variantes, una que opera enpalabras de 16 bits y otra que opera en bytes de y se diferencian por medio de un bit en la propia instrucción. Porconveniencia, se han divididolas instrucciones envariosgrupos.Elprimero contieneaquellasquemuevendatosalrededorde la máquina,entrelosregistros, la memoria y la pila. El segundo grupohace operaciones aritméticas, tanto con signocomo sin él. Para las multiplicacionesy divisiones, el producto o dividendo de 32 bits se almacena en los registros AX (la parte de ordeninferior) 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 1010 y 1 1 1 1 no se utilizan. De ahí que un entero de 16 bits puedealmacenar unnúmero entre O y 9999. Aunque esta formadealmacenamiento es ineficiente. elimina la necesidad de convertir entradas decimaies a binario y regresar ae nuevo a decimal para la salida. Estas instrucciones se usan para realizar las operaciones aritméticas con númerosBCD. Lasinstruccionesbooleanas y las de desplazamiento/rotación, manipulanenvarias 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 independientesdelosresultadosdeéstas. Los resultadosdelascomparacionesse 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. El 8088 tiene algunas instruccionespara cargar, almacenar, mover, comparar y examinar cadenas de caractereso palabras. Estas, pueden tener como prefijo un byte especial llamado REP, el cual hace que la instrucción se repita hasta alcanzar una detenninada condición, como en el registro CX que se decrementa después de cada iteración, hasta llegar a O. En esta forma, bloques arbitrarios de datos se pueden mover, comparar, etc. El últimogrupo es una mezcla deinstruccionesque anteriores, e incluye conversiones,E/S y paro de la CPU. no encaja en ninguno de los El 8088 (ytambién el 80286 y el 80386) tiene ciertonúmero de prefijosde 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 paralainstruccióncompleta, 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, envez 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 condosmodosdeoperació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 no queexisten 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. Ademis, todas las instrucciones trabajan en el 80286, en las dos modalidadesy tienen la misma semántica con excepción de unoscuantoscasos.Lasúnicasdiferenciasseencuentranenlascaracterísticasde 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 nuevc 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 hastade 64K bytesdelargo. Durante el diseño del 80286surgió la cuestióndecómo permitirquelosprogramas usaran esta memoria adicional sin modificar la máquinade manera radical. 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" m 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 50286 para un sistema mde multiprogramación, cada proceso puede precaverse de accesar segmentos pertenecientes a otro. Además del conjunto de instrucciones del 8088. e1 80286 tiene algunas adicionales que los diseñadores olvidaron en la primera vuelta. L a mayoría de estas instrucciones hacen posible realizar operaciones claves con un menor número de instrucciones que en el 8089. Además, se han relajado algunas de las reglas nl5s ortodoxas respecw a qué operandos st' 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ámetrosparalassubrutinas.Lainstrucción PUSHA realiza la funcióndeapilarlos registros AX, CX, DX, BX, SP, BP, SI y DI en ese ord.en, POPA, recupera los registros almacenados. Estas instrucciones se utilizan normalmente por las rutinas de interrupción para almacenar el estado dela máquina antes deproceder a manejar la interrupción. da Las instrucciones ENTER y LEAVE ejecutan las acciones necesarias cuando se 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 dela frontera de los arreglos.Al 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 instruccionesVERR y VERW se refieren a los procesosde segmentación del 80286. Estaspermitenque un programamidael terreno antes de entraren 61. Un programa puede evitar caer en un error de segmentación, por medio de una verificación previa. El 80286 tiene dos limitaciones fundamentales que condujeron a Intel a desarrollar el 80386. Primero, el 80286es una CPU de 16 bits con registros, operandos e instruccionesde 16 bits. Para muchas aplicaciones se necesita deuna CPU de 32 bits. Y segundo, el modelo El dememoriaconsistentedemuchossegmentosde 64K resultaunagranmolestia. problemanoeselnúmero de segmentos (16 384),que es másquesuficiente,sino su tamaño tan reducido (64K). El 80386 elimina estos problemas y, al mismo tiempo, agrega algunas características adicionales que lo hacen considerablemente más poderoso que el 80286, además de sermucho más rápido. la Durante el diseñodel80386, Intel realizó un granesfuerzoparamantener 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 parecidaacomolohacenenel80286. Existe, sinembargo,unmodonuevo, el modo virtual, que es un punto intermedio entre los dos anteriores. Al igual que el modo real, su intención es la de correr antiguos programasbinarios del 8088. La diferencia está en que en el modo real, un programa puede hacer lo mismo que en el 8088,incluyendocambiosde registros desegmento,operacionesdeE/S,etc.Estole proporciona un poder más que suficiente para colapsar el sistema. En modo virtual, todas lasinstruccionesnormales trabajan igual que en el 8088, pero lasinstruccionesqueen potencia pueden hacer caer al sistema, tales como las de E/S,no se ejecutan. En vezde ello, ocasionan"desvíos"en el sistema operativo, lascualespuedenemular(simular)dichas instrucciones.Comoresultado,es posible tener ejecutando al mismo tiempovarios programas del 8088, cada uno protegido de los otros, y el sistema operativo protegido de todos ellos. Muchas de las computadoras basadas en el procesador 80386 utilizan UNIX como su sistema operativo nativo y proporcionan múltiplesventanas a los usuarios. En una o más de estas ventanas, el usuario puede ejecutar viejos programas en MS-DOS. Este truco se logra haciendoque UNIX 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 LTNIX, 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áneabajo un ambiente UNIX y accesar archivos UNIX. Una de las principales metas del 80386 fue la de deshacerse del límite de 64K por segmento,conservando la compatibilidadcon los programas del 80286quemanejan segmentos de dicha longitud.Este logro. en apariencia imposible, se alcanzó de una manera muy habilidosa,Tanto el 80286 como el80386 utilizan selectores ensus registros de segmento. En esencia, cada selector es sólo un índice dentro de las dos tablas de 8K de descriptoresdesegmentos.Cada descriptor contiene la dirección, su tamaño,códigode 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 segmentode16 o de 32 bits. En lossegmentosde16bits,ladirección máxima es de 64K y todas las operaciones que manipulaban palabras lo hacen en 16 bits. 32 Enlossegmentosde 32 bits, la dirección máxima es 4G (2 bytes,cerca de 4 mil millones), y todas las operaciones que manipulan palabras :o hacen en 32 bits. También es posible ignorar estos valoresinstrucció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 46 2 bytes. Este espacio es mayor o igual al de casi todas las macro y supercomputadoras. Los tiempos en los que era posible diferenciar una microcomputadora de una supercomputadora con sólo mirar cuál tenía un mayor espacio de direcciones, pertenecenal pasado. 46 Una de las consecuencias obvias de tener un espacio de direcciones de 2 bytes, es que losapuntadoresdebentener por lo menos46 bits de largo;unadimensióngrandee inconveniente. Para la mayoría de las aplicaciones esto es demasiado. En cambio, muchos 32 programas para el 80386 usan simplemente un solo segmento de 2 bytes. A este modelo se le conoce con el nombre de "Modo Motorola",ya 39ue los espacios de direcciones de sus microprocesadores constan de un solo segmento de 2 bytes. Un programa para el 80386. cuando utiliza varios segmentos, está restringido a un solo segmentoparacódigo,datos y pilaen cad momento, al igual quesucede en el8088. Tambiéncomoenel8088,existe un registro desegmentoextra,parahacerposibleel 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 accesarhasta 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 AXiEAX, la moverá a EL4X. a menos que un prefijo específicoindique 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 6a-mas eficientes de accesar elementos de un Las instrucciones requieren decamposde modo de arreglo y otrascaracterísticas. direccionamiento para especificar en dónde se encuentran sus operandos; en los registros, en memoria, en la pila o en alguna otraparte. 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 delsegmentoque normalmente se utiliza (DS).Además se agregaron también otrosdos 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 instruccionesnuevas para verificación de bits,conversióndedatos,movimientos y otrascosas. En términosgenerales,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 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 1 estado-de los bits endiversoscódigos de condición. Esta instrucción esavecesde utilidad para los diseñadores de compiladores, al momento de evaluar las expresiones booleanas. de Por último, las instrucciones SHxD son desplazamientos instrucciones Lxx se utilizan para cargar registros de segmento. 32 bits y las Sección 2 Arquitectura del microprocesador Intel 8088 ARQUITECTURA BASICA DEL MICROPROCESADOR8088 Arquitectura Interna Básica Los microprocesadores modernos , al igual que los anteriores, buscan instruciones en la memoria con una operación de lectura, mientras elmicroprocesador ejecuta la instrució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 instrución mientras el microprocesador ejecuta la actual. En la siguiente figura se muestra el procesobásico del trabajo del microprocesador. Microprocesador Canal Microprocesador Recuperar Recuperar Ocupado I Decodificar I Ejecutar I Ocioso I Ocupado I Recuperar I Decodificar I Ejecutar I Ocupado I Ocioso I Ocupado I Recuperar I Decodifica I Decodifica I Ejecuta 1 Arquitectura del sistema Las comunicaciones entreel sistema y el microprocesador ocurren por medio de tres canales que sonlos siguientes: Canal de dirección El canal de direcciones suministrauna dirección en la memoria para la memoria del sistema o el espacio deentraddsalida (E&) para los dispositivos deE/s del sistema. Canal de datos El canal transfiere estos entreel microprocesador y la memoria y los dispositivos de E/S conectados en el sistema. Canal de control El canal de control wm.inistra señales de control. que hacen que en l a memoria o el espacio de E/S efectúen una operación de lectura o de escritura . Sistema - 8088 Do ++ D, A0 Canal de control 3 R D , WR A,, A memoria y EIS IOiM El ancho del canal de datos determina cuantos bytes se transfieren a la vez entre el microprocesador y la memoria, y el ancho decanal de direcciones determina cuanta memoria puede dirrecionar el microprocesador. LA MEMORIA Y EL MICROPROCESADOR El espacio de direcionamiento de un sistema basadoen un microprocesador, se denomina memoria lógicao memoria física. La memoria lógica es el sistema de memoria tal y como lo veo un programador, mientras quela memoria fisica esla estructura real en el hanvare de la memoria. Memoria lógica El espacio de memoria lógicaes el mismo en todos los microprocesadores Intel, la memoria lógica se enumerapor bytes, en la siguiente figura se observa elmapa de memoria lógica del microprocesador intel 8088. t 8 bits + FFFFF FFFFE FFFFD 1 M bytes 00001 O000 1 00000 Mapa ae memoria lógica del rnicroprocesador W88 La memoria lógica del8088 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. AH Cuando este microprocesador dirrecionauna palabra de 16 bits en la memoria, se accesan dos bytes consecutivosen 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. Nombresde 16 bits AX BX Nombres 8 bits Nombres 8 bits AL BL BH CH CL DH DL SP BP cx I DX DI SI cs I DS ES SS Acumulador Indice base Contador Datos Apuntador a pila Apuntador a base Índice destino Índice fuente Apuntador de instrucciones Banderas código de 1 Segmento datos de Segmento extra Segmento 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 especiiicas. por esta razón a cada uno de estos se les da u11nombre (~.ciJmlhdor,Rsse, Contador y Datos). AX (Acumu1ador):Conserva el resultado temporal después de una operación aritmética o lógica. A este registro tambiénse 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 referenciadospor la instrucción ara convertir (XLAT). A este registro también se le direcciona como registros de 8 bits (BH,BL). CX(Contador): Contieneel conteo de ciertas instruciones para corrimientos (CL) y rotaciones del número de bytes (CX)para las operaciones repetidas de cadena y un contador (CX) para lainstrución LOOP. A este registro también se le direcciona como registros de 8 bits (CH,CL). DX (Datos): Es un registro deuso general que también contiene la parte más significativa de un producto después deuna 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 sele direcciona como registros de 8 bits (DH,DL). Registros apuntadores e indices Estos registros son también deuso 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 ala pila de memoria de (LIFO) . BP (Apuntador a base):Es un apuntador de uso general que se utiliza amenudo para dirrecionar a una matriz de datosen una pila de memoria. SI (Índice fuente) : Se emplea para direcionar datos fuente en forma indirecta para utilizarlos con las instrucciones de cadenas o arreglos. DI (Índice de datos): Se empleapara dirrecionar datos destinoen forma indirecta para utilizarlos con las instrucciones de cadenas o arreglos. IP ( Apuntador de instrucciones ): Se utiliza siempre para dirrecionar a la siguiente instrucción que va a ejecutar el microprocesador. Par formar la localidad real de la siguiente instrucción se suma el contcnido de IP con CS(por) 10H. Cabe señalar que se puede realizar direcciomanienro indirec:o 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 juntocon 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 quetiene el código. En modo real , define el inicio deuna sección de 64 K bytes. segmento de código esta limitadoen el 8088 a una longitud de 64 Kbytes. DS ( datos ): El segmento de datos esuna sección de la memoria que contiene la mayor parte de los datos utilizadospor un programa. Se les caceas en el segmento de datos conun desplazamiento o con el contenido de otros registros que tiene la direccih del desplazamiento. ES(segmento extra):El segmento extrade 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óndel punto inicial de entrada ala pila, se determinapor 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 r. )do real permite que el microprocesador sólo dirrecioneal primer lMbyte deespacio 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 modoreal. Cabe señalar quetodas las direcciones en la memoria en modo real se componende una dirección de segmentomas un desplazamiento. El segmento ubicado en uno de los registros de segmento del microprocesador, define la dirección inicial de cualquier segmento de memoria de64K bytes. La dirección de desplazamiento seleccione una localidad dentro del segmento de memoria de 64k bytes. En la siguiente figura seilustra como el esquema de dirrecionamiento de segmento más desplazamientc nelecciova m r l Incalidad eo la mwwria. Memoria en modo real / ~FFFFFH Seggemneto de memoria que 7 I r ' I - Registro de segmento I OOOH Segmento ds memoria que empieza en la localidad IOOOOH En la fig anterior se muestraun segmento de memoria de empieza en la localidadlOOOH y termina en la '1FFFFH, de 64K bytes de longitud. También se muestrala forma en queun desplazamiento de FOOOH selecciona la localidad 1FOOOH en el sistema de la memoria. Registros de segmentoy desplazamiento implícitos El registro de segmento de código define el principio de un segmento de código y el apuntador de instruciónes 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 delmapa de memoria. IP: dpUllta a la iguiente illstruc:Licjn dentru del segmento de c;odigo, y es ei desplazamiento . En lasiguiente tabla se ilustran otros direcionamientos implícitos para la memoria enel microprocesador 8088. Desplazamiento Segmento cs IP SS SP 6 BP BX, DI, SI o un numero de 16 bits DS ES DI para instrucciones áe cadena S El microprocesador 8088 permite tener cuatro segmentos de memoria; Se debe de tener en cuenta que los segmentos de memoriapueden tocarse o incluso traslaparsesi no se requieren 64K bytes de memoria para un segmento, en la siguiente figurase muestran los segmentos del8088. FFFFF 3FFFF ES:Segmento extra 30000 ZFFFF SS:Segmento d e pila 20000 1 FFFF CS:Segmento de datos I ooor) OFFFF CS:Segmento de código uuoL)o Sistema de memoria con los cuatro segmentos En siguiente figura se muestra un traslape transversal imaginario de segmentos, dentro de1 mega de memoria. 1 ISegmento de Datos1 /(Segmento de Código] S Conjunto de Instrucciones Existen.seis categorías de instrucciones para el 8088 las cuales son: Transferencia de datos. El conjunto de instruccionespara el 8088 incluye irstrucciones 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 controlarlos 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. Principales intruciones para el microprocesador 8088 Transferencia de datos IN dirección efectiva laCarga LEA palabra byte. Carga MOV POP PUSH Salva Aritmeticas ADD CMP DEC DIV signo con División IDIV IMUL MC MUL SUB Resta al acumulador desde Recupera palabra una lade l a s palabras en pilala Suma datos entre registros datos Compara Decrementa signo sinDivisión Manipulaci6n de Bits AND NOT OR SCAS Mete datos signo Multiplicación con Incrementa signo Multiplica con datos entre un dispositivo E/S de pila o la memoria y Otro registro los registros y la memoria u Otro registro Y lógica ( AND) Invertir (complemeto uno) a O lógica I cc I aCUmUlaUU1 Transferencia de programa CALL aLlama un procedimiento JMPCERCANOSaltaaotra partsdelprogramadentrodelmismosegmento JMPLEJANOSalta otra a parte del programa en otro segmento LOOP veces CXciclo Repite RET Retorna de un procedimiento 1 Sección 3 Manual de Usuario Manual de Usuario OBJETIVO : Simular el funcionamiento de manera “virtual” de un sistema mínimo ( Intel 8088 ) sin requerirlo fisicamente. Realizar una herramienta útil y didáctica para el aprendizaje en la utilización y 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. JUSTIFICACION Debido al avance tecnológico de las ultimas dos décadas, la ciencia de la electrónica y desarrollo acelerado de los ordenadores, han tomadoun papel muyimportante 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 autoevaluarse 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 mayoría de las instituciones ( si no es que todas ) cuentan con un laboratorio de computadoras. L o Único que falta es el software. S o h a r e de nivel y calidad, y además hechos en México y por mexicanos calificados y altamente competitivos . La gran mavoría 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 sí, pero de mala calidad, no visual y en ambiente Dos. PROPOSITO : La presente obra tiene la finalidad de proporcionarle al usuario la herramienta y ejemplos necesarios para una adecuada explotación del sistema mínimo ( Intel 8088 ) , así como de poder proporcionar una herramienta de aprendizaje y experimentación para los alumnos con materias enfocadas a laIngeniería en Electrónica o áreas afines . DESCRIPCION DEL SISTEMA : Composición fisica de un Sistema Mínimo. El simulador estará formado por todas las partes fisicas (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ásdeesto el usuario tendrá ayuda en línea que le permitirán 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 proyecto es el siguiente: Hardware 1.- Procesador 486 ( como mínimo ) en adelante. 2.- 8Mb en Ram ( optimo ) 3.- Mouse ( indispensable ) Software 1.- Windows 3.xx (en adelante) 2.- Lenguaje de programación Visual Básic Versión 4.00 3.- Herramienta de apoyo Help Compiller 4.0 4.- Presentaciones desarrolladas en Core1 Draw Versión 7.00 (apoyo visual) b) Instalación COMO INSTALAR EL SIMULADOR DEL SISTEMA MINIM0 8088, EN MI PC ?? A continuación, se explicará paso a paso, como instalar ,accesar y utilizar el programa, así como una descripción de su funcionamiento y su ayuda escrita . Comenzandodesdelas especificaciones ya señaladas con anterioridad, (Requisito indispensable: contar con Windows 3.* ), primero se deberá ingresar en Windows: Abocando solo doscasos de instalación, para Windows 3.1 1 y para Windows 95 * WIN 3.11 Utilizando el ratón (recomendable) se tendrá que escoger (dando doble click al botón izquierdo del ratón), el icono o archivo de “Principal”, posteriormente se deberá seleccionar el icono llamado “Administrador de archivos”, aquí se desplegara una ventana, en donde se tiene que especificar la unidad en la cual se encuentra el sistema ( Unidad A:\ o B:\ según sea el caso ), una vez que se muestren los archivos existentes de la unidad de discoasignada , se deberá buscar el archivo llamado “SETUP.EXE” y seleccionarlo. Inmediatamente tendrá que irse a la barra menú, y en “Archivo”, buscar la opciónde “Ejecutar”. *Nota* (cabe hacer mención que como casi ya es de dominio general, Windows brinda hasta tres opcionesdiferentes 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. ntrol el icono o archivo de “Principal”, posteriormente se deberá seleccionar el icono llamado “Administrador de archivos”, aquí se desplegara una ventana, en donde se tiene que especificar la unidad en la cual se encuentra el sistema ( Unidad A:\ o B:\ según sea el caso),una vez que se muestren los archivos existentes de la unidad de disco asignada, Seleccionar “&Aivo”, y después “EJecutar” Otra opción es que en el momento de seleccionar el archivo “Setup.exe” , se presione dos veces el botón izquierdo del ratón. Esto, automáticamente ejecutará el programa de instalación seleccionado. Posteriormente aparecerá una ventana que pedirá la confirmación de la ejecucicin del sistema (tiene que marcar “Aceptartt). En breve aparecerá una ventana indicando la ejecución de SETUP:EXE. La pantalla de instalación del Simulador del sistema mínimo 8088 solicitará al usuario especifique si el archivo y/o la ruta son correctos ( solo presione Continuar ). * Win95. Una vez accesado Windows ir al botón de inicio situado en la barra de herramientas situado (por lo general) en la parte inferior izquierda de la pantalla Haga click aquí figura 1 A continuación se abrirá una ventana mostrando los elementos del escritorio, seleccione "Ejecutar" Figura 2 Figura 3 Enlas figuras anteriores se muestra paso a paso el procedimiento a realizar parala ejecución del programa, desde el menú de Ejecución (figura l), así como la ventana de opción de laFigura 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 vaa correr dicho programa) se recomienda seleccione la opción de Eguninar: Figura 4 AhoraseleccioneelArchivode programa llamado “Setup.exe” y oprimaAbrir,esto . regresará a la ventana de Ejecutar, seleccione “Aceptar “. I I lo En estos instantes se comenzará a cargar el proyecto en su Disco Duro con la dirección preestablecida C:\ (conlaopción de cambiardicharutadeinstalación,siasísedesea). Se ira mostrandoel porcentaje de instalación cargadodel disco 1 y posteriormente se pedirá que se inserte el disco 2 , 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 PROYECTO, seleccióneloy haga doble click en el ratón para ejecutar el sistema. Por medio del presente Manual pretende se dar al Usuario un bosquejo de lo que el sistema puede realizar. En el encontrara la descripción de cada una de las ventanascon las que se encontrara a lo de los botones largo del sistema, así como, una breve explicación de lo que realiza cadq,uno y funciones con los que cuentan dichas ventanas. Presentación Al inicio del sistema encontrarauna ventana de presentación en la que encontrara el nombre del sistema, así como, la Universidad a la que pertenecenlos integrantes del equipo que realizaron el presente proyecto (Ver figuralal final de esta sección). Portada En ella encontrara tres botones rotulados con las siguientes etiquetas: Integrantes : Al hacer un clic sobre estebotón Ud. encontrara el nombre de los integrantes que realizaron elpresente proyecto. 0 Asesor : Al presionar este botón se desplegarael nombre de la persona encargada de realizar las correcciones al sistema Ejecutar : Cuando Ud. presiona este botón se in-iciarala ejecución del sistema mínimo 8088 0 Salir : Con este botón Ud. regresara nuevamente al ambiente de Windows sin entraral sistema (Ver figura 2 al final de la sección) Una vez que oprimió elbotón de ejecutar laventana que a continuación se desplegarala podemos desglosar en cuatro bloques: 0 0 0 Editor ComponentesGráficos Menús Microayuda Editor Este editor cuenta con los Rotulados : 0 0 0 0 0 0 Instrucciones : Esta etiqueta cuentacon dos botones rotulados con dos pequeñas flechas 0 Flecha hacia abajo izquierda : Muestra las instrucciones con las cuales cuentael sistema 0 Flecha hacia arriba izquierda: Muestra las instrucciones con las cuales cuentael sistema Enter : Al oprimir este botónse acepta la instrucción que se haya elegido simulando al “Enter” de su máquina Registros : Esta etiquetado con dosbotones rotulados con dos pequeñas flechas 0 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 : Al oprimir cualquiera de estos botones, el resultado que se obtendrá 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 internasde 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 valorde cero, el cual también se puede activar por la combinación de teclas ALT + R (Ver fig3 ) Componentes Gráficos Al hacer un clic sobre cualquiercomponente gráfico se abreuna ventana la cual muestraun zoom del componentey muestra información técnica del mismo (fig 5). 1 Menús La ventana cuenta con unab&a de menús formada por tres títulos que son : 0 0 0 Archivo : Se puede activar vía barra de menú o por la combinación de teclas ALT + A, este menú cuenta concuatro subménus que son : 0 Abrir(Ctrl+A) : El cual abre un archivo editado y lo carga en memoria (fig 4). 0 Guardar(CTRL + G) : El cual guarda el contenido de un archivo editado en memoria (fig 6) 0 Índice(CTRL + I) : El cual muestra la ventana de índice, que es similara la ventana de Portada 0 Salir (CTRL + S) : Termina la ejecución del sistema Comandos : Se puede activar por medio de la combinación de teclas ALT + Cyeste menú cuenta contres subménus que son : 0 Cambiar Dirección de Edición(CTRL + C) : Nos muestra una caja de mensaje donde podemoscambiar el desplazamiento, dentro del segmento de código para editar programas (fig 11) 0 Ejecutar (CTRL + E) : Muestra la pantalla de microprocesador interno, en la cual se muestra las operaciones internas de ejecución 0 Desensamblar (CTRL + D) : Muestra una ventana con el código en lenguaje ensamblador(fig 1O) Historial (CTRL + H) : Muestra una breve reseña histórica de la familia Intel (Ver figura S) MicroAyuda Esta se muestra en laparte baja de la ventana, al colocarse sobre cualquier componente indicara que función realiza. 0 La etiqueta “Archivo *.mem” nos indica el archivo cargado actualmente en memoria 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. ~~ l. Están desactivadas las teclasde registro y de valor, lo primero que tendrá que hacer es introducir el valorde 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 2. En el caso de que la instrucción emplee registro o valor estos deberán ser introducidosya o por medio del teclado, deberá de oprimirla tecla de sea por flechas derechas de edición “Enter” para que estos valores sean aceptados 3. Repetir los pasos 1 y 2 mientras desea seguir editando, en caso contrario su programa editado se guardara tecleandola combinación de CTRL + G o en su defecto abriendo el menú de Archivoy elegir la opción de guardar. 4. La Dirección de Editar seira incrementando de acuerdo al valor en bytes entre instrucción e instrucción. 5. Para iniciar el programa deberá de oprimir botón el de Ejecutar,el cual le abrirá la ventana del simulador. 6. Si desea cargarun programa que ya editó, bastacon oprimir la combinación de teclas CTRL + A, o por medio del menúArchivo eligiendo la opciónde Abrir. 7. Para Resetear (Limpiar)Este botón es utilizado en el caso de queUd. desea limpiar su memoria de cualquierprograma que este editando,y que no haya sido guardado previamente Algunos ejemplos de programas en ensambladorse muestran al final de esta sección. Ventana de Simulador En esta ventana se observarálos registros internosdel microprocesador, el bus de direcciones, el bus de datos, mapa gráficode la memoria, así como, botones de control (fig 9) 0 Registros Internos : Todos los registros internos al tiempo de cargar esta ventana se inicializan a cero, exceptolos registros de segmento que se cargan consu respectivo valor, de segmento estos registrospueden ser modificados antes de la ejecución, excepto los registros de segmento. Registro de propósitogeneral. 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 deuna operación. aritmética o lógica. A este registrotambién se le direcciona como registros de8 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 referenciadospor la instrucción ara convertir (XLAT). Aeste 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 lainstrucció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 unamultiplicación de 16 bits; la parte más significativa del dividendo antes de ladivisión y el número de puerto de E/S para una instrucción variable de E/S. A este registro tambien 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 paraapuntar a la localidad de la memoria que contiene los datos del operando de muchas instrucciones. SP ( Apuntador a pila): Este registro se emplea para 2ireccionar datos a la pila de memoria de (LIFO) . BP (Apuntador abase): Es un apuntador de uso general que se utiliza a menudo para direccionar a unamatriz 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 direccionar datos destino en forma indirecta para utilizarlos con las instrucciones de cadenas o arreglos. IP ( Apuntador de instrucciones ): Se utiliza siempre para direccionar a la siguiente instrucción que va a ejecutar el microprocesador. Par formar la localidad real de la siguiente instrucción se suma el contenido de IP con CS(por) IOH. Cabe señalar que se puede realizar direcciomaniento 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 conotros registros. CS ( código ): E! segmemo de c6digo es una pcrcicin 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 64Kbytes. Definido en el segmento 0000. 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 elsegmento de datos con un desplazamiento o con el contenido de otros registros que tiene la dirección del desplazamiento. Definido enel segmento 0400 ES(segn1ento extra): El segmento extra de datos lo utilizan algunas instrucciones para cadenas. Definido en el segmento OCOO m 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 lapila. El registro BP también direcciona los datos que hay dentro del segmento depila. Definido en el segmento 0800. Todos estos registros de segmento pueden direccionar hasta 1024 5ytes. Modos de Direccionamiento El 8088 dispone de muchos modos dedireccionamiento que proporcionan diferentes modos de acceder operandos, los mas comunesson: a) Por Registro. El operandoes un registro b) Inmediato. El operando forma parte de la instrucción; normalmente se sitúaa continuación del código de operación. c) Directo. La dirección del operando forma parte de lainstrucción d) Indirecto por Registro. La dirección del operando se encuentra en los registros base o índice. o 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/S) para los dispositivos de E/s del sistema. 0 Bus de datos: El canal transfiere éstos entre el microprocesador y la memoria y los dispositivos de E/S conectados en el sistema. I 0 Mapa Gráfico de la memoria : Muestra los valores internos de la memoria, dependiendo del valor que las cajasde 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 Botones de Control : Estos se encuentran etiquetados con los siguientes Rótulos : 0 Reset : Inicializa los registros internos a cero, exceptuando los registros de segmentos 0 Anima : Este botón ejecuta el programa continuamente a una velocidad determinada por el valor de la caja de intervalo, activada por la caja A -tiempo. 0 Siguiente : Este botón ejecuta cada instrucción paso a paso. 0 Desensambla : Este botón nos muestra una ventana con el código desensamblado. o 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 submenus : 0 I Menú Abrir : Este menú contiene los siguientes submenus : 0 Abrir : Este submenu se encarga de abrir un archivo que se haya editado previamente (fig 12) 0 Guardar : Este submenu se encarga de guardar el archivo que se este editando actualmente (fig 13). 0 Salir : Este submenu se encarga de regresarlo a la pantalla de Edición Cada vez que Ud. ejecute el comando de abrir un nuevo archivo debera de actualizar l a Dirección a Editar m 01 02 03 04 05 06 07 O8 MOV REG8 DATO8 MOV REG MOV REG DATO 16 16 MOV MEM REG MOV REG h4EM ADD REG8 DATO8 ADD REG8 REG8 ADD REG16 DATO16 CARGA CARGA CARGA CARGA CARGA SUMA I 3 3 X 4 4 X X 8 4 3 Código: Este es el valor correspondiente de cada instrucción. Instrucción: Es la descripcih textual de cada instrucción. Función: Es la actuación de cada instrucción. Tamaño de instrucción: Es e1 tamaño rzal de cada instrucción en memoria BusDatos: Señaia si se hace uso del Busdatos. BusDirección:Sefiala si se hace uso del Bus de Direcciones. 8 X X 16 16 16 8 CODIGO CODIGO DATOS DATOS CODIGO m Ejemplos de aplicación: Carga de datos: ARCHIVO: CARGA1.MEM MOV MOV MOV INS DH OOh FFh 18h Inmediato Inmediato Inmediato REG DATO Direccionamiento AL BH o1 o1 O1FF O1 C.ins 16 Bits MOV AX MOV BX MOV CX 2533h FF58h 52D8h Inmediato Inmediato Inmediato O3 O3 O3 O0 02 07 18 C.reg Dato Lo Dato 09 25 FF OA 52 33 58 DX O8 Hi ARCHIVO: CARGA3.MEM 1 INS REG MOV AL MOV AH MOV BH MOV BL MOV CL DH CH MOV CL DLMOV AL ALMOV MOVCH CH CH DH MOV I I REG I BL BH AL AH DL I I I I I Direccionamiento Registro Registro v Registro Registro Registro Registro Registro Registro Registro Registro Y I C.ins 1 C.reg I C.reg I I I 02 02 I I I O0 o1 I 03 I 02 I I 02 I 02 I 02 I 02 02 02 02 02 02 04 05 06 02 05 07 ~~ 03 " I I I O0 O1 " 06 07 04 02 05 05 ARCHIVO: CARGA4.MEM I INS I REG AX MOV MOVDS BX CXMOV MOV DX MOV SI MOV BX MOV DX MOV DI MOV SI MOV DI L I REG I cs DI AX BX AX BP AX BX SI I I I Direccionamiento Registro Registro Registro Registro Registro Registro Registro Registro Registro Registro u I C.ins I C.reg ICireg -1 02 02 02 I 02 I O8 12 09 OA 11 OD OB I O8 I 02 I OC I 09 I I 02 02 02 02 02 I 09 OB OA OC OD 08 OE I O8 09 OC ARCHIVO: CARGA5.MEM INS MOV MOV MOV MOV MOV ADFF MOV MOV MOV MOV 1236h MOV direccibn DS 0012h 1254h 5FDDh 2365h CH 12AAh FD89 5632 2364 REG 8 bits AH AL BL BH Direccionamiento AH BL CH DH CL I Directo Directo Directo Directo Directo Directo Directo Directo Directo Directo C.ins Ofsset Ofsset C.reg Hi Lo 04 O0 12 01 04 12 54 00 5F 04 DD 02 04 65 23 03 AA 12 05 04 04 AD FF 01 FD 04 02 89 04 56 05 32 07 04 64 23 I 1 [ 04 12 36 04 " " ~~ I I I I " I ARCHIVO: CARGA6.MEM INS direccibn DS REG 16 bits Direccionamiento C.ins Ofsset Ofsset C.reg Hi Lo ARCHIVO: CARGA7.MEM MOV MOV MOV AL CL CH A9A8h 12AAh 123631 Directo Directo Directo 05 05 05 O0 05 A9 12 A8 AA 04 12 36 O0 ARCHIVO: CARGA8.MEM INS MOV MOV 5FDDh CX MOV MOV to h 1245 DI MOV MOV MOV MOV MOV MOV I I Reg 8 bits AX BX Dire DS O0 12h 1254h SI 5263h AX BX DX SI DI 986Ah 5633h 2365h Direccionamiento I 12AAh I 1236h 1 Directo Directo Directo Directo 05 I 08 I 05 05 I I OA OC Directo Directo Directo Directo Directo 05 05 05 05 I 08 09 OB O5 I I 12 5F 52 DD oc 98 56 23 12 OD 12 6A 33 65 AA 36 I I 63 Suma de datos: ARCHIVO: SUMA 1.MEM I I INS - ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD I I REG 1 I AL AH BH BL CL CH AL BL DL DH DATO I Bits 6Ah 7Bh 6Eh 26h 67h 7Bh 85h 89h 59h 18h I Direccionamiento Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato 59 Inmediato C6d 06 06 06 06 06 06 06 06 06 06 06 I C6d GO O1 02 03 ~- I Valor 1 6A 7B 6E 26 " 03 67 7B 85 89 07 18 04 05 O0 ARCHIVO: SUMA2.MEM C.reg Bits ADD ADD ADD ADD ADD ADD ADD ADD ADD BX CX DX AX BX CX DX SI DI FF58h 52D8h F4A5h 5263h 452Ah 2633h AD89h 5CC6h 00022h Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato I I O8 08 O8 08 09 OA OB 08 09 OA OB 211jj FF 58 2A oc 5C OD O0 C6 22 ARCHIVO: SUMA3.MEM 1 INS I REG I REG 8 1 Direccionamiento I Cód I Cód I Cófl ARCHIVO: SUMA4.MEM INS REG REG 16 bits Direccionamiento Cins C.reg C.reg ARCHIVO: SUMA5.MEM REG INS 2533h AX ADD ADD ADD ADD ~ADD 5632h BX ADD ADD t ~ Direc DS BX CX DX ~ C.ins Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato OA OA FF58h 52D8h 1 F4A5h 1 5CC6h I I SI ADD ADD Direccionamiento 1 I CX AFDDh DX DI 2635h 00022h I I I OA C.reg Ofsse Ofsse Lo Hi 33 25 O8 58 FF 09 1 OA I 52 I D8 I OA I OB I F4 I A5 1 OA I OC I 5C I C6 I I 1 OA CA 09 OA 56 AF I I I m 32 DD I OA I OB [ 26 [ 35 I OA I OD 1 O0 I 22 Inmediato Inmediato División de datos: ARCHIVO: DIVIDE1.MEM I INS I REG DIV AL DIV DIV DIV BL CL DIV DIV AL DIV DL DH DIV BL I Direccionamiento Registro Registro Registro Registro Registro Registro Registro Registro Registro I I I C6d Inst OB I C6d I Reg. O0 1 1 OB 1 1 OB 1 OB I I OB I O0 03 06 I OB I 07 I ARCHIVO: DIVIDE2.MEM 1 INS I I Dire Direccionamiento I C.ins I Ofsset I Ofsset 1 DS 0012h 1254h Directo Directo oc oc DIV 2365h DIV llllh DIV F14Fh DIV DD89h DIV A9A8h DIV 12AAh 1236h DIV Directo Directo Directo Directo Directo Directo Directo oc65 oc 11 oc DIV DIV I I I I I I OC OC Hi Lo 12 54 O0 12 23 11 F1 I DD A9 12 12 oc oc 4F I 89 A8 AA 36 1 Resta de datos: ARCHIVO: RESTA1.MEM INS SUB SUB SUB SUB SUB SUB REG AL AH BH BL CL CH I Bits 6Ah 7Bh 6Eh 26h 67h 7Bh AL 85h 89h ~ ~ ~~ Cód Inst 8 SUB BL SUB 59h DL SUB DH SUB -~ Direccionamiento DATO 18h I I Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Tnmediato Inmediato I 1 OD OD OD OD OD OD I OD OD OD OD Valor C6d Reg. I O0 O1 02 03 04 05 O0 O3 06 07 I 1 I 6A 7B 6E 26 67 7B 85 89 59 18 i ARCHIVO: RESTA2.MEM I AL DH I I SUB SUB SUB SUB SUB AL AH BH BL CL REG 8 bits BL BH AL AH DH SUB SUB SUB DH CH INS REG 1 I Direccionamiento I Cód Inst OE Registro Registro Registro Registro Registro - I C6d Reg. I C6d Reg. 02 03 O0 O0 O1 OE OE 03 02 04 OE OE I O1 07 OE Registro ARCHIVO: RESTA3.MEM INS REG DATO Direccionamiento C.ins C.reg Dato Dato Hi Lo 16 Bits Inmediato 2533h AX SUB BX SUB FF58h I SUB CX 52D8h I SUB DX F4A5h Inmediato SUB 5263h AX Inmediato SUB 452Ah BX SUB CX Inmediato 2633h SUB DX Inmediato AD89h SUB SI 5CC6h SUB DI 00022h [ ~~ Inmediato Inmediato Inmediato Inmediato Inmediato 1 OF OF 63 08 09 OF OA OF OB AD OF OF OC 5C 1 I OF I I I OB OF OF I 08 09 OA 25 FF 52 F4 52 45 26 OF I OD 1 O0 I 1 I 33 58 D8 A5 2A 33 89 C6 33 ” ARCHIVO: RESTA4.MEM m ARCHIVO: RESTA5.MEM I INS I REG 1 Direc I Direccionamiento I C.ins I C.reg [ Ofsse I Ofsse I Producto de datos: ARCHIVO: PRODUCTO1 .MEM MUL MUL MUL MUL MUL MUL MlJL MUL Registro MUL MUL CL CH AL Registro Registro Registro Registro Registro Registro Registro u BL Registro BH BL ~ ~ DL DH Reeistto 1 I 12 12 12 02 03 04 12 12 12 12 12 [ 05 I O0 03 06 07 ARCHIVO: PRODUCT02.MEM INS Dire DS MUL 0012h MUL 1254h MUL 5FDDh W L 2365h Direccionarniento Directo Directo Directo Directo C.ins 13 13 13 13 Ofsset Hi O0 12 5F 23 T i DD 4F . Incremento de datos: ARCHIVO: MCRE 1.MEM Registro Registro ~ N C - BH ~ RegistroINC INC CH MC INC Registro MC DL INC MC INC ~~ MC MC TNC BL CL AL BL - 14 AX BX Registro Registro Registro 14 14 14 14 14 14 Registro Registro Registro Registro Registro Registro Y cx SI DI 14 14 14 14 14 02 03 04 05 O0 03 06 08 09 OA OC OD ARCHIVO: INCRE2.MEM ‘ 1 INS INC INC INC INC 1NC 1NC INC INC INC INC Dire DS 0012h 1254h jFDDh 7365h llllh F14Fh DD89h .?9,Uh 12AAh 1236h Direccionamiento C.ins Ofsset Ofsset Hi Directo Directo Directo Directo 23 Directo Directo Directo Dire:?a Directo Directo 15 15 15 15 15 I Lo 12 O0 12 54 5F DD 65 11 11 15 15 F1 DD 15 15 15 .“3 ,I 4F 89 ‘98 I AA 12 12 I 36 Decremento de datos: ARCHIVO: DECRE 1.MEM DEC DEC BL Registro Registro Registro Registro Registro Registro DEC DEC AX BX Registro Registro DEC DEC SI DI Registro Registro DEC DEC XEC DEC DEC ~ BH BL CL CH AL 02 03 04 16 16 16 16 16 16 I m 05 O0 03 16 I 08 16 16 I OD I OC ARCHIVO: DECRE2.MEM INS I DEC DEC Directo 5FDDhDEC DEC DEC DEC Dire Direccionamiento C.ins DS 0012h I Directo 125431 Directo " I I 17 1 I I I 17 17 17 2365h I Illlh Fl4Fh I Directo Directo Directo Directo Directo , DEC DEC I 17 17 Ofsset Ofsset Hi Lo I I O0 1 12 12 54 5F DD 23 65 I 11 11 A9A8h 1 12AAh 1 ! 17 I ! A9 !2 1 A8 I Ah I Saltos en segmento de código: ARCHIVO: JUMP.MEM ~ INS Dire DS JMP Jh4P JMP JMP Jh4P JMP JMP JMP JMP JMP 0002h 0002h 0004h " " Direccionamiento 0025h ~~ 0025h OOOlh 0002h I 1 Ofsset Ofsset Hi Lo 18 18 18 18 18 " OOOlh 0002h OOOlh Directo Directo Directo Directo Directo Directo Directo Directo Directo Directo C.ins I 18 18 18 18 18 1 O0 O0 O0 O0 O0 1 I O0 O0 O0 O0 O0 02 02 04 o1 02 I 1 02 Apilamiento de datos: ARCHIVO: PUSH1 .MEM Direccionarniento PUSH PUSH PUSH PUSH PUSH PUSH - PUSH PUSH PUSH I CX DX SI BX CX ,4X DX DI Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato Inmediato C.ins Cxeg OA OB I ] 19 1 I 19 1 I 19 19 19 19 1 OC 09 OA OS OB OD o1 25 25 o1 1 ARCHIVO: PUSH2.MEM INS Direccionamiento Dire C.ins ns Hi " 1 PUSH 0012h . 1254h PUSH Directo PUSH 5FDDh PUSH 2365h PUSH l l l l h PUSH F14Fh PI JSH DD89h -~ .. PUSH A9A8h 1 PUSH 12AAh PUSH 1236h " " " Directo 12 Directo Directo Directo Directo Directo Directo Directo Directo I I I 12 12 Desapilamiento dedatos: ARCHIVO: POPl.MEM 1A 1A 1A IA 1A 1A 1A 1A 1A 1A 12 54 LID 65 11 O0 SF I 1 23 I1 F1 DD A9 I 4F I 89 I I AS AA 36 ARCHIVO: POP2.MEM INS I Dire I DS POP 0012h 1254h POP SFDDh -POP -~ -~~~ POP 2365h POP llllh POP F14Fh POP POP POP A9A8h 12AAh 1236h Direccionamiento C.ins I I Directo Directo Directo Directo Directo Directo Directo Directo Directo u I 1 IC I IC 1C 1C IC I 1c 1c I I I Ofsset Ofsset Lo Hi 12 O0 12 5F 23 11 F1 54 DD 65 11 4F 89 A8 AA 36 Sección 4 Manual Técnico Apartir del estudio de la arquitectura básica, de un sistema minimo utilizando el microprocesador de la familia Intel, se realizó un analisis que nos permitio implementar una herramienta , interactiva para poder realizar simulaciónes en lenguaje ensamblador. Partiendo de la propuesta de realizar una herramienta que nos permitiera simular programas en lenguaje ensamblador a nivel de microporcesador interno se desarrollo un sistema basado en la arquitectura de un microporcesador de la familia intel. Arquitectura Interna Básica del sistema minimo8088 Los microprocesador, busca instruciones en lamemoriaconuna operación de lectura, decodifica, el código,y ejecuta la instrución, el sistema de memoria está ocioso entre cada ejecucuón de instrucción . En la siguiente figura se muestra el proceso básico del trabajo del microprocesador, ha 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 enla formal.frm) 1.- El microprocesador lee de mecoria la instrución a ejecutar Direccionada por el registro Ip (Registro apuntador a siguiente instrución) mediante un algoritmo llamado Leecó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 microporcesador ejecuta el código de instrucción mediante un algoritmo llamado ejecutacodigo2(). localizado en la formal 4.-Incrementa 1P.text en tamaño de instrucción +l esta operacion se realiza en Siguiente -click localizada en la forml. ~~ Microprocesador [cuperar rDecodificG (Ejecutar I Recuperar I Decodificar I Ejecutar 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 mega de memoria. Justificando lo anterior el sistema minimo tiene un bus de direcciones de 20 bits, por lo cual se puede dirrecionar desde: 0 0 0 0 0 00000000000000000000 """"""""""""""""""""""- 11111111 1111 1111 1111 F F F F F Por lo cual implementamos un arreglo de las sigientes caracteristicas : Arreglo Unidimensional llamado memoria, de Tamaiio de 1 Mega y de tipo byte I Memoria(0 To 1048575) As Byte Al inicializa el programa se esta garantizando una memoria apartada de 1 mega, con esto se cumple la arquitecturade la memoria. El sistema de memoria esta dividido en bloques los cuales estan definidos de manera. t la siguient 8 bits FFFFF FOOOO OFFFF 00000 La memoria Eprom esta definida en un segmerlto de 64 k mediante un inicio en la dirreción de Memoria(983040) hasta Memoria(1048575) sin uso dentro del sistema. La memoria libre sin uso dentrodelsistemaestadefinida Memoria(65536) hasta Memoria(983039). en el segmento de inicio de La memoria Ram esta definidaen un segmento de 64 k localizado su inicio en la dirección de Memoria(0) hasta Memoria(65535). La memoriaram esta segmentada en tres segmentos que son los siguientes: Segmento de código: definido enMemoria(0) hasta Memoria(l023) z 0000-03FF Segmento de Datos: definido en Memoria(l024) hasta Memoria(2047)~0400-7FF Segmento de pila: definido en Memoria(2048) hasta Memoria(3071) E 0800- BFF Segmento extra: definido enMemoria(3072) hasta Memoria(4095) z OCOO-OFFF Hzsta este pmto se h- defkido y ccncepn!izado !a implementación de !z zxmcria, xms es desaber la memoria debe tener códigos que representen programas NOP FFFFFFF O MOV R8 DATO8 VFVFFFF DETECTA BUSDATOS=ORIGEN DESTINO=BUSDATOS MOV REG REG VVFFFFF 2 DETECTA ASIGNA MOV R16 DATO16 VFFVVFF 3 DETECTA BUSDATOS=ORIGEN DESTINO=BUSDATOS MOV MEM REG FVFFFVV 5 DATASEGMENT DETECTA MAR=DIRECCION BUSDATOS=ORIGEN ASIGNA=MEMORIA MOV REG MEM VFFFFVV DATASEGMENT DETECTA MEMORIA=ASIGNA ADD RS DATO8 VFVFFFF 3 DETECTA BUSDATOS=ORIGEN SUMA ADD R8 R8 VVFFFFF 2 DETECTA SUMA ADD R16 D l 6 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 DATASEGMENT DETECTA DIVlDEMEM 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 ' J DATASEGMENT DETECTA RESTAMEM IMUL R8 VFFFFFF 7 * DETECTA MULTlPLICA MUL MEM FFFFFVV 3 . DATASEGMENT DETECTA MULTIPLICAMEM INC R8 VFFFFFF 2 DETECTA INCREMENTA INC MEM FFFFFVV 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 STACKSEGMENT DETECTA POPREG POP MEM FFFFFVV 4 STACKSEGMENT DATASEGMENT DETECTA POPMEM ; This help project requires hc 3.1 [OPTIONS] errorlog = iconwrks.err title = AYUDA SIMULADOR contents = CONTENIDO compress = false oldkeyphrase = false warning = 3 [FILES] AYUDA.rtf [MAPI CONTENIDO 1 SIMULADOR 2 GRAFICOS 5 DISPLAY 6 TECLAS 7 EJEMPLOS 8 TECLAEJE 9 TECLARES 10 DIRECCIONFISICA 11 MENUS 12 MICRO 13 BIT 14 BYTES 15 BUSDATOS 16 HISTORIA 17 CARGA 18 SUMA 19 RESTA 20 PRODUCTO 2 1 DIVISION 22 SALTO 23 MIC 24 interno 25 registro 26 mapa 27 INS 28 reg 29 EP 30 [WINDOWS] main = "AYUDA SIMULADOR". (0.0,103-3.1023 L., ( 192.192,192 ) = "Icon Works Help", (232206,725,456 ),,, (, 192.192.192 ), I [CONFIG] :CB("glossarv", "&Glossarv". "JI('prueba.hlp>qlossar)i'. 'GLOSSARY')") ;BrowseButtons() # SIMULADOR SISTEMA MINIM08088 El sistema minimo 8088es - una herramienta que se diseño, para poder proporcionar al usuario una herramienta de software que le permita realizar practicar de programación a nivel ensamblador, a manera quepueda realizar sus primeras practicas de dicho lenguajeen un simulador de estas caracteristicas. Cabe señalar que estc sistema tiene sus limitaciones 8088 ya que de programación y que solo podran ser manejadas algunas herramientas del suelesercomplicado para unproyecto terminal lograr modelarysimulartodaslas propiedades de el microprocesador 8088. El contenido de esta ayuda esta dividido en cuatrosecciones: Los temas son los siguientes: e m e Simulador Desensamblador Memoria CONTENIDO # SIMULADOR El sistemaminimoestarepresentadodemaneragráficaenestapantalla,aqui podemos realizar las ediciones, de programas enlenguaje propio de expresiones completas, editados, así como obtener información de los recuperar y salvar los programas componentes graficos, los cuales componen el sistema minimo 8088. Podemos cambiar de dirrecióndeedicióndenuestrosprogramas, asi comodesensamblar elcódigode expresiones completas, aun condigo delenguaje ensamblador. Graficos de los componentes fisico del sistema minimo8088 Display de edición de programas Coniunto de teclas de edición Caia de dirreción Menus # SIMULADOR ’DESENSAMBLADOR En estapantalla se observa el comportamiento de los registros. Registros del microprocesador e ’DESENSAMBLADO ” #/ MAPEO-DE-MEMORIA a # MAPEO-DE-MEMORIA # GRAFICOS Los graficos de esta pantalla representan los componentes fisicos del sistema, y podemos obtener informaciónhacerca de ellos. Para obtener información de estos componentes graficos, debemos posicionar el cursor del mouse en el componente, y teclear un click en el boton derecho del mouse, y para cerrar la ventana de información delcomponente basta con teclear el botón cerrar. # GRAFICOS # DISPLAY El display es una ventana quenos permite vimalizar las expresiones del lenguaje, los registro, asi comolos datos quese van cargando para completar las instruciones. Cabe señalar queen este objetono podemos realizar ninguna edicion directade datos. /# TECLAS Las Teclas se clasifica en: Las teclas de Ediciónson las 5 teclas que se encuentran debajo del display. Estas teclas se componen de las teclas de instrución que son las2 teclas que se encuentran en laparte izquieda de este conjunto, cuyas teclas se etiquetan con los simbolos fi; La tecla de entrar que es la tercera tecla del conjunto cuyo simbolo es -1; siguientes: las dos ultimas teclas de este conjunto con los simbolos siguientes fi son las teclas de registros las cuales nos permiten escoger los registros del microprocesador para formar las instruciones del programa u Las teclas de valor sonlas teclas que se encuentran en la parte inferior izquierda de la pantalla, cuyo conjunto estaformado por teclas cuyos valores oscilan entre el conjunto de simbolos quenos permiten formar el conjunto de los numeros representados en la base hexadecimal. Las teclas de función sonlas siguientes: Tecla desensamblar Tecla Eiecutar Tecla ResetTecla Ejecutar:Nos permite ejecutar la pantalla de ejecución de programas, esta fbnción se puede realizar posicionando el cursor del mouse enla tecla y haciendo un click en el boton izquierdo del mouse 6 mediante las teclas rapidas ALT+E. # TECLAS Tecla Reset: Nos permite resetear la memoria y empezar una nueva ejecución, esta función se puede realizar posicionando el cursor del mouse enla tecla y haciendo un click en el boton izquierdo del mouse 6 mediante las teclas rapidas ALT+R. Tecla desensamblar: Esta tecla nos ejecuta el desensamblador del código de memoria a codigo en lenguaje ensamblador. podemos tener haceso a esta tecla mediante el posicionamiento del cursor del mouse y haciendo un click enel boton izquierdo o mediante la combinación de teclas rapidas ALT+D. # DIRRECIONFISICA #/ DIRREICIONFISICA # MENUS Microprocesador Intel 8088. El intel8088 esun procesador del tipo NMOS que sevende empacado con 40 patas. Tiene unatrayectoria interna de datos de 16 & aunque lee y escribe de memoria solo 8 &a la vez ademaspuede direccionar 1 Megabyte 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 0 Modo minimo. Modomaximo. En el modo máximose 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 8088transfiere 8 bits de datos a la vez puede parecer lógico que se utilicen otras 8 patas para el bus de datos Sin embargo para reducir el mínimo de patas necesarias para que el 8088 se ajuste al paquete estandar de 40 terminaleslas 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 demodoquenunca existe ambiguedades. Por otra parte a la pata 33 seledenomina MNMX (Mínima/Máxima) esta pata se activa para indicar que no esta en el modo máximo sino en el minimo.Para el control del bus de datos 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 aotros maestros potenciales que liberen elbusala lo memoria. La señal READY pretende entregar un byte de memoriacuandoel8088 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 lineas 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 Q S x contienen información del estado interno de la CPU. # MICRO BIT: Dígito binario: la unidad de datos más pequeña que un equipo puede almacenar. Los . bits se expresan como 1 o O.#BIT ## BIT Byte: Unidad minima de almacenamiento para un dato. KiloByte----- 1,000 Bytes. MegaByte--- 1,000,000 Bytes.#BYTES # BYTES BUSDatos: ES el canal por el cual se transfieren 10s datos, entre la memoria y el microprocesador. El canal de datos para el 8088, transfiere 1 byte entre la memoria y el microprocesador.# BUSDATOS # BUSDATOS Sección 5 Código del simulador Jb DISPLAY-MouseMove(Button AsInteger, Shift As Integer, X As Single, + ub Ejecutar Click () DireccionEditarl.Text w l ii 'ub Form Load() .e$ = App.Path + "\mnemonicos.1st" I . = i + l IoCodigo = i 2 1 JoOperacion = O = &HO ~cion~ditar Se inicailiza la dirreccion inicial para editar un p i = O To 15 I'ecla (i).Enabled = False i i = 3 T o 4 Funcion (i).Enabled = False i LAY.Text = mnemonicos(Codigo0peracion) ccionamiento = 1 stros (O) = "AL" stros (1) stros(2) stros (3) stros ( 4 ) stros ( 5 ) stros ( 6 ) stros ( 7 ) stros ( 8 ) = = = = = = = IIBL" IIBH" llCL1l llCH1l llDL1' "DH" = I I A X " I Se inicializan el arreglos de registros del microporc l l A H 1 l istros (18) = " C S " Inicialización del arreglo de codigos de error = "El Seqmento de códiqo, esta definido enO 0 0 0 HI1 iqosdeerror = "El Seqmento de datos, esta definido en0400 HI1 iqosdeerror = " E l Seqmento de pila, esta definodo en 0800 HI1 iqosdeerror = "El Seqmento estra esta, definido en OCOO H" iqosdeerror = "La división excede el de un registro de 8 bliqosdeerror modificar reqistros AX y el XL I1 iqosdeerror ( 5 1 = 11 1ibre 11 iqosdeerror ( 6) = 1ibre iqosdeerror ( 7 1 = 11 1ibre igosdeerror ( 8 ) = 11 1ibre '1 11 (1 rml - 2 Case 5 Set Case 6 Set Case 7 Set Case 8 Set Case 9 Set Case 10 Set Case 11 Set Case 12 Set Case 13 Set Case 14 Set Case 15 Set Case 16 Set Case 17 Set Case 18 Set Case 19 Set Case 20 Set Case 21 Set Case 22 Set Case 23 Set Destino = CH Destino = DL Destino = DH Destino = ax Destino = bx Destino = cx Destino = dx Destino = si Destino = di Destino= bp Destino = SS Destino = es Destino = ds Destino = cs Destino = T1 Destino = T2 Destino = T12 Destino = MAR Destino = BusDatos End Select End I f If Operacion(CodiqoOperacion).ByteReg2 Then Select Case Registro2 Case O Origen = AL.Text Case 1 Origen = AH.Text Case 2 Origen = BL.Text Case 3 Origen = BH.Text Case 4 Origen = CL.Text Case 5 Origen = CH.Text Case 6 Origen = DL.Text Case 7 Origen = DH.Text Case 8 Origen = ax.Text Case 9 Origen = bx.Text Case 10 Origen = cx.Text Case 11 Origen = dx.Text Case 12 m rml - 3 Origen Case 13 Origen Case 14 Origen Case 15 Origen Case 16 Origen Case 17 Origen Case 18 Origen Case 19 Origen Case 20 Origen Case 21 Origen Case 22 Origen Case 23 Origen = si.Text = di.Text = bp.Text = ss.Text = es.Text = ds.Text = cs.Text = T1.Text = T2.Text = Tl2.Text = MAR.Text = BusDatos.Text End Select End If If Operacion(Codiqo0peracion).Dato8 Then Origen = Hex(DatoByte) 'checar si se usa BinHex() End If If Operacion(Codiqo0peracion).DatoHi Then If ExisteDestino Then Origen = Hex (DatoWord) End If End If d Function blic Sub EjecutaCodigo2 () tones = vbRetryCance1 + vbcritical + vbDefaultButton1 Define tulo = "Códiqos de error" I Define el título. uda = "ayuda.hlp" Define el archivo de ayuda. mero = 1000 I Dim dirreciondatosAs Byte For k = O To 30 Select Case Operacion (CodigoOperacion) (k) .Micro Case "DATASEGMSNT" DATOS$ Cclse I' = Inicializa el segmento de datos "0400" CGCEC;ZGblE;;T!' CODIGOS I ' Inlciaiiza el segmento de cociigo = "0000" Case "STACKSEGMENTflI inicializa el segmento de pila STACK$ = "0800" los botones. rml - 4 Case "ASIGNA" asigna el valor del origen al destino Destino.Text = Origen Case llASIGNA=MEMORIAfl I Asigna el contenido de un registro al Segmento de da S Seqmento$ = DATOS$ T1.Text = Hex (Val (T1. (Trim Text) ) ) T2.Text = Hex (Val (T2. (Trim Text) ) ) Tl2.Text = Trim(T1.Text + T2.Text) ".Text = Val("&H'f+ Tl2.Text) valormem = Val ( &HI1 + Trim (T12. Desplazamiento$ = T12.Text ento$) Text) ) While Len (Desplazamiento$) < 4 Desplazamiento$ = l 1 0 l 1 + Desplazamiento$ Wend BusDirecciones.Text = " O 1 I + Desplazamiento$ m DireccionEditar = CLng("&H" + Segmento$) * 1 6 + CLng("&H" + Desplaza If Len(0riqen) = 4 Then Memoria(Direcci0nEditar) = CLnq("&HI' + Left (Trim(0riqen) 2)) Memoria (DireccionEditar + 1) = CLng(Il&H" + Right (Trim(0rigen) 2 I I Else Case "MEMORIA=ASIGNA" 'Asigna el contenido de una dirección de memoria del S 'mento 'de datos a unregis 'O Seqmento$ = DATOS$ T1.Text = Hex(Va1 (T-rim(T1 .Text) ) T2.Text = Hex(Val(Trim(T2.Text))) T12.Text = Trim(T1.Text + T2.Text) Desplazamiento$ = Tl2.Text BusDirecciones .Text = " 0 " + T12.Text < 5 While Len (BusDirecciones. Text) BusDirecciones.Text = 1 1 0 ' 1+ BusDirecciones.Text Wend IBusDatos.Text = Origen < 4 While Len (Desplazamiento$) DireccionEditar -ento$) = CLng("&H1I + Segmento$) * 16 + CLng('l&HIl + Cesplaza BusDatos.Text = Hex(Memoria(DireccionEditar)) Destino = BusDatos.Text MAR.Text = Memoria!DireccionEditar) I 1 Case "SUTV~AMEM'~ Suma e1 contenido de un registro entre el cc'c' m a direccón del segemnto dedatc;s I SeqmentoS = DATOS$ T1.Text = Hex (Val(Trim(T1. Text)) ) T2.Text = Hex (Val (Trim iT2. ) ) Text) . . ;_e rml - 5 T12.Text = Trim(T1.Text + T2.Text) Desplazamiento$ = T12.Text BusDirecciones.Text = T12.Text While Len(BusDirecciones.Text) < 5 BusDirecciones.Text = I r O " + BusDirecciones.Text Wend While Len (Desplazamiento$) < 4 Desplazamiento$ = I r O t l + Desplazamiento$ Wend BusDatos.Text Case "RESTA" o reqistor Hex(Val(Memoria(DireccionEditar))) 'Resta el contenido de un registro entre el contenido 0 de Destino.Text una = Case "RESTAMEM" dirección de = Hex(CLng(lt&hlt + Destino.Text) - (lLng(lt&hlt + Origen)) 'Resta el contenido deun registro entre el contenido d del segemnto de datos ento$) SeqmentoS = DATOS$ T1.Text = Hex (Val (Trim (T1. ) ) Text) T2.Text = Hex (Val (Trim (T2.Text)) ) Tl2.Text = Trim(T1.Text + T2.Text) Desplazamiento$ = T12.Text BusDirecciones .Text = r l O t r + T12. Text BusDatos.Text = Oriqen BusDirecciones.Text = T12.Text While Len(BusDirecciones.Text) < 5 BusDirecciones.Text = l l O t l + BusDirecciones.Text Wend While Len (Desplazamiento$) < 4 Desplazamiento$ = l l O t l + Desplazamiento$ Wend DireccionEditar = CLng(ll&H1t + Segmento$) * 16 + CLng(lt&H1t + Desplaza T1.Text = Memoria(DIRRECIONED1TAR) ("&h" + Destino Destino.Text = Hex (Val tar)) 1 .Text) - Val (Memoria (DireccionE BusDatos-Text = Hex(Val(Memoria(DireccionEditar))) Case "MULTIPLICA11 T12.Text T1 .Text T1.Text ax.Text = = = = CLnq(fl&htl + AL.Text) CLnq (I1&htt + CL.Text) CLnq ( " & h " + Destino.Text) Xex (Val ( I 1 & h "+ T12 .Text) * Val ( " & h l l + T1.Tlxt J i Case ttMULTIPLICAMEM'l Multiplicael contenido del registro AL por el con :nido de una direccibn del segmento de datos de 8 bits, y el producto ?o :spalda en elreqistro AX Seq.rnentoS = LJliriGbs T1. Text = Hex (Val (T1. (Trim Text)) ) T2.Text = Hex (Va1 (Trin(T2.Text)1 ) T12 .Text = Trim (T1.Text + T2 .Text) Desplazamiento$ = T12.Text BusDirecciones.Text = T12.Text While L e n ( B u s C i r e c c i o n e s . T e x c ) < 5 BusDirecciones.Text = + BusDirecciones.Text Wend BusDirecciones .Text = " O " + T12.Text 'BusDatos.Text = Orlqen While Len (Desplazamiento$) < 4 Desplazamiento$ = + Despiazamiento$ I rml - 6 Wend DireccionEditar CLng("&H" + Segmento$) = entoS 1 I tro A H . * 16 + CLng(ll&H1l + Desplaza El cociente lo pone en el registro AL y el residuo en el reg Tl2.Text = CLnq("6rh" + ax.Text) T1.Text = CLnq(Il&h" + Destino.Text) BusDatos.Text = Destino If Len(Hex(iT12.Text) / Val(T1.Text))) > 2 Then res = MsgBox(Codigosdeerror(4), botones, Titulo, Ayuda,5 If res = vbCancel Then ComandoAnima- Click End If Else AL.Text A H . Text End If = = Hex((T12.Text) / Val(T1.Text)) Hex (Val (T12.Text) Mod Val (T1.Text) ) Case "DIVIDEMEM" Divide do de 16 bits S el contenido del registroAx entre el conte I de una direccion del segment de datos .ento$) Seqmento$ = DATOS$ T1.Text = Hex (Val (Trim .Text) (T1 ) ) T2.Text = Hex (Val (Trim (T2.Text) ) ) Tl2.Text = Trim(T1.Text + T2.Text) Desplazamiento$ = Tl2.Text BusDirecciones.Text = Tl2.Text While Len(BusDirecciones.Text)< 5 BusDirecciones.Text = r l O " + BusDirecciones.Text Wend BusDatos.Text = Oriqen < 4 While Len (Desplazamiento$) Desplazamiento$ = I r O " + Desplazamiento$ Wend DireccionEditar = CLng(ll&H1l + Segmento$) * 16 + CLng("&Htl+ Desplaza T12. Text = CLnq ( "&h" + ax.Text) T1 .Text = CLnq (I1&h" + CL.Text) o T1.Text = CLnq(ll&hll + Destino.Text) ) ) > 2 Then If Len (Hex( (T12.Text) / Val (Memoria (DireccionEditar) res = MsqBox (Codiqosdeerror ( 4 ) , botones, Titulo, Ayuda,S! If res = vbCancel Then ComandoAnima- Click End If Else AL.Text = Hex( (Tl2.Text)/ Val (Memoria(Direcci0nEditar)j ) G lrda el cociente en AL Ah.'T'exr;= dex{Vai ( 1 1 2 :l'exc) Moa Val (lViemoria(D1reccionEd~~~r~ ) ' Guarda el residuo en AH End If BusDatos.Text = Hex(Val(Memoria(DireccionEditar))) Case "INCREMENTA" Incrementa el contenido en uno de un regiscz-7 iestin Destino.Text Ito de = Hex(Val("&h" + Destino.Text) + 1) Case "INCREMENTAMEM" datos I Incrementa el contenido de una direccic-:: egm : rml - 7 Seqmento$ = DATOS$ T1.Text = Hex(Val(Trim(T1.Text))) (Val (Trim Text) (T2. ) ) T2.Text = Hex Tl2.Text = Trim(T1.Text + T2.Text) Desplazamiento$ = Tl2.Text BusDirecciones.Text = T12.Text While Len (BusDirecciones. Text) < 5 BusDirecciones.Text = r l O f f + BusDirecciones.Text Wend BusDatos.Text = Oriqen While Len (Desplazamiento$) < 4 Desplazamiento$ = 1 1 0 " + Desplazamiento$ Wend DireccionEditar = CLng ( "&H" + Segmento$) * 16 -+ CLng(f'&H1l + Desplaza ento$) MAR.Text = Memoria(Direcci0nEditar) Memoria(Direcci0nEditar) = Hex(CLng("&H" + MAR.Text)) Case "DECREMENTA" Destino.Text to de = + 1 Decrernenta el contenido de un registro Hex(Val(ll&Hfl + Destino.Text) - 1 ) Case IIDECREMENTAMEM" 'Decrementa el contenido de una direccion del se* datos Seqmento$ = DATOS$ Selecciona el segmento de datos T1.Text = Hex (Val (Trim (T1. ) ) Text) T2.Text = Hex(Val(Trim(T2.Text))) Tl2.Text = Trim(T1.Text + T2.Text) Desplazamiento$ = T12.Text BusDirecciones.Text = Tl2.Text While Len (BusDirecciones. Text) < 5 BusDirecciones.Text = 'IO" + BusDirecciones.Text Wend BusDatos.Text = Oriqen While Len (Desplazamiento$) < 4 Desplazamiento$ = l l O 1 f + Desplazamiento$ Wend DireccionEditar = CLng (Il&H" + Segmento$) * 16 + CLng(ll&Hfl + Desplaza ento$) MAR.Text = Memoria(Direcci0nEditar) I f Memoria(Direcci0nEditar) < > O Then Memoria(Direcci0nEditar) = Hex(CLng("&hIl + MAR.Text)) - 1 Else Error 1 End I f Case "INCREMENTA A MAR" MAR.Text = Hex(CLng("&h" + MAR.Text) + 1) I I Case "DECREMENTA" Destino.Text = Hex(ValiDestino.Text) - 1) I I I I Case llCOMPLEMENTO1r Destino.Text = Hex(255 Case "MAR=DIRECCION" - Val(0rigen)) ' El contenido del busdatos lo carga al destin Case 'fDESTINO=BUSDATOS'l 1 I I ' Destino.Text = BusDatos.Text Case "BUSDATOS=DESTINO" Destino = BusDatos.Text Case llBUSDATOS=ORIGENf''El contenido del origen lo carga al bus datos BusDatos.Text = Oriqen Case "ORIGEN=BUSDATOS1t BusDatos.Text = Oriqen Case "ORIGEN=BUSDIRRECIONES" EsribirBusDirecciones rml - 8 I Case l'BUSDIRRECIONES=ORIGENtf ' Case '1DESTINO=BUS31RRECIONESgt Case l'BUSDIRRECIONES=DESTINOtl Case I'DESTINO ES Tltl ' SetDestino = T1 'Case 'IDESTINO ES T2" I Set Destino = T2 'Case "DESTINO ES T12" 1 Set Destino = T12 I Case "ORIGEN ES T1" Set Oriqen = T1 'Case "ORIGEN ES T2" Set Oriqen = T2 'Case 'IORIGEN ES T12" Set Oriqen = T12 'faltan los demss casos Case I ip.Text = Ejecución salto un de relativo Hex( (Val ('t&h't + ip.Text) + Val ('l&h" + Destino.Text)) ) Case I1PUSHREG" 'Ejecución del apilamiento en SS de un registro PILA = STACK$ Seleccionamos el segmento de pila T1.Text = Hex (Val (T1. (Trim Text)) ) T2.Text = Hex(Val(Trim(T2.Text))) T12.Text = Trim (T1.Text + T2. Text) Desplazamiento$ = Tl2.Text BusDatos.Text = Oriqen BusDirecciones.Text = Val (sp.Text) + Val ( " 0 8 0 0 1 ' ) BusDirecciones.Text = Hex( (Val('t&h'' + sp.Text) + Val(It&H1'+ ' t 0 8 0 0 ' t While Len(BusDirecciones.Text) e 5 BusDirecciones.Text = " O " + BusDirecciones.Text Wend BusDirecciones.Text = T12.Text 'While Len(BusDirecciones.Text) < 5 'BusDirecciones.Text= ' 1 0 ' 1 + BusDirecciones.Text Wend While Len (Desplazamiento$) < 4 Desplazamiento$ = I ' O " + Desplazamiento$ Wend DireccionEditar = CLnq(I'&Hft+ PILA) * 16 + CLnq("&HI1 + sp.Text) Memoria(Direcci0nEditar) = CLnq(l'&H1t + Left(Trim(Destino1 , 2)1 Auxl = Hex(CLnq("&H" + Left (Trim(Destin0) , 2) 1 ) Memoria(Direcci0nEditar + 1) = CLng(t'&H1l + Right (Trim(Destino1,2 aux2 = Hex(CLnq("&H" + Riqht(Trim(Destin0), 2 ) ) ) BusDatos.Text = Auxl + aux2 sp.Text = Hex((Val("&h" + sp.Text) + Val(2))) Case PUSHMEMI' I , Ejecución de Apilamiento en el SS de un dato d e l CS PILA = STACKS Seleccionamoselseqmentodepila SeqmentoS = DATOS$ Selecionamos el seqmento de pila Desplazamiento$ = Trim (Hex(Val (Trim (T1.Text)) ) + Hex (Val I I BusDirecciones.Text = Hex( (Val("&h" + sp.Text) + Val("&H" + (Trim (T2.Tex 110800")) While Len(BusDirecciones.Text1 < 5 BusDirecciones.Text = " 0 " + BusDirecciones.Text Wend While Len (Desplazamiento$) < 4 Desplazamiento$ = " 0 " + Desplazamiento$ Wend DireccionEditar = CLng ( Ir&Htl + Segmento$) * 16 + CLng("&Hft+ 'ssnlaza -ento$) Auxl = Str (Memoria (DireccionEditar) ) lrml - 9 aux2 = Str(Memoria(Dir2ccionEditar + 1)) While Len(sp.Text) < 4 sp.Text = + sp.Text Wend DireccionEditar = CLnq("&H" + PILA) * 16 + CLnq(ll&H1l + sp.Text) = Hex (Val (ll&hll + Auxl) ) Memoria (DireccionEditar) Memoria(Direcci0nEditar + 1) = Hex(Va1 ("&h" + aux2) ) sp.Text = Hex( (Val (I1&h" + sp.Text) + Val(2))) + Hex (aux2) BusDatos .Text = Hex (Auxl) Ejecución de Desapila del SS a un reg des Case "POPREG" no de 16 Bites SeqmentoS = STACK$ Seleccionamos el segmento de pila While Len(sD. Text) e 4 sp.Text = r r O 1 l + sp.Text Wend Di-reccionEditar = CLng("&H" + Segmento$) * 16 + CLng("&HI1 + sp.Text) Direccion del SS BusDirecciones.Text = Hex( (Val (ll&hlf+ sp.Text) + Val ("&H" + ' 1 0 8 0 0 1 1 ) I While Len(BusDirecciones.Text) < 5 BusDirecciones.Text = ' ' 0 " + BusDirecciones.Text Wend auxiliarl = Hex(Val(Memoria(DireccionEditar - 1)) ) auxiliar2 = Hex(Val(Memoria(DireccionEditar - 2))) BusDatos.Text = auxiliar2 + auxiliarl Destino.Text = auxiliar2 + auxiliarl Asignación al resgistro dest .o Eliminación de valoes de la pila Memoria(Direcci0nEditar - 1) = O Eliminación de valoes de l a pila Memoria(Direcci0nEditar - 2) = O delSp sp.Text = Hex (Val ("&h" + sp.Text) - Val (2)Decremento Case llPOPMEM1l Seqmento$ = STACK$ Seleccionamos el segmento de pila While Len(sp.Text) < 4 sp.Text = r r O 1 l + sp.Text Wend DireccionEditar = CLng("&H" + Segmento$) * 16 + CLng("&H1'+ sp.Text) Direccion del SS auxiliarl = Hex (Val (Memoria (DireccionEditar - 1)) ) auxiliar2 = Hex(Val(Memoria(DireccionEditar - 2 ) ) ) Memoria(Direcci0nEditar - 1) = O Eliminación de valoes de la pila Memoria(Direcci0nEditar - 2) = O Eliminación de valoes de l a pila sp.Text = Hex (Val(Il&h" + sp.Text) - Val (2)1 Decremento del S p SeqmentoS = DATOS$ T1.Text = Hex(ValiTrim(T1.Text))) (T2.Text ) T2.Text = Hex (Val (Trim T12.Text = Trim(T1.Text + T2.Text) BusDirecciones.Text = T12.Text While LeE iBcsDireccicnes . Text 1 < 5 BusDirecciones.Text = 1 1 0 1 1+ BusDirecciones.Text Wend Desplazamiento$ = T12.Text BusDatos.Text = Oriqen < 4 While Len (DesolazamlentoS) Desplazamiento$ = " 0 " + Desplazamiento$ Wend DireccionEditar = CLng ( I1&H" + Segmento$) * 16 + CLng(I1&Hl1 -ento$) MAR.Text = Memoria(DireccionEditar) Memoria (DireczionEditar)= Val. ( I 1 & h "+ auxiiiar-2) Memoria(Direccior1Zditar + 1) = Va' \ &h" + auxiliarl) BusDatos.Text = auxiliar2 + auxillarl 'I1 End S e l e c t Next k Id Sub rml - 10 blic Sub HazDump () Micad$ = MemoriaFisica$(SegmentoDump.Text, DesplazamientoDump.Text) While Len(MiCad$) < 5 MiCad$ = " O " + MiCad$ Wend DireccionFisicaDump = CLng ( Ir&HI1 + Micad$) Dump.Text = I I I I Dim OffsetAux As Lonq Auxl$ = "&H" + Desp1azamientoDump.Text OffsetAux = CLnq(Auxl$) For i = DireccionFisicaDump To DireccionFisicaDump + 1 2 * 8 Step 8 NumAuxTruco = OffsetAux CadenaAuxS = BinHex(0ffsetAux) OffsetAux = NumAuxTruco While Len (CadenaAuxS) < 4 CadenaAux$ = ' ( 0 + CadenaAuxS Wend CadenaAuxS = CadenaAux$ + Forj =iToi+7 num$ = Hex (Memoria(j) ) If Len (num$) = 1 Then num$ = O + num$ CadenaAux$ = CadenaAuxS + num$ + 11 Next -j F o r j = i T o i + 7 If Memoria(j) < > O And Memoria(j) c > 9 Then CadenaAuxS = CadenaAuxS + Chr(Memoria(j)) Else II CadenaAuxS = CadenaAuxS + End If Next j Dump.Text = Dump.Text + Chr(l3) + Chr(l0) + CadenaAux$ OffsetAux = OffsetAux + 8 Next i Id Sub lblic Function ObtenDireccionNoCero(Direccion As Long) While Direccion < 1023 And Mernoria(Direcci0n)= O Direccion = Direccion + 1 Wend ObtenDireccionNoCero = Direccion Id Function lblic Function ObtenTamafioiDireccion AsL o n g ) DireccionInicial = Direccion While Direccion < 1024 And (Memoria(Direccion)< > O Or Memoria(Direcclon+ 1 < > O Or Memoria(Direcc1on+ 2 ) < > O Or Memoria(Direcci0n + 3 ) < > O Or Memeria( ireccion + 4 ) < > O ) Direccion = Direccion + 1 Wend ObtenTamaño = Direccion - DireccionInicial .Id Function rivate Sub Abrir Click 0 Dim DireccionAs Lonq Dim TamañoAs Integer Dim DatoAs Byte Dim i For i = O To 65535 Step 1 rml - 11 Memoria (i) = CLng ( "&hfl + Next i DE.Text = ~ f O O O O : O O O O ~ ~ CodiqoOperacion = O DireccionEditar = &HO 'loofr) Proceso.Min = 1 Proceso.Max = 27 Proceso.Value = Proceso.Min On Error GoToFinalizar Labe37.Caption = "Archivo: If + AbrirMemoria.filename 'AbrirMemoria.Action = 1 AbrirMemoria .DialoqTitle = "Abrir archivof1 AbrirMemoria.ShowOpen Open AbrirMemoria.fi1ename For Input 1As On Error GoTo Finalizarcerrar Label37.Caption = AbrirMemoria.filename While Not EOF(1) Input # 1 , Direccion, Tamaño For i = 1 To Tamaño Input #1, Dato Memoria(Direcci0n + i - 1 ) = Dato Proceso.Value = i Next i Wend 'Proceso.Value = Proceso.Min nalizarcerrar: Close 1 HazDump nalizar: d Sub ivate Sub AH Chanqe ( 1 BanderaReqistro Then BanderaRegistro = False d .d If Len(AH.Text) c 2 Then While Len (AH.Text) c 2 AH.Text = I f 0 " + AH.Text Wend End If If Len (AH.Text) > 2 Then AH.Text= Right (AH.Text, 2 ) ax.Text = AH.Text + AL.Text BanderaRegistro = True T F IL Sub ,ivate Sub AH KeyPress(KeyAscii As Integer) BanderaReqistro = False Caracter = Chr(KeyAscii) I f (Caracter > = " 0 " And Caracter c = I r 9 I t ) Or (Caracter >= "All And Caracter F") Or (Caracter >= And Caracter < = f l f r rThen ) ) KeyAscli = Asc (Ucase (Caracter) cadena$ = cadena$ = Mid ( A H .Text , 2 , 1) -.Text = cadena$ AH.SelStart = 1 Else KeyAscii = O End I f BanderaRegistro = True Id Sub <= rml - 12 ivate Sub AL Chanqe0 BanderaRegistro Then If Len (AL.Text) < 2 Then While Len(AL.Text) < 2 AL.Text = 11011+ AL.Text Wend End If If Len (AL.Text) > 2 Then AL.Text BanderaReqistro = False ax.Text = AH.Text + AL.Text BanderaRegistro = True d If d Sub = Right (AL.Text, 2 ) ivate Sub AL KeyPress(KeyAscii As Integer) BanderaReqistro = False Caracter = Chr (KeyAscii) If (Caracter >= 1 1 0 1 1And Caracter <= f 1 9 f 1 )Or (Caracter >= "A" And Caracter F") Or (Caracter >= I1alfAnd Caracter c = fIflr)Then KeyAscii = Asc(UCase(Caracter)) cadena$ = cadena$ = Mid(AL.Text, 2, 1 ) AL.Text = cadena$ AL.Se1Start = 2 Else KeyAscii = O End If BanderaRegistro = True d Sub ivate Sub AnimaTimero Siguiente-Click d Sub ivate Subax Chanqe 0 BanderaReqistro Then BanderaRegistro = False If Len (ax.Text) < 4 Then While Len(ax.Text) < 4 ax.Text = " O f 1 + ax.Text Wend End If If Len(ax.Text) > 4 Then ax.Text = Right(ax.Text, 4 ) AH.Text = Left(ax.Text, 2 ) AL.Text = Riqht(ax.Text, 2) BanderaRegistro = True d If .a Sub -ivate Sub ax KeyPress(KeyAsciiAs Integer) BanderaReqistro = False ValldaHexadecimal KeyAscii, ax BanderaRegistro = True td Sub -ivate Sub BH Chanqe 0 )x.Text = SH.Text + BL.Text ! BanderaReqistro Then BanderaRegistro = False If Len(BH.Text) < 2 Then While Len(BH.Text) < 2 BH.Text = I f O " + BH.Text c= m rml - 13 Wend End If If Len(BH.Text) > 2 Then BH.Text bx.Text = BH.Text + BL.Text BanderaRegistro = True = Right(BH.Texc, 2) d If d Sub ivate Sub BH KeyPress(KeyAscii As Integer) Caracter = Chr(KeyAscii) If (Caracter >= l 1 O l 1 And Caracter < = 1 1 9 1 1Or ) (Caracter >= "A" And Caracter < I1F1l)Or (Caracter >= llall And Caracter < = I1fT1) Then 1 KeyAscii = Asc(UCase(Caracter)) cadena$ = 1 1 1 1 I cadena$ = Mid (BH.Text I 2 I 1) I BH.Text = cadena$ I BH.SelStart = 1 S I Else I KeyAscii = O 'End If nderaReqistro = False Caracter = Chr(KeyAscii1 l Caracter < = I 1 g 1 l ) Or (Caracter >= "AI1And Caracter e= If (Caracter >= l r O 1 And F") Or (Caracter >= IIa1I And Caracter <= I1f1l)Then ) KeyAscii = Asc (Ucase (Caracter) cadena$ = 1 1 1 1 cadena$ = Mid (BH.Text , 2, 1) BH.Text = cadena$ BH.SelStart = 2 Else KeyAscii = O End If BanderaRegistro = True 1 d Sub ivate Sub BL Chanqe0 x.Text = BH.Text + BL.Text BanderaRegistro Then If Len (BL.Text) < 2 Then < 2 While Len (BL.Text) BL.Text = 1 1 0 1 1+ BL.Text Wend End I f I f Len(BL.Text) > 2 Then BL.Text = Right(BL.Text, 2) BanderaReqistro = False bx.Text = BH.Text + BL.Text BanderaRegistro = True id I f Id Sub .ivate Sub BL KeyPress(KeyAsciiAs Integer) Caracter = Chr(KeyAscii1 I f (Caracter >= " 0 " And Caraccer c = I 1 g 1 l ! Or (Caracter >= I1A1I And F") Or (Caracter >= And Caracter < = I 1 f T 1Then ) KeyAscii = Asc (Ucase (Caracter) ) cadena$ = cadena$ = Mid(BL.Text, 2 , 1) BL.Text = cadena$ BL.SelStart = 2 I1I1 Czr" '-3:: < = rml 14 - Else KeyAscii End If ivate Sub bp.Text = d Sub = O bp Chanqe () Then bp.Text = 'I1! 110000" ivate Sub bp KeyPress(KeyAscii As Integer) ValidaHexadecimal KeyAscii, bp d Sub ivate Sub BusDatosChanqeO If BusDatos.Text = Then BusDatos-Text = 1 1 0 0 0 0 1 1 If Len(BusDatos.Text) = 1 Then = 11011 + BusDatos .Text BusDatos. Text End If If Len(BusDatos.Text) = 3 Then + BusDatos . Text BusDatos. Text= End If Memoria (CLng ( I1&Htl + MAR. Text) ) = Val ( I1&h" + BusDatos Text) Mod 256 d Sub ivate Sub BusDatos KeyPress(KeyAscii As Integer) BanderaReqistro = False ValidaHexadecimal KeyAscii, BusDatos BanderaRegistro = True d ValidaHexadecimal KeyAscii, BusDatos Sub ivate Sub BusDirecciones ChanqeO Then BusDirecciones.Text If BusDirecciones.Text = d Sub = 11000011 .ivate Sub BusDirecciones KeyPress(KeyAscii As Integer) ValidaHexadecimal KeyAscii, BusDirecciones d Sub ivate Sub bx Chanqe 0 H.Text = Left(bx.Text, 2 ) L.Text = Riqht (bx.Text, 2) BanderaReqistro Then BanderaRegistro = False If Len (bx.Text j < 4 Ther, While Len(bx.Textj < 4 bx.Text = " O " + bx.Text Wend BH.Text = Left(bx.Text, 2 ) BL.Text = Riqht(bx.Text, 2) BanderaRegistro = True id If Id Sub rivate Sub bx KeyPress(KeyAscii As Integer) ValidaHexadecimal KeyAscii, bx Id Sub m rml - 15 ivate Sub -Change CH 0 cx.Text = CH.Text + CL.Text BanderaReqistro Then BanderaRegistro = False If Len (CH.Text) < 2 Then While Len(CH.Text) < 2 CH.Text = I 1 O 1 l + CH.Text Wend End If If Len(CH.Text) > 2 Then CH.Text = Right(CH.Text, 2) cx.Text = CH.Text + CL.Text BanderaRegistro = True d If d Sub ivate Sub CH KeyPress(KeyAscii As Integer) Caracter = Chr(KeyAscii1 If (Caracter >= I 1 O " And Caracter c = I 1 9 l 1 ) Or (Caracter I1FI1) Or (Caracter >= IIaII And Caracter < = l1fI1) Then 1 KeyAscii = Asc (Ucase (Caracter) ) 1 cadena$ = I f t 1 1 cadena$ = Mid(CH.Text, 2, 1) CH.Text = cadena$ CH.SelStart = 1 Else KeyAscii = O End If m >= IIA" And Caracter c :nd Sub //I// .nderaReqistro = False Caracter = Chr (KeyAscii) If (Caracter >= I 1 O " And Caracter < = 1 1 9 1 1 Or ) (Caracter FII) Or (Caracter >= "a" And Caracter < = Then KeyAscii = Asc(UCase(Caracter)) cadena$ = cadena$ = Mid(CH.Text, 2, 1) CH.Text = cadena$ CH.SelStart = 2 Else KeyAscii = O End If BanderaRegistro = True End Sub :ivate Sub Check1 Click0 i Checkl.Value = O Then intervalo.Enabled = False desactivado" Label33.Caption = "Intervalo tiempo -se " " intervalo.Enabled = True Label33.Caption = "Intervalo- tiempo -activadoll id I f id Sub () :ivate Sub CL Chanqe :x.Text = CH.Text + CL.Text BanderaRegistro Then If Len (CL.Text) < 2 Then While Len (CL.Text) < 2 >= I1A" And Caractere = rml - 16 CL.Text = Wend End If If Len(CL.Text) > BanderaReqistro = cx.Text = CH.Text BanderaRegistro = 110" + CL.Text 2 Then CL.Text = Right(CL.Text, 2) False + CL.Text True 3 Sub ivate Sub CL KeyPress(KeyAscii As Integer) Caracter = Chr(KeyAscii) If (Caracter >= llO1 f And Caracter e= f 1 9 1 1 )Or (Caracter >= I1AI1And Caracter F " ) Or (Caracter >= And Caracter e= l l f f lThen ) ) KeyAscii = Asc (Ucase (Caracter) cadena$ = cadena$ = Mid(CL.Text, 2, 1) CL.Text = cadena$ CL.SelStart = 2 Else KeyAscii = O End If <= m ivate Sub ComandoAnima Click0 If Anima.Enabled Then Anima.Enabled = False Siquiente.Enabled = True ComandoAnima. Caption = "&Anima" Else Anima.Enabled = True Siquiente.Enabled = False ComandoAnima.Caption = "&Parar" End If d Sub ivate Sub ComandoAnima- MouseMove(Button As Integer, Shift As Integer, X As Sin e, Y As Sinqle) Muestra mensaje enla parte inferior de la pantalla el mensaje" udarapida.Caption = "Ejecuta el proqrama residenteen memoria, continuamente a elocidad determinada por el intervalo" d Sub ivate Sub Command1 Click0 icializa- Registrosm i r i = 1024 To 65535 Step 1 rncriaii) = CLng("&h" + I l O O l l ) xt i .d Sub Muestra mensaje en la parte inferior de la pantalla el mensaje" 7udarapida.Caption = "Resetea elI P y los registros para empezar una nue'ia ejec :ión" td Sub *ivate Sub Command2 Click0 :sensamblador.Show1 td Sub rml - 17 Muestra mensaje en la parte inferior ladepantalla el mensaje" .udarapida.Caption= "Muestra el código en lenguaje ensamblador" d Sub ivate Sub Command3 Click0 aux$ = MemoriaFisica(SegmentoDump.Text, Desp1azamientoDump.Text) While Len(aux$) c 5 aux$ = l 1 O " + aux$ Wend aux$ = I1&HI1+ aux$ Memoria(CLnq(aux$)) = Val (ll&H1l + NuevoValor.Text) Dump.Refresh Ha zDump Dump.Refresh d Sub ,ivate Sub Command3- MouseMove(Button As Integer, Shift As Integer, X As Single, As Sinqle) un valor nuevo enl a me udarapida.Caption = "Este botón nos permite introducir ria" .d Sub S ivate Sub cs Chanqe 0 f cs.Text = I 1 I 1 Then cs.Text d Sub = 1100001' .ivate Sub cs KeyPress(KeyAscii As Integer) ValidaHexadecimal KeyAscii, cs cs.Text c > 1 1 0 0 0 0 1 1Then (0)) MsqBox (Codigosdeerror .d I f .d Sub ,ivate Sub cx Chanqe ( ) IH.Text = Left (cx.Text, 2) 'L.Text = Right(cx.Text, 2 ) BanderaReqistro Then BanderaRegistro = False If Len (cx.Text) < 4 Then While Len (cx.Text) < 4 cx.Text = 1 1 0 1+1 cx.Text Wend End I f If Len(cx.Text) > 4 Then cx.Text CH.Text = Left(cx.Text, 23 CL.Text = Riqht (cx.Text, 2) BanderaRegistro = True id If = Right(cx.Text, id Sub rivate Sub cx KeyPress(KeyAscii As Integer) ValidaHexadecimal KeyAscii, cx Id Sub rivate Sub DE Change :scad = DE.Text Id Sub () rivate Sub DesplazarnientoDurnp-Change0 4) rml - 18 HazDump aux$ = MemoriaFisica(SegmentoDump.Text, DesplazamientoDump.Text) While Len(aux$) c 5 aux$ = I 1 O " + aux$ Wend aux$ = &HI1 + aux$ NuevoVa1or.Text = Hex(Memoria(CLng(aux$) Mod 1024)) While Len(NuevoValor.Text) < 2 NuevoValor . Text = O + NuevoValor. Text Wend II mp.Refresh d Sub ivate Sub DesplazamientoDump KeyPress(KeyAsciiAs Integer) ValidaHexadecimal KeyAscii, DesplazamientoDump d Sub ivate Sub DH Chanqe 0 .x.Text= DH.Text + DL.Text BanderaReqistro Then BanderaRegistro = False If Len(DH.Text) < 2 Then While Len(DH.Text) < 2 DH.Text = + DH.Text Wend End If If Len(DH.Text) > 2 Then DH.Text dx.Text = DH.Text + DL.Text BanderaRegistro = True .d If = Right (DH.Text,2) .d Sub .ivate Sub DH KeyPress(KeyAscii As Integer) Caracter = Chr (KeyAscii) If (Caracter =.= 1 1 O 1 ! And Caracter c = t 1 9 1 1 )Or (Caracter >= "A" And Caracter < IIFIl) Or (Caracter >= IIaII And Caracter < = I 1 f l f ) Then I KeyAscii = Asc (Ucase (Caracter) ) 1 cadena$ = I cadena$ = Mid(DH.Text, 2, 1) I DH.Text = cadena$ I DH.Se1Start = 1 I Else KeyAscii = O End If LnderaReqistro = False Caracter = Chr(KeyAscii) I f (Caracter > = " 0 " And Caracter c = ' ' 9 " ) Or (Caracter >= "A" And Caracter < = Or (Caracter > = rlallAnd Caracter c = I l f l I ) Then KeyAscll = Asc (Ucase(Caracter-) cadena$ = cadena$ = Mid (DH.Text, 2 , 1) DH.Text = cadenas DH.SelStart = 2 Else KeyAscii = O End I f BanderaRegistro = True I 1 rml - 19 ivate Sub di.Text = d Sub di Chanqe () Then di.Text = "0000" ivate Sub di KeyPress(.KeyAscii As Integer) ValidaHexadecimal KeyAscii, di d Sub ivate SubDL Chanqe 0 x.Text = DH.Text + DL.Text BanderaRegistro Then If Len(DL.Text) < 2 Then While Len (DL.Text) < 2 DL.Text = I r O l 1 + DL.Text Wend . End If > 2 Then DL.Text If Len (DL. Text) BanderaReqistro = False dx.Text = DH.Text + DL.Text BanderaRegistro = True .d If = Right (DL Text, 2 ) .d Sub ,ivate SubDL KeyPress(KeyAscii As Integer) Caracter = Chr(KeyAscii) If (Caracter >= t l O 1 f And Caracter e = l 1 9 l 1 ) Or (Caracter >= "A" And Caracter F") Or (Caracter >= rfaIIAndCaracter < = Then KeyAscii = Asc(UCase(Caracter)) cadena$ = cadena$ = Mid (DL.Text , 2 , 1) DL.Text = cadena$ DL.SelStart = 2 Else KeyAscii = O End If td Sub .ivate Sub ds Chanqe 0 f ds.Text = I f f I Then ds.Text = "0000" td Sub -Ivate Sub ds KeyPress(KeyAscii As Integer) ValidaHexadecimal KeyAscii, ds If cs.Text < > 1 1 0 4 0 0 t 1Then MsqBox (Codigosdeerror (11 j Id I f :.iv h t z %;b Gx Chanqe i )H.Text = Left(dx.Text, 2 ) )L.Text = Right (dx.Text, 2 ) I BanderaReqistro Then BanderaRegistro = False If Len(dx.Text) < 4 Then While Len (dx.Text) < 4 dx.Text = 11011+ dx.Text Wend End If If Len(dx.Text) > 4 Then dx.Text = Right(dx.Text, 4 ) <= rml - 20 DH.Text = Left(dx.Text, 2) DL.Text = Riqht(dx.Text, 2) BanderaRegistro = True 3 If 3 Sub ivate Sub dx KeyPress(KeyAscii As Integer) ValidaHexadecimal KeyAscii, dx d Sub ivate Sub Eproml- MouseMove(Button As Integer, Shift As Integer, X As Single, Y S Sinqle) udarapida.Caption = "Segmento de memoria EPROM, 64KB" d Sub ivate Sub es Chanqe O Then es.Text f es.Text= = "000011 d Sub ivate Sub es KeyPress(KeyAscii As Integer) ValidaHexadecimal KeyAscii, es If cs.Text c > 'lOCOO"Then MsqBox (Codigosdeerror(3)) d If d Sub ivate Sub fin-Click ( ) load Me reccionEditar1 = Descod d Sub ivate Sub Fin- MouseMove(Button As Integer, Shift As Integer, X As Single, Y As inqle) Muestra mensaje en la parte inferior de la pantalla el mensaje" udarapida.Caption = "Regresa ala pantalla de edición y componentes electronic0 .d Sub .ivate Sub Form Load0 !Dim Eprom (1), RAM (1) 'defino mi memoria RAM y ROM 'Dump en cero DireccionDump = O el 'Creamos HazDump Eprom(1).Inicio = &HFE000 'Inicializamod Emprom Eprom (1). Fin = &HFFFFF RAM(1). Inicio = O 'Inicializamod Ram RAM(1).Fin = 65535 'Idicamos que solo hay 1 Eprom y 1 RAM NumEprom = 1 NumRam = 1 Inicializa Reqist.ros 'Estado inicial d e l Fetch LeeDatosOperacion 'Cargar latablade l o s mnemonicos BanderaReqistro = True DE = Descod Id Sub lblic Function MemoriaFisica$(Sesmento$, Offset$) If Seqmento$ ' = Then Seq-mento$ = ' ' 0 0 0 0 1 1 If Offset$ = " ' I Then Offset$ = " 0 0 0 0 " Auxl$ = "&H" + SeqmentoS aux2$ = &HI' + Offset$ '"I 'I rml - 21 MemorjaFisica$ d Funct lon = Hex$ (CLng(Auxl$) * 16 + CLng(aux2S)) blic Sub IncrementaIP(iAs Integer) If ip.Text = Then ip.Text Dim AuxlAs Lonq aux$ = s & H " + ip .Text Auxl = CLnq (aux$) Auxl = Auxl + i ip . Text = BinHex (Auxl) d Sub = 11000011 ivate Sub Form- MouseMove(Button As Integer, Shift As Integer, X As Single, Y A Sinqle) "Simulador del 8088" m udarapida.Caption =sistema d Sub ivate Sub Frame1- MouseMove(Button As Integer, Shift Integer, As X As Single, Y Sinqle) udarapida.Caption = "Segmento de memoria asiganada para otros dispositivos" d Sub S ivate Sub Guardar Click0 Dim Direccion As Lonq Dim TamañoAs Inteqer On Error GoTo Finalizar AbrirMemoria.Flaq-s= &H806& AbrirMemoria.DialoqTitle = "Guardar memoria" AbrirMemoria.ShowSave Open AbrirMemoria.filename For Output As 1 Direccion = O Do Direccion = ObtenDireccionNoCero(I2ireccion) I f Direccion >= 1023 Then ExitDo Print #1, Direccion aux& = Direccion Tamaño = ObtenTamaño (aux&) Print #1, Tamaño For i = 1 To Tamaño Print #1, Memoria(Direccion + i - 1) Next i Direccion = Direccion + Tamaño Loop Until Direccion > = 1023 Close 1 .naiizar: ld Sub :ivate Sub intervalo ChanqeO lima.Interva1 = Val(intervalo.Text) id Sub rivate Sub ip Chanqe O Jhile Len (ip.Text) < 4 .p.Text = I r O " + ip.Text Tend Id Sub rml - 22 ivate Sub ip KeyPress(KeyAscii As Integer) ValidaHexadecimal KeyAscii, ip 3 Sub X As Single, Y ivate Sub labell- MouseMove(Button As Integer, Shift Integer, As S Sinqle) udarapida.Caption = "Reqistro Acumulador de16 bits ó 2 bytes conserva el res tad0 temporal despues de realizar operaciones" d Sub ivate Sub Label10 Click0 qmentoDump.Text = ss.Text evoVa1or.Text = t r O O 1 t d Sub ivate Sub Label10- MouseMove(Button As Integer, Shift As Integer, X As Single, As Sinqle) udarapida.Caption = "Reqistro de Segmento dePila, Direcciona el inicio de la cción de memoria que es la pila" m d Sub ivate Sub Labelll Click0 qmentoDump.Text = es.Text evovalor .Text = l t O O " d Sub ivate Sub Labelll- MouseMove(Button As Integer, Shift As Integer, X As Single, As Sinqle) ,udarapida.Caption= "Registro de Segmento Extra,lo utilizan algunas instrucio S para cadenas" .d Sub .d Sub .ivate Sub Label13 As Integer, X As Single, - MouseMove(Button As Integer, Shift As Sinqle) 7udarapida.Caption = "Reqistro Apuntador de Instruciones, dirreciona siempre aq !lla instrución a ejecutar" Id Sub rivate Sub Label14- MouseMove(ButtonAs Integer, Shift As Integer, X As Single, As Sinqle) en memo rudarapida. Caption = "El bus de dirreciones suministra una dirrecion la :a Id Sub Integer, X A s Single, rivate Sub Label15 - MouseMoveButton As Integer, Shift As As Sinqle) rudarapida.Caption = "El bus de datos transfiere estos entre el microprocesador I la memoria" Id Sub rivate Sub Label16- MouseMove Button As Single) As Integer, ShiftAs Integer, X As S ~ ~ g l e , rml - 23 udarapida.Caption = "Este campo nos permite trasladarnos al desplazamiento ind ado, dentro del segmento asignado" d Sub udarapida.Caption or default" = "Este campo permite cambiar el segmento, que esta asignado d Sub ivate Sub Label18- MouseMove(ButtonAs Integer, ShiftAs Integer, X As Single, Sinsle) udarapida.Caption = "El DUMP es un zoom que se realiza sobre la memoria en gmento asignado" As d Sub ivate Sub Label19- MouseMove(ButtonAs Integer, ShiftAs Integer, X As Single, m As Sinqle) udarapida.Caption = "Registro de datos de byte, un es de uso general" d Sub ivate Sub Label2- MouseMove(ButtonAs Integer, ShiftAs Integer, X As Single, Y S Sinqle) udarapida.Caption = "Reqistro Base de 2 bytes, a menudo conserva el desplazami to de los datos que hay en memoria" d Sub ivate Sub Label20- MouseMove(ButtonAs Integer, ShiftAs Integer, X As Single, As Sinqle) udarapida.Caption = "Registro Contador de un byte, contiene el conteo varia de instruciones" d Sub ivate Sub Label21 As Integer, ShiftAs Integer, X As Single, - MouseMove(Button As Sinqle) udarapida.Caption = "Reqistro Base de unbyte, a menudo conserva el desplazami to de los datos que hay en memoria" d Sub ,ivate Sub Label22 MouseMove(Button As Integer, ShiftAs Integer, X As Single, As Sinqle) udarapida.Caption = "Reqistro Acumulador de8 bits 6 un byte conservael resu ado temporal despues de realizar operaciones" .d Sub -ivate Sub Label24- MouseMove(ButtonAs Integer, Shift As Integer, X As As Single) .. ::e, rml - 24 udarapida.Caption instruciones" = "Registro Contador de un byte,contiene el conteo de varia d Sub ivate Sub Label25-MouseMove(Button As Integer, ShiftAs Integer, X As Single, As Sinqle) byte, a menudo conserva el desplazami udarapida.Caption = "Reqistro Base de un to de los datos que hay en memoria" d Sub As Integer, X As Single, ivate Sub Label26- MouseMove(Button As Integer, Shift Sinqle) udarapida.Caption = IIReqistro Acumulador de 8 bits ó un byte conserva el resu ado temporal. despues de realizar operaciones" As d Sub ivate Sub Label27- MouseMove(Button As Integer, Shift As Integer, X As Single,As Sinqle) udarapida.Caption = "Dirreción finaldel la memoriaRAM" d Sub ivate Sub Label29- MouseMove(ButtonAs Integer, ShiftA s Integer, X As Single, As Sinqle) udarapida.Caption = "Segmento de datos, dirrección inicial y dirreción final" d Sub 'ivate Sub Label3-MouseMove(Button As Integer, ShiftAs Integer, X As Single, Y .S Sinqle) varia de .udarapida.Caption= "Registro Contador de 2 bytes, contiene el conteo instruciones" d Sub .ivate Sub Label30 MouseMove(Button As Integer, ShiftAs Integer, X As Single, As Sinqle) wdarapida.Caption = "Segmento depila, dirreción inicial, y dirreción final" id Sllb .-ivateSub Label33 As Integer, ShiftAs Integer, X As Slnule, - MouseMove(Button As Sinqle) 7udarapida.Caption = "Activa 13 opción Intervalo" id Sub :ivate Sub Label34 -MouseMove(J3utton As Integer, Shift AsInteger, X As Single) A:- . a - I rml - 25 udarapida.Caption = "Es el intervalo parala velocidad de ejecución, Rango 9000 ( Recomendado 1 0 0 0 ) 1 1 d Sub 1 X As Single, ivate Sub Label35 As - MouseMove(Button As Integer, ShiftInteger, Sinqle) udarapida.Caption = "Segmento extra, dirreción inicial y dirreción final" d Sub As ivate Sub Label4- MouseMove(Button As Integer, Shift As Integer, X As Single, Y Sinqle) udarapida.Caption = llRegistrode datos de2 bytes, es de uso general" d Sub S ivate Sub Label5- MouseMove(Button As Integer, Shift Integer, As X As Single, Y Sinqle) udarapida.Caption = llRegistroIndice de fuente; dirreciona datos fuente de ca as o arreglosr1 S d Sub ivate Sub Label6- MouseMove(Button As Integer, Shift As Integer, X As Single, Y Sinqle) f en udarapida.Caption = "Registro Indice de Destino, dirreciona datos destino ma indirecta" S d Sub ivate Sub Label7-MouseMove(Button As Integer, ShiftAs Integer, X As Single, Y Sinqle) udarapida.Caption = "Reqistro Apuntador deBase, apuntador de uso general que rreciona a una matriz de datos en la pila" S d Sub ivate Sub Label8 Click0 qmentoDump.Text = cs.Text = OO evovalor. Text d Sub ivate Sub Label8 MouseMove(Button As Integer, ~ de la' .d Sub memoria que ShiftAs Integer, X As Single, Y tienecódigo" .el *ivate Sub Label9 Click0 :qmentoDump.Text = ds.Text :evcjVa;or.Te;ct = " G O : ' td Sub *ivate Sub Label9 -MouseMove(Button As Integer, ShiftAs Integer, X As S i r , q l e , Y is Sinqle) rudarapida.Caption = "Reqistro de Seqmento de Datos,define la dirección lniciai le la sección de memoria que tiene los datos" td Sub :ivate Sub MAR Change 0 Dim aux As Long rml - 26 Iaux = Memoria(CLnq(I1&H1l+ MAR.Text) Mod 1048576) BusDatos.Text = BinHex(aux) d Sub ivate.Sub NuevoValor KeyPress(KeyAsciiAs Integer) If KeyAscii = 13 Then Desp1azamientoDump.Text = BinHex$((CLng('l&hIl + Desp1azamientoDump.Text) 1) Mod 65536) While Len(Desp1azamientoDump.Text) e 4 DesplazamientoDump.Text.= 1 1 0 1 1+ Desp1azamientoDump.Text Wend KeyAscii = O NuevoValor.Se1Start = 2 Else Caracter = Chr (KeyAscii) If (Caracter >= 1 1 0 1 And 1 Caracter e= I19l1)Or (Caracter >= I1A1l And Caracte e= I r F 1 I ) Or (Caracter >= I1aI1And Caracter e = l 1 f l 1 ) Then KeyAscii = Asc (Ucase (Caracter) ) cadena$ = cadena$ = Mid(NuevoValor.Text, 2, 1) NuevoValor.Text = cadena$ NuevoValor.Se1Start = 2 Else KeyAscii = O End If End If .d Sub .ivate Sub NuevoValor- LinkError(LinkErrAs Integer) id Sub -ivate Sub ProqressBarl- MouseDown(ButtonAs Integer, ShiftA s Integer, X As Sin .e, Y As Single) td Sub :ivate Sub Salir JireccionEditarl :load Me td Sub = Click0 Descod :ivate Sub SeqmentoDump Change0 11 NuevoValor .Text = 'I HazDump aux$ = MemoriaFisica(SegmentoDump.Text, Desp1azamientoDump.Text) While Len (aux$) c 5 aux$ = 1 1 0 1 1+ aux$ Wend aux$ = &HI1 + aux$ Mod 1024)) NuevoValor .Text = Hex (Melnoria(CLng (aux$) While Len(NuevoVa1or.Text) c 2 NuevoValor .Text = O + NuevoValor .Text Wend Dump.Refresh Id Sub 'I I' rivate Sub SeqmentoDump KeyPress(KeyAscii As Integer) ValidaHexadecimal KeyAscii, SegmentoDump Id Sub rivate Sub si E si.Text = 1111 Chanqe( ) Then si.Text = '1000011 Id Sub rivate Sub si KeyPress(KeyAscii As Integer) ValidaHexadecimal KeyAscii, si lrml - 27 .d Sub ,%vate Sub Siquiente Click0 If Val(fl&h"+ ip.Text) > Val("&h" + Riqht(Descod, 4)) Then respuesta = MsqBox("Ejecuci6n Terminada, para volver a ejecutar el código Te e RESET , vbOKOnly, "Ejecución de Programas") If respuesta = 1 Then ComandoAnima-Click End If Else Select Case EstadoFetch Case O BusDatos-Text = " 0 0 0 0 " BusDirecciones .Text = llOOOOO1f LeeCodiqo Estado.Caption = "Leer el codigo deinstrucciónll Case 1 DecodificaCodiqo Estado.Caption = Operacion(Codigo0peracion).mnemonic0 Case 2 EjecutaCodiqo2 Estado.Caption = "Instrucción ejecutada" HazDumr, End Select EstadoFetch = (EstadoFetch + 1) Mod 3 :d If td Sub I lblic Function EsribirBusDireccionesO Resultado = False If NumRam >= 1 Then aux$ = II&HIt + BusDirecciones .Text For i = 1 To NumRam e= RAM(i) .Fin) Then If (CLnq(aux$) >= RAM(i) .Inicio) And (CLng(aux$) Resultado = Resultado Or True End If Next i End If : Not Resultado Then AnimaAnterior = Anima.Enabled Anima.Enab1ed = False MSQBOX dirección específica es inválida, se leyo basura") Anima.Enabled = AnimaAnterior 1d I f 2erBusDirecciones = Resultado Id Function lblic Function LeerBusDirecciones (j Resultado = False If NumEprom >= 1 Then aux$ = ll&H1l + BusDirecciones.Text For i = 1 To NumEprom c = Eprom(i) .Fin)T If (CLng(aux$) >= Eprom(i) .Inicio) And (CLng(aux$) m Resultado = Resultado Or True End If Next i End If If NumRam >= 1 Then aux$ = Ir&H" + BusDirecciones.Text sensamblador 1 - olic Sub PonCódigo(NumLinea As Integer, segini As Long) Linea = O Dim aux As Long indice = O Tamaño = 1 Operandol = False Desensamblador.ScaleMode = 4 Desensamblador.CurrentX = O Desensamblador.CurrentY = O While indice c 1024 And Lineac NumLinea Texto = Operacion(Memoria(indice + segini)) .mnemonic0 k = l While Mid(Texto, k, 1) c > 'I And k c Len(Texto) k = k + l Wend Texto = Mid(Texto, 1, k) + 'I 'I If Operacion(Memoria(indice + seqini)).ByteReql Then Texto = Texto + Reqistros(Memoria(indice + segini + Tamaño)) Tamaño = Tamaño + 1 Operandol = True End If If Operacion(Memoria(indice + seqini)).OffHi Then If Operandol Then Texto = Texto + I' , Texto = Texto + [ I 1 aux = Memoria(indice + seqini + Tamaño) Texto = Texto + BinHex(aux) aux = Memoria(indice + seqini + Tamaño + 1) Texto = Texto + BinHex(aux1 Texto = Texto + ! I ] 'I Tamaño = Tamaño + 2 End If If Operacion(Memoria(indice + seqini)).Dato8 Then = Texto + If Operandol Then Texto aux = Memoria(indice + seqini + Tamaño) Texto = Texto + BinHex(aux) Tamaño = Tamaño + 1 End If If Operacion(Memoria(indice + seqini)).DatoHi Then If Operandol Then Texto= Texto + 1 1 , 1 1 aux = Memoria(indice + seqini + Tamaño) Texto = Texto + BinHex(aux1 aux = Memoria(indice + seqini + Tamafio + 1) Texto = Texto + BinHex(aux) Tamaño = Tamaño + 2 End If If Operacion(Memoria(indice + seqini)).ByteReq2 Then Texto = Texto + Reqistros (Memoria (indice + segini + Tamaño)) Tamaño = Tamaño + 1 End If Operandol = False If indice < BarraVertical.Value And Linea = O Then CambioAtras = Tamaño If indice > = BarraVertical.Value Then If Linea = O Then CambioAdelante = Tamaño End If Linea = Linea + 1 Print Texto End If indice = indice + Tamaño Tamaño = 1 Wend Id Sub :ivate Sub Barravertical-Change0 i banderacambios Then tnderacambios = False sensamblador - 2 UltimoValor = BarraVertical.Value - 1 Then BarraVertical.Value = UltimoValor + CambioAdelante timovalor = BarraVertical.Va1ue seIf UltimoValor = BarraVertica1.Value + 1 Then BarraVertica1.Value = UltimoValor - CambioAtras timovalor = BarraVertical.Va1ue se UltimoValor = BarraVertical.Va1ue .d I f :sensamblador.ScaleMode= 4 !sensamblador.ScaleWidth= Desensamblador.ScaleWidth :sensamblador.ScaleHeiqht= Desensamblador.Sca1eHeiqht :sensamblador.BarraVertical.Left= Desensamblador.Sca1eWidth - 2 :sensamblador.BarraVertical.Top = O !sensamblador.BarraVertical.Height= Desensamblador.ScaleHeight !sensamblador.Cls mCódiqo Desensamblador.ScaleHeight, SegDesensamblar mderaCambios- = True id I f Id Sub -ivate Sub Borrar-Click0 .de Id Sub -ivate Sub CambiarDireccion Click0 LX = InputBox ("Dirección de inicio )lar)) ;eqDesensamblar = CLnq (ll&h" + aux) IqDesensamblar = Val (ll&h"+ aux) :sensamblador.Refresh td Sub para desensamblar", llCambio",Str (SegDesensa -ivate Sub Form-Load O LmbioAtras = 1 LnderaCambios = True Id Sub :ivate Sub Form PaintO !sensamblador.ScaleMode = 4 :sensamblador.ScaleWidth = Desensamblador.ScaleWidth 3sensamblador.ScaleHeiqht = Desensamblador.Sca1eHeiqht .sensamblador.BarraVertical.Left = Desensamblador.Sca1eWidth - 2 :sensamblador.BarraVertical.Top= O ?sensamblador.BarraVertical.Height= Desensamblador.ScaleHeight :sensamblador.Cls mCódigo Desensamblador.ScaleHeight, SegDesensarnblar Id Sub storial - 1 llamarhistorial(archivoAs String) Path + l l \ l l + archivo en b$ For Input A s #1 b = App. Loop tEXT2.Text = Texto$ .ose #1 id Sub *ivate Sub Checkl Click 0 If Checkl.Value = 1 Then tEXT2.BackColor = &HO& tEXT2.ForeColor = &HFFOO& = "Color Azul" Checkl. Caption Else If Check1.Value = O Then tEXT2.BackColor = &HFF0000 tEXT2.ForeColor = &HFFFFOO = ltColorAmbar" Checkl. Caption End If End If Id Sub rivate Sub Command3-Click0 -de lload historial 1rm2. Show Id Sub rivate Sub Form Load0 3XT2 .Visible = True ill llamarhistorial (113000.TXTll) Id Sub lb SSTabl Click(PreviousTab 3XT2 .Visible = False ZXT2 .Visible = True ldex = sstabl.Tab As Integer) :lect Case Index Case O Call llamarhistorial ( " 3 0 0 0 .TXT") Case 1 Call llamarhistorial ("4004.txt") Case 2 Call llamarhistorial ("4040. txt") Case 3 Call llamarhistorial ("80G8.txt") Case 4 ("8048. txt") Call llamarhistorial Case 5 Call llamarhistorial ("8080. txt") Case 6 Call llamarhistorial ("8085. txt") Case 7 Call llamarhistorial ("8086. txt") Case 8 Call llamarhistorial ("80088.txt") Case 9 Call llamarhistorial ("80286.txt!') Case 10 storial - 2 Call llamarhistorial ( " 8 0 3 8 6 . txt") Case 11 Call llamarhistorial (Ilhisto.t x t " ) d Select d Sub rtada - 1 ivate Sub Toolbar2-ButtonClick(ByVa1 ButtonAs Button) d Sub ivate Sub Commandl-Click0 d Sub ivate Sub Command2-Click0 d .d Sub .ivate Sub Form Load0 Panell.Heiqht = 5535 Panell.Top = 720 Panell.Left = 720 Panell.Width = 8295 Panel3.Visible = False merl.Interva1 = 2000 .d Sub ,ivate Sub SSComm2andl Click0 .be16. Caption = "Alejandro Castillo Valdesll bel7.Caption = "Alejandro Briones Leal" be18 .Caption = "Alejandro Montejo Hernanadez" .d Sub ,ivate Sub SSCommandl Click0 .be16.Caption = "Alejandro Castillo .bel7.Caption = .be18.Caption = IIAlejandro Briones" = Ill1 :Panel4. Caption Id Sub Valdes" .ivate Sub SSCommand2-Click0 .bel6.Caption= .bel7.Caption = "Ing. Omar Maldonado Hernandez." !be18.Caption = 1 1 1 1 ;Panel4.Caption = Id Sub *ivate Sub SSCommand3 Click (1 tbel7.Caption = IIEjecutando" )rm2.Show .de tload Portada Id Sub Tivate Sub SSCommand4-Click0 -de Id Id Sub 0 rivate Sub Timer1 Timer im contador As Inteqer lile contador e 4000 mtador = contador + 1 ?nd 3Panell.Visible = False sPanel3.Visible = True Id Sub m rm2 - 1 ivate Sub ASB 8805 Click0 y la Este evento ejecutalos procedimientos necesarios para mostrar el grafico nformación 4 textual de cada componente fisico del sistema 8088, a llamada al segundo procedimiento se efectua pasando los argumentos al proced iento on l o s nombres de los archivos necesarios para cada componente 11 Coordenadas 11 Componentes-informacion("pic7.bmp", "hm6264.txt") d Sub ivate Sub ASB-8805-MouseMove(Button As Integer, Shift As Integer, X A s Single, As Sinqle) Muestra mensaje en la parte inferior de la pantallamensajev1 el * bel3.Caption = "Oprima sobre el componenteun click, para información" d Sub ivate Sub CambiaDireccionEdicionComando Click() ) eqmento$ = InputBox ( "Dame el segmento" hile Len(Seqmento$) e . 4 Segmento$ = l l O v l + Segmento$ end qmento$ = 11000011 splazamiento$ = InputBox("Dame el desplazamiento") CLng (Il&h" + Desplazamiento$) e Val (1023) Then .ile Len (Desplazamiento$) e 4 Desplazamiento$ = 11011+ Desplazamiento$ nd reccionEditar = CLnq(Il&H" + SeqmentoS) * 16 + CLnq("&HI1 + Desplazamiento$) reccionEditarl = Ucase (Segmento$+ : + Desplazamiento$) se spuesta = MsqBox("E1 desplazamiento esta fuera de rango que ,ya el segmento ódiqo es de tamaño lk (1024) equivalentea 1 0 3 F F l l f ) .d If .d Sub ,ivate Sub Commandl Click O :t Descod = DireccionEditarl jrml . Show 1 Id Sub -ivate Sub Commandl MouseMove(Button As Integer, ShiftAs Integer, X As As Sinqle) Muestra rr.enoaje en lz ?arte inferior de la pantalla el x,cnaaje" tbe13 .Caption = "Tecle de ejecución, llama al CPU interno" Id Sub ' :ivate Sub Command2 Click0 1formacion.Visible = False id Sub Yivate Sub Command3 Click0 ventana de información de componentes fisicos Esta Sub Cierra la SSPanell.Visible = False de rm2 - 2 d Sub ivate Sub DISPLAY MouseMove(Button As Integer, ShiftAs Integer, X As Single, ivate Sub Ejecutar Click() scod = DireccionEditarl.Text lrml .Show 1 .d Sub .ivate Sub Form Load( 1 Nombre$ = App. Path + "\mnemonicos.1st" i = O ReDim mnemonicos (10) ODen Nombre$ For Input As 1 Apertura del archivo microinstruciones.lst . . i = i + l O Wend MaximoCodigo = i Close 1 CodiqoOperacion = O Se inicailiza la dirreccion inicial para editar un p DireccionEditar = &HO )qrama For i = O To 15 Tecla (i) .Enabled = False Next i For i = 3 To 4 = False Funcion(i) .Enabled Next i DISPLAY.Text = mnemonicos(Codigo0peracion) Direccionamiento = 1 ~ ~ 1 Se inicializan el arreglos de registros del miCroPorc Registros(()) = I~ALII :ador Reqistros (1) = "AH1' Reqistros (2) = 'IBL" Reqistros (3 = I'BH" Reqistros (4) = ''CL" Reqistros (5) = ''CHI' Reqistros ( 6 ) = IIDL" Reqistros (7) = ''DH" Reqistros (8) = I I A X " Reqistros ( 9 ) = ''BX" Reqistros (10) = "CX" Reqistros (11) = "DX" Reqistros (12) = " S I " Reqistros (13) = "DI" Reqistros (14)= "BPI' Reqistros ( 1 5 ) = ''SS" Reqistros (16) = ''ES" P.eqistrcs! 1 7 ! = 'IDS" Codiqosdeerror(0) = "El Seqmento Codiqosdeerror(1) = "El Seqmento Codiqosdeerror(2) = "El Seqmento Codiqosdeerror(3) = "El Seqmento Codiqosdeerror(4) = "La división vor de modificar los reqistros AX y Codiqosdeerror( 5 ) = "libre" Codiqosdeerror(6) = "libre" Codiqosdeerror(7) = "libre" Codigosdeerror (8) = "libre" de códiqo, esta definido enO 0 0 0 H" de datos, esta definido en 0400 HI1 de pila, esta definodo en 0800 HI1 estra esta, definido en O C O O HI1 excede el tamaño de un registro de '? bits,f el XL rm2 - 3 Codigosdeerror (9) = "libre" ListaDireccionamiento(1) = "Inmediato" ListaDireccionamiento(2) = I1Reqistrot1 LeeDatosOperacion llamada a datos de operación Edicion = O SeqDesensamblar = O d Sub ' ivate Sub -DragDrop(Source Frame1 As Control, X As Single, Y As Single) d Sub ivate Sub Funcion Click(1ndex As Integer) Select Case Index Case O 'TECLA DEBUSQUEDA DE CODIGO DE OPERACION 1 CodiqoOperacion = CodiqoOperacion + 1 If CodigoOperacion > = MaximoCodigo Then CodigoOperacion= MaximoCodi - 1 DISPLAY-Text = Operacion(Codigo0peracion).mnemonic0 Case 1 'TECLA DEBUSQUEDA DE CODIGO DE OPERACION 2 If CodiqoOperacion > O Then CodigoOperacion = CodigoOperacion - 1 End If DISPLAY.Text = Operacion(Codigo0peracion).mnemonic0 Case 2 ENTER Select Case Edicion Case O If Operacion(CodigoOperacion).ByteRegl Then Edicion = 1 Funcion(0).Enabled = False = False Funcion(1) .Enabled Funcion(3) .Enabled = True = True Funcion(4) .Enabled If Operacion(Codiqo0peracion).Dato8 Then If RegistroActual > 7 Then RegistroActual= 7 End If If Operacion(Codiqo0peracion).DatoHi Then If RegistroActual < 8 Then RegistroActual= 8 End If DISPLAY.Text = Reqistros(ReqistroActua1) ElseIf Operacion(CodigoOperacion).OffHi Then Edicion = 2 DISPLAY .Text = "00" Funcion(0) .Enabled = False Funcicn (1).Enabled = False Fcr Temp = O To 15 Tecla (Temp).Enabled = True Next Temp End If Memoria(Direcci0nEditar) = CodiqoOperacion DireccionEditar = DireccionEditar + 1 aux$ = Left (DireccionEditarl .Text, 5 ) Auxl$ = "&H1I + Riqht (DireccionEditarl .Text, 4) Auxl$ = TiDos.BinHex(CLng(Auxl$) + 1) While Len(Auxl$) < 4 Auxl$ = " 0 " + Auxl$ Wend DireccionEditarl.Text = aux$ + Auxl$ Case 1 If Operacion (CodigoOperacion) . ByteReg2 Then Edicion = 4 If Operacion(Codiqo0peracion) .DatoHi Then If RegistroActual < 8 Then RegistroActual End If * lrm2 - 4 DISPLAY.Text = Reqistros(RegistroActua1) Funcion (O) .Enabled = False = False Funcion(1) .Enabled Funcion (3).Enabled = True = True Funcion (4) .Enabled ElseIf Operacion(Codigo0peracion) .Dato8 Then Edicion = 5 DISPLAY.Text = " 0 0 " Funcion (3) .Enabled = False = False Funcion(4) .Enabled For Temp = O To 15 Tecla (Temp) .Enabled = True Next Temp ElseIf Operacion(Codigo0peracion) .DatoHi Then Edicion = 6 DISPLAY.Text = ' ' 0 0 " Funcion(3) .Enabled = False Funcion (4).Enabled = False For Temp = O To 15 = True Tecla (Temp) .Enabled Next Temp ElseIf Operacion(CodigoOperacion).OffHi Then Edicion = 8 DISPLAY.Text = 1 1 0 0 " Funcion (3) .Enabled = False = False Funcion(4) .Enabled For Temp = O To 15 = True Tecla(Temp) .Enabled Next Temp Else Edicion = O DISPLAY.Text = Operacion(Codigo0peracion).mnemonic0 For Temp = O To 15 Tecla(Temp) .Enabled= False Next Temp Funcion (O) .Enabled = True Funcion (1).Enabled = True Funcion (3).Enabled = False Funcion (4) .Enabled = False End If Memoria(Direcci0nEditar) = ReqistroActual DireccionEditar = DireccionEditar + 1 aux$ = Left(DireccionEditarl.Text, 5 ) Auxl$ = &HI' + Riqht(DireccionEditarl.Text, 4) Auxl$ = Tipos.BinHex(CLng(Auxl$) + 1 ) While Len(Auxl$) c 4 Auxl$ = " 0 " + AuXl$ Wend DireccionEditarl.Text = aux$ + Auxl$ Case 2 Edicion = 3 Memoria (ZlireccionEditar)= CLnq("&h" + DISPLAY.Text) Direcciontiditar = DireczionEditar + 1 auxS = Left (DireccionEditarl .Text, 5) AuxiS = ll&H1l + Riqht (DireccionEditarl.Text, 4) AuxiS = Tipos.BinHex(CLng(Auxl$)+ 1) Wrlile LeniAuxlS) < 4 A u x ~ $= " O " + Auxl$ Wend DireccionEditar1.Text = aux$ + Auxl$ DISPLAY.Text = I r O O " Case 3 If ODeracion íCodigoOperacion) .ByteReg2 Then Edicion = 4 If OperacioniCodiqoOperacion) .DatoHi Then I f RegistroActual < 8 Then RegistroActual End If For Temp = O To 15 Tecla(Temp).Enabled = False I' rm2 - 5 Next Temp Funcion (3).Enabled = True Funcion (4).Enabled = True Memoria (DireccionEditar) = CLnq(I1&h1l+ DISPLAY.Text) DISPLAY.Text = Registros(RegistroActua1) Else Edicion = O Memoria (DireccionEditar) = CLnq (ll&hl' + DISPLAY .Text) DISPLAY.Text = Operacion(Codigo0peracion) .mnemonic0 For Temp = O To 15 Tecla(Temp) .Enabled = False Next Temp Funcion (O) .Enabled = True Funcion (1).Enabled = True Funcion (3).Enabled = False Funcion (4).Enabled = False End I f DireccionEditar = DireccionEditar + 1 aux$ = Left(DireccionEditarl.Text, 5) Auxl$ = I1&H1I+ Riqht (DireccionEditarl.Text, 4) Auxl$ = Tipos.BinHex(CLng(Auxl$) + 1) While Len(Auxl$) c 4 Auxl$ = " 0 " + Auxl$ Wend DireccionEditarl.Text = aux$ + Auxl$ Case 4 Edicion = O DISPLAY.Text = Operacion(Codigo0peracion) .mnemonic0 For Temp = O To 15 = False Tecla (Temp) .Enabled Next Temp Funcion (O) .Enabled = True Funcion (1). Enabled = True Funcion (3).Enabled = False Funcion (4).Enabled = False Memoria(Direcdi0nEditar) = ReqistroActual DireccionEditar = DireccionEditar + 1 aux$ = Left(DireccionEditarl.Text, 5) Auxl$ = "&HI1 + Riqht (DireccionEditarl.Text, 4) Auxl$ = Tipos .BinHex (CLng (Auxl$) + 1) While Len(Auxl$) c 4 AUXl$ = " 0 'I + Auxl$ Wend DireccionEditarl.Text = aux$ + Auxl$ Case 5, 7, 9 Edicion = O For Temp = O To 15 Tecla(Temp) .Enabled = False Next Temp Funcion (O) .Enabled = True Funcion (1). Enabled = True FLlncion (3).Enabled = False Funclon (4). Enabled = False Memoria (DireccionEditar) = CLnq ("&h" + DISPLAY .Text) DireccionEditar = DireccionEditar + 1 aux$ = Left (DireccionEditarl.Text,5 ) Auxl$ = l1&HT1+ Riqht (DlrecclonEditarl .'Text, 4) Auxl$ = Tipos.BinHex(CLng(Auxl$) + 1) While Len(Auxl$) < 4 Auxl$ = " 0 " + Auxl$ Wend DireccionEditarl.Text = aux$ + Auxl$ DISPLAY.Text = Operacion(Codigo0peracion) .mnemonic,-. Case S Edicion = 7 Memoria (DireccionEditar) = CLng(l1&hI1+ DISPLAY .Tex: DISPLAY.Text = I 1 O O 1 ' DireccionEditar = DireccionEditar + 1 aux$ = Left(DireccionEditarl.Text, 5 ) rm2 - 6 AuxlS = lf&H1l + Riqht (DireccionEditarl .Text, 4) ALxl$ = Tipos .BinHex (CLng (Auxl$) + 1) While Len(Auxl$) < 4 Auxl$ = " 0 " + Auxl$ Wend DireccionEditarl.Text = aux$ + Auxl$ Case 8 Edicion = 9 Memoria (DireccionEditar) = CLng(ll&hll + DISPLAY.Text) DISPLAY.Text = 1 1 0 0 " DireccionEditar = DireccionEditar + 1 aux$ = Left(DireccionEditarl.Text, 5) Auxl$ = rl&HT1 + Riqht (DireccionEditarl.Text,4) Auxl$ = Tipos.BinHex(CLng(Auxl$) + 1) While Len(Auxl$) c 4 AUxl$ = " 0 " + Auxl$ Wend DireccionEditarl.Text = aux$ + Auxl$ End Select Case 3 ReqistroActual = ReqistroActual + 1 If ReqistroActual > 18 Then ReqistroActual= 18 If Operacion(Codiqo0peracion) .Dato8 Then If RegistroActual > 7 Then RegistroActual = 7 End If If Operacion(Codiqo0peracion) .DatoHi Then If RegistroActual e 8 Then RegistroActual = 8 End If DISPLAY.Text = Registros(RegistroActua1) Case 4 If ReqistroActual > O Then ReqistroActual = RegistroActual - 1 If Operacion(CodiqoOperacion).Dato8 Then If RegistroActual > 7 Then RegistroActual = 7 End If If Operacion(Codiqo0peracion) .DatoHi Then If RegistroActual < 8 Then RegistroActual = 8 End If ~ 1 s p ~ ~ y . T e= xRegistros(RegistroActua1) t End Select .d Sub .ivate Sub Funcion MouseMove(1ndex As Integer, Button Integer, As Shift As Inte Ir, X As Sinqle, Y As Sinqle) Muestra mensaje en l a parte inferior dela pantalla el mensaje" .be13. Caption = "Teclas de edición" .d Sub -ivate Sub .storial.Show id Sub -Click0 Histoarial -nf ormación textual de cada componente fisico del sistema 8088, Ja llamada al segundo procedimiento se efectua pasando los argumentos al proced niento :on los nGmbres de los archivos necesarios para cada componente 111 Coordenadas 111 Componentes-informacion("pic9.bmp", "8088.txt") Id Sub rivate Sub Intel D80314H As Integer, Y As Si - MouseMove(Button As Integer, Shift gle, Y As Single) lrm2 - 7 Muestra mensaje en la parte inferior ladepantalla el mensaje" click, para información" bel3.Caption = "Oprima sobrE el componente un d Sub ,ivate Sub MenuAbrir-Click (1 AbrirArchivo Dim Direccion As Lonq Dim TamañoAs Integer Dim Dato As Byte Dim contador As Integer Dim i For i = O To 65535 Step 1 Memoria (i) = CLng ( ll&h"+ I1 O0 'I ) Next i Forml.DE.Text = ~ ~ 0 0 0 0 : 0 0 0 0 1 1 CodiqoOperacion = O DireccionEditar = &HO ProqressBarl.Min = 1 ProqressBarl.Max = 25 ProgressBarl.Value = ProgressBarl.Min On Error GoTo Finalizar Label8 .Caption = "Archivo: + Abrirmem.fi1ename Abrirmem.DialoqTit1e = "Abrir archivo" Abrirmem.ShowOpen Open Abrirmem.filename For Input As 1 On Error GoTo Finalizarcerrar While Not EOF ( 1) Input #1, Direccion, Tamaño For i = 1 To Tamaño Input #1, Dato Memoria(Direccion + i - 1) = Dato ProqressBarl.Value = i Next i Wend ProgressBarl.Value = ProgressBarl.Min nalizarcerrar: Close 1 Forml.HazDump nalizar : td Sub Private Sub MenuDesensarnblar -Click0 !sensamblador.Show 1 :ivate Sub MenuGuardar-Click( 1 GuardarArchivo Dim Direccion As Lonq Dim Tamaño As Inteqer On Error GoTo Finalizar Abrirmem.Flaqs = &H806& Abrirmem.DialoqTitle = "Guardar memoria" Abrirrnem.ShowSave Open Abrirmem.filename For Output As 1 Label8 .Caption= "Archivo : + Abrirmem. filename Direccion = O rm2 - 8 Do Direccion = Forml.ObtenDireccionNoCero(Direccion) If Direccion >= 1023 Then Exit Do Print #1, Direccion aux& = Direccion Tamaño = Forml.ObtenTamaño(aux&) Print #1, Tamaño For i = 1 To Tamaño Print #1, Memoria(Direccion + i - 1) Next i Direccion = Direccion + Tamaño Loop Until Direccion>= 1023 Close 1 nalizar: .d Sub ,ivate Sub Nec 8627P7 Click0 y la Este evento ejecutalos procedimientos necesarios para mostrar el grafico nformación S 8088, textual de cada comDonente fisico del sistema la llamada al segundo procedimiento se efectua pasando los argumentos al proced liento 'on los nombres de los archivos necesarios para cada componente .11 Coordenadas .11 Componentes-informa~ion(~~pic14.bmp", "8255.t~t~~) Id Sub As Integer, ShiftAs Integer, X As Sing1 .ivate Sub Nec~8627P7~MouseMove(Button Y As Sinqle) Muestra mensaje en la parte inferior de la pantalla el mensaje" ~bel3.Caption= "Oprima sobre el componente un click, para información" Id Sub -ivate Sub Nec D8279C2 Click0 y la Este evento ejecutalos procedimientos necesarios para mostrar el grafico .nformación textual de cada componente fisico del sistema 8088, la llamada al segundo procedimiento se efectua pasando los argumentos al proced liento :on los nombres de l o s archivos necesarios para cada componente 111 Coordenadas Componentes-informacion(~~pi~13.bmp~~, 'f8279.txtn) i i l Id Sub rivate Sub Nec D8279C2- MouseYove(Button As Integer, ShiftAs Integer, X As Sing 2 , Y As Sinqle) Muestra mensaje en la parte inferior de la pantalla mensajeit el 1bel3.Caption = "Oprima sobre el componente un click, para información" Id Sub rivate Sub PHIL 9131XN Click O Este evento ejecuta ICs procedimientos necesarios para mostrar grzf<zD el y la información textual de cada componente fisico del sistema 8088, ;a llamada al segundo procedimiento se efectua pasando l o s argumentos ai sroced niento :on los nombres de los archivos necesarios para cada componente 311 Coordenadas 3111 Componentes-informacicn ( " p i c 6 .bmp'l, "0809.txt") nd Sub 4x12 - 9 ,ivate Sub PHIL 9131XN As Integer, ShiftAs Integer, X As Sing - MouseMove(Button , Y As Sinq1e)Muestra mensaje en la parte inferior de la pantalla el mensaje" bel3.Caption = "Oprima sobre el componente un click, para información" d Sub .ivate Sub Picturel Click 0 Este evento ejecutalos procedimientos necesarios para mostrar el grafico y la nformación 8088, textual de cada componente fisico del sistema ,a llamada al segundo procedimiento se efectua pasando los argumentos al proced liento :on los nombres de los archivos necesarios para cada componente 111 Coordenadas 111 Componentes-information( 11pic17 .bmp", "74245.txt") td Sub -ivate Sub Picturel- MouseMove(ButtonAs Integer, ShiftAs Integer, X As Single, As Sinqle) Muestra mensaje en la parte inferior de la pantalla el mensaje" tbel3.Caption = "Oprima sobre el componente un click, para información" td Sub -ivate Sub Picture10 Click0 Este evento ejecutalos procedimientos necesarios para mostrar el grafico y la .nformación 8088, textual de cada componente fisico del sistema l o s argumentos al proced llamada al segundo procedimiento se efectua pasando liento :on los nombres de l o s archivos necesarios para cada componente i l l i l l Coordenadas Componentes-informacion("picl9.bmp", "7404.txt") Id Sub Yivate Sub Picturelo-MouseMove(Button As Integer, ShiftAs Integer, X As Single Y As Sinqle) Muestra mensaje en la parte inferior de la pantalla el mensaje" click, para información" ibe13.Caption = IIOprima sobre el componente un id Sub rivate Sub Picture11 Click0 Este evento ejecutalos procedimientos necesarios para mostrar el grafico y la Lnformación 8088, textual de cada componente fisico del sistema La llamada al segundo procedimiento se efectua pasando los argumentos ai proced niento :on los nombres de l o s archivos necesarios para cada componente 211 Coordenadas 311 Componentes-informacion("picl9.bmp","7404.txt") nd Sub As Integer, ShiftAs Integer, X As Single rivate Sub Picturell - MouseMove(Button Y As Sinqle) Muestra mensaje en la parte inferior la depantalla el mensaje" 2bel3.Caption = "Oprima sobre el componente un click, para informaci6r" nd Sub rivate Sub Picture12 Click (1 Este evento ejecuta los procedimientos necesarios para mostrarel gr.>. información textual de cada Componente fisico del sistema 8088, La llamada al segundo procedimiento se efectua pasando los argumentos .,I . ia .Ted rm2 - 10 iento on l o s nombres de los archivos necesarios para cada componente 11 Coordenadas 11 Componentes-informacion ("pici5.bmp1!,"7414.txt") d Sub ,ivate Sub Picturel2~MouseMove(ButtonAs Integer, ShiftAs Integer, X As Single Y As Sinqle) Muestra mensaje en la parte inferior de la pantalla el mensaje" .bel3.Caption= "Oprima sobre el componente un click, para información" .d Sub .ivate Sub Picture13 Click( 1 Este evento ejecuta los procedimientos necesarios para mostrar el grafico y la nformación textual de cada comDonente fisico del sistema 8088, la llamadaal segundo procedimiento se efectua pasando l o s argumentos al proced liento !on los nombres de los archivos necesarios para cada componente .11 Coordenadas .11 Componentes-informacion("pic2.bmp", "8push.txt") .ivate Sub Picture13- MouseMove(ButtonAs Integer, ShiftAs Integer, X As Single Y As Sinqle) Muestra mensaje en la parte inferior de la pantalla el mensaje" tbel3.Caption = "Oprima sobre el componenteun click, para información" td Sub -ivate Sub Picture14 Click( ) Este evento ejecutal o s procedimientos necesarios para mostrar el grafico y la mformación textual de cada componente fisico del sistema 8088, los argumentos al proced la llamada al segundo procedimiento se efectua pasando liento :on los nombres de los archivos necesarios para cada componente 111 Coordenadas 111 Componentes-informa~ion(~~pic2l.bmp~~, "resis.txtIl) id Sub 7ivate Sub Picture14- MouseMove(ButtonAs Integer, ShiftAs Integer, X As Single Y As Sinqle) Muestra mensaje en la parte inferior ladepantalla el mensaje" ibe13.Caption = "Oprima sobre el componente un click, para información" Id Sub rivate Sub Picturei5 Click( ) Este evento ejecutalos procedimientos necesarios para mostrar el grafico y la información textual de cada componente fisico del sistema 8088, La llamada ai segundo procedimiento ei-ectua se pasando l o s argumentos al procea niento 'on los nombres de los archivos necesarios para cada componente 311 Coordenadas 111 Componentes-informacion ( t1pic16. bmp", "resis.txt") Id Sub rivate Sub Picture15- MouseMove(Button As Integer, Shift As Integer, X ., Y As Sinqle) Muestra mensaje enla parte inferior de la pantalla el mensaje" 3bel3.Caption = "Oprima sobre el componente un click, para informaci," ~. .qle lrm2 - 11 d Sub ,ivate Sub Picture16 Click( ) Este evento ejecutalos procedimientos necesarios para mostrar el grafico y la nformación 8088, textual de cada componente fisico del sistema la llamada al segundo procedimiento se efectua pasando los argumentos al proced liento Ion los nombres de los archivos necesarios para cada componente .11 Coordenadas .11 Componentes-informacion("picl2.bmp", "capa.txt") Sub .ivate Sub Picture16- MouseMove(ButtonAs Integer, ShiftAs Integer, X As Single Y As Sinqle) Muestra mensaje en la parte inferior de la pantalla el mensaje'! .bel3.Caption= "Oprima sobre el componenteun click, para información" .d Sub ,ivate Sub Picture17 Click0 Este evento ejecutal o s procedimientos necesarios para mostrar el grafico y la nformación 8088, textual de cada comoonente fisico del sistema la llamadaal segundo procedimiento se efectua pasando los argumentos al proced liento !on los nombres de los archivos necesarios para cada componente .11 Coordenadas .11 Componentes-informacion("pic23.bmp", "RELOJ.txt") .ivate Sub Picture2 Click(1ndex As Inteqer) el grafico y la Este evento ejecutalos procedimientos necesarios para mostrar .nformación 8088, textual de cada comoonente fisico del sistema la llamada al segundo procedimiento se efectua pasando los argumentos al proced Liento :on los nombres de los archivos necesarios para cada componente .11 Coordenadas .11 Componentes-informacion ("pic3.bmp", "2764.txt") Id Sub .ivate Sub Picture2 MouseMove(1ndexAs Integer, ButtonAs Integer, Shift As Int ier, X As Sinqle, Y As Sinqle) Muestra mensaje en la parte inferior dela pantalla el mensaje" 1be13.Caption= "Oprima sobre el componente un click, para información" Id Sub :ivate Sub Picture3 Click0 Este evento ejecutal o s procedimientos necesarios para mostrar el grafico y la .nformación 8088, textual de cada componente fisico del sistema Ja llamada al segundo procedimiento se efectua pasando los argumentos al proced Tiento :on los nombres de los archivos necesarios para cada componente i l l Coordenadas 111 Componentes- informacion ("pic8.bmp", "74373.txt") id Sub rivate Sub Picture3 As Integer, ShiftA s Integer, X As Single, - MouseMove(Button ! As Sinqle) Muestra mensaje enla parte inferior de la pantalla el mensaje" tbe13.Caption = "Oprima sobre el componente un click, para información" rm2 - 12 d Sub ivate Sub Picture4 Click O Este evento ejecuta10s procedimientos necesarios para mostrar el grafico Y la nformación 8088, textual de cada componente fisico del sistema a llamada al segundo procedimiento se efectua pasando los argumentos al proced iento on l o s nombres de los archivos necesarios para cada componente 11 Coordenadas 11 Componentes- informacion("picl.bmp", "7432.txt") d Sub As Sinqle) Muestra mensaje en la parte inferior de la pantalla el mensaje" bel3.Caption = "Oprima sobre el componente un click, para información" d Sub As Inteqer) ivate SubClick(1ndex Picture5 Este evento ejecutal o s procedimientos necesarios liento on los nombres * para mostrar el grafico y la de los archivos necesarios para cada componente rer, X As Sinqle, Y As Sinqle) Muestra mensaje en la parte inferior de la pantalla el mensaje" .bel3.Caption= "Oprima sobre el componente un click, para informaciónlf td Sub liento :on los nombres de los archivos necesarios para cada componente 111 Coordenadas 111 Componentes-informacion ("pic10.bmp", "7400.txt") I As Sinqle) Muestra mensa.ie en la p a r L e inferior de ia pantalla el mensaje1t ibel3.Caption = "Oprima sobre el componenteun click, para información" Id Sub niento :on los nombres 311 Coordenadas de los archivos necesarios para cada componente >rm2 - 13 311 Componentes-informacion("pic5.bmp", "sn75188.txt") Id Sub civate Sub Picture7- MouseMove(ButtonAs Integer, ShiftAs Integer, X As Single, As Sinqle) Muestra mensaje en la parte inferior de la pantalla el mensaje" 3bel3.Caption = "Oprima sobre el componente un click, para información" Id Sub 17 rivate Sub Picture8 Click 0 Este evento ejecutal o s procedimientos necesarios para mostrar el grafico y la 311 Coordenadas 311 Componentes-informacion("picll.bmp", "74138.txt") nd Sub * rivate Sub Picture8- MouseMove(ButtonAs Integer, ShiftAs Integer, X As Single, Y As Sinqle) Muestra mensaje en la parte inferior de la pantalla el mensaje" 2bel3.Caption = "Oprima sobre el componente un click, para información" nd Sub rivate Sub Picture9 Click0 y la Este evento ejecutalos procedimientos necesarios para mostrar el grafico información textual de cada componente fisico del sistema 8088, La llamada al segundo procedimiento se efectua pasando l o s argumentos al proced niento con 10s nombres de los archivos necesarios para cada componente 311 Coordenadas 311 Componentes-informacion ("pic18. b m ~ "74138. ~ ~ , txt") nd Sub rivate Sub Picture9- MouseMove(ButtonAs Integer, ShiftAs Integer, X As Single, Y As Sinqle) Muestra mensaje en la parte inferior ladepantalla el mensaje" abel3.Caption = llOprimasobre el componenteun click, para información" nd Sub rivate Sub Regresar-indice-Click0 ide nload Form2 orta.da. Show nd Sub rivate SubReset-Click0 in1 i or i = O To 65535 Step 1 emoria(i) = CLng("&h" + ' 1 0 0 1 1 ) ext i ireccionEditar1 .Text = " 0 0 0 0 : 0000" 'odiqoOperacion = O DireccionEditar = &HO nd Sub rivate Sub Reset-MouseMove(Button As Integer, ShiftAs Integer, X As 3 . .S Sinqle) Muestra mensaje en la parte inferior de la pantalla el mensaje" = "Resetea la memoria" ,abel3. Caption . A , Y rm2 - 14 d Sub ivate Sub Salir-Click0 nd d Sub ivate Sub SSCommandl-Click0 .d Sub ,ivate Sub SSPanell- MouseMove(Button As Integer, Shift Integer, As X As Single, As Sinqle) Muestra mensaje en la parte inferior de la pantalla el mensaje" = "Area de edición de programas" .bel3.Caption .d Sub ' .ivate Sub SSPanel2- MouseMove(Button As Integer, Shift As Integer, X As Single, As Sinqle) Muestra mensaje en la parte inferior de la pantalla el mensaje" .be13.Ca~tion= "Area sin uso en ejecución" ' .ivate Sub Tecla Click(1ndexAs Inteqer) Este procedimiento muestraen el objeto 1 oprimida display el valor hexadecimal la de tec If DiqitosHex = O Then DISPLAY.Text = 1 1 1 1 If DiqitosHex = 2 Then DISPLAY. Text = Riqht (DISPLAY. Text, 1) DisitosHex = DiqitosHex - 1 End If4 If DisitosHex < 2 Then Select Case Index Case O To 9 DISPLAY.Text = DISPLAY.Text + Chr(&H30 + Index) Case 10 To 15 DISPLAY.Text = DISPLAY.Text + Chr(&H37 + Index) End Select DiqitosHex = DigitosHex + 1 End If Id Sub lblic Sub Componentes informacion(picture AsStrinq, archivo As Strinq) los archivos *.bmp que tienen inform este procedimiento se utiliza para llamar :ión qrafica de los :omDonentes fisicos del sistema8088, los cuales son asignadosal objeto COMPON JTE.picture; Ademas de cargar al Objeco form2. textl.text el archivo de texto de información 3el componente ;et X = Loadpicture (Ilc:\actualizacion\" + picture) ;et X = Loadpicture (App.Path + + picture) 1mponente.picture = X j = App.Path + l l \ ' t + archivo 2belll.Caption = bS 3en b$ For Input As#1 3xto$ = 11 11 Do While Not EOF(1) Line Input #1, a$ Texto$ = Texto$ + a$ + Chr$ (13) + ChrS(10) Loop Textl.Text = Texto$ l o s e #1 .pos - 1 lblic Type TEprom Inicio As Long Fin A s Long Id Type lblic 'TypeTInformacionOperaciones 'Estado 1 ByteReql As Boolean 'Estado 4 ByteReq2 A s Boolean As Boolean 'Estado 5 Dato8 DatoHi As Boolean 'Estado 6 DatoLo As Boolean 'Estado 7 Of fHi As Boolean 'Estado 2 y 8 A s Boolean 'Estado 3 y 9 OffLo mnemonic0 As Strinq As String Micro (40) Id Type rblic rblic rblic lblic rblic rblic rblic rblic rblic rblic rblic rblic rblic rblic lblic lblic lblic lblic lblic lblic Queva rblic lblic lblic lblic lblic lblic lblic lblic lblic lblic lblic lblic lblic lblic ublic ublic ublic ublic ublic ublic ublic mnemonicos ( ) A s Strinq EstadoFetch As Inteqer Memoria(0 To 1048575) As Byte I Declaración del arreglo de memoria DirecionamientoReqistro As Byte CodiqoDireccionamiento As Byte CodiqoReqistrol A s Byte ' Con Uso CodiqoReqistro2 As Byte 'Con uso CodiqoSeqmento As Lonq CodiqoDesplazamiento As Lonq NumEprom As Inteqer, NumRam As Integer Eprom() As TEprom RAM ( 1 As TEprom Dato As Lonq DireccionEditar DiqitosHex As Inteqer Reqistros(0 To 19) As String ReqistroActual As Inteqer Direccionamiento As Integer NumByteMeter ListaDireccionarniento(1 To 2) As String modificación del11 de mayo de1997 MaximoCodiqo CodiqoOperacion As Byte ModoDireccionamiento As Byte Reqistrol As Byte Reqistro2 As Byte DatoByte As Lonq DatoWord As Lonq Direccion As Lonq Operacion(100) As TInformacionOperaciones Edicion As Lonq BanderaReqistro As Boolean CambioAdelante As Integer CambioAtras As Inteqer UltimoValor As Inteqer banderacambios As Boclean SeqDesensamblar As Lonq Oriqen As Strinq 'Oriqen de instrucción Destino As TextBox 'destino de instrucción Codiyosdeerror ( a 7 0 i o ) AS S t r i n q : Rrl-eyio cie e r r o r e s Descod As TextBox Varibale que guarda el desplazamiento de código Sub Error(nurner0 As Integer) nd Sub ublic Function BinHex$(num As Long) cad$ =1' 1' While num c > O If num Mod 16 c 10 Then cad$ = LTrim(Str$ (num Mod 16) Else Select Case num Mod 16 Case 10 + cad$ pos - 2 cad$ = Case 11 cad$ = Case 12 cad$ = Case 13 cad$ = Case 14 cad$ = Case 1 5 cad$ = End Select End If num = num \ 16 Wend Then cad$ If cad$ = BinHex$ = cad$ .d Function + IIB" + IrC1l+ ltDl1+ I1El1+ lIF1l + "All = cad$ cad$ cad$ cad$ cad$ cad$ O .blic Sub GuardarArchivo ( 1 Dim Direccion As Lonq Dim TamañoAs Inteqer On Error GoTo Finalizar Abrirmem.DialoqTitle = "Guardar memoria" Abrirmem.ShowSave Open AbrirMemoria.filename For Output As 1 Direccion = O Do Direccion = Forml.ObtenDireccionNoCero(Direccion) If Direccion >= 1023 Then Exit Do Print #1, Direccion aux& = Direccion Tamaño = Forml.ObtenTamaño(aux&) 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 .nalizar: Id Sub lblic Sub LeeDatosOperacionO Open App.Path + " \ 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 i = O While Not EOF(1) With Operacion (i) Input #1, .mnemonic0 Input #1, aux If Mid$(aux, 1, 1) = "V" Then .ByteRegl = True Else .ByteRegl = False End If If Mid$(aux, 2, 1) = "V" Then .ByteReg2 = True Else .ByteReg2 = False End If If Mid$ (aux, 3 , 1) = "V" Then .Dato8 = True Else .Dato8 = False End If I f Mid$(aux, 4, 1) = IrV" Then .DatoHi = True Else .DatoHi = False pos - 3 End If If Mid$(aux, 5 , 1) = "VII Then .D ~ ~ O L=OTrue Else .DatoLo = False End If l If Mid$ (aux, 6 , 1) = l l V 1Then .OffHi = True Else .OffHi = False End If If Mid$ (aux, 7 , 1) = "VII Then .Of fLo = True Else .OffLo = False End If Input #1, Mic For k = 1 To Mic Input #1, .Micro(k) Next k End With i = i + l Wend MaximoCodigo = i Close (1) id Sub iblic Sub AbrirArchivo ( ) Dim Direccion As Lonq Dim Tamaño As Integer Dim Dato As Byte On Error GoTo Finalizar AbrirMemoria.ShowOpen Open AbrirMemoria.filename For Input As 1 On Error GoTo Finalizarcerrar While Not EOF(1) Input #1, Direccion, Tamaño For i = 1 To Tamaño Input #1, Dato Memoria(Direccion + i - 1) = Dato Next i Wend malizarcerrar: Close 1 Forml.HazDump malizar: Id Sub lblic Sub ValidaHexadecimal(KeyAscii As Integer, Objeto As TextBox) If KeyAscii = 8 Then 0bjeto.Text = I 1 O r 1 + Mid(Objeto.Text, 1, 3 ) KeyAscii = O Gbj eto. SelStarL = 4 Else Caracter = Chr(KeyAscii1 If (Caracter > = I r O f f And Caracter c = I 1 g 1 l ) Or (Caracter >= "A" And Caracte c = f f F 1 l )Or (Caracter >= I1aI1And Caracter <= I lfI I ) Then KeyAscii = Asc (Ucase (Caracter) ) cadena$ = cadena$ = Mid(Objeto.Text, 2, 3 ) 0bjeto.Text = cadena$ 0bjeto.SelStart = 4 Else KeyAscii = O End If pos - 4 End If .d Sub Conclusiones El Simulador del sistema mínimo 8088, se implemento 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 implementacjón de una gran conjunto de instrucciones soportadas por el microprocesador. La principal característica que nos hereda este simulador , es que debido ha la estructura, y al tipo de instrucciones manejadas con microinstruciones, 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 familiaIntel.