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.