Simpletron
Simpletron
Simpletron
Adaptacin al ejercicio original de el libro (DEITEL, Paul J. y Harvey M. DEITEL, Cmo Programar
en JAVA. Sptima Edicin, Pearson Educacin. Mxico 2008, ISBN 978-970-26-1190-5).
El ejercicio original de Deitel consiste en construir una mquina virtual o una computadora virtual
muy simple.
El enunciado del problema es muy extenso, pero lo que hace el autor es dictar el programa con
palabras simples. Si lo leemos con atencin, solo tenemos que hacer lo que pide.
Modificaciones al Texto original:
1.- En el ejercicio original el programa en lenguaje de mquina se captura de tal forma que si nos
equivocamos al teclearlo lo tenemos que capturar todo de nuevo. Por lo tanto la Adaptacin que
proponemos, toma la entrada de un archivo de texto que puede ser capturada en un block de
notas, despus la copiamos y pegamos en el cuadro de texto del programa.
2.- Le agregamos una interfaz grfica de usuario.
Los ltimos dos digitos de una instruccin LMS son el operando (la direccin de la ubicacin en
memoria que contiene la palabra a la cual se aplica la operacin). Consideremos varios programas
simples en LMS.
Cdigo de Operacin
Significado
Operaciones de
entrada/salida
private const int LEE = 10;
desde el
ubicacin
Escribe
una
palabra
especfica de memoria
pantalla
de
y
teclado y
especfica
la
de
una
ubicacin
la imprime en
Operaciones de
Carga/Almacenamiento
private const int CARGA = 20;
Operaciones aritmticas
private const int SUMA
=30;
=31;
=32;
Divide
una
palabra
de
una
ubicacin
especfica de memoria a la palabra en el
acumulador
(deja
el
resultado
en
el
acumulador).
Operaciones de tranferencia de
control
private const int BIFURCA
=40;
especfica
de
de
de
=43;
Salta hacia
memoria
una
ubicacin
Nmero
+1007
Instruccin
(Lee A)
01
+1008
(Lee B)
02
+2007
(Carga A)
03
+3008
(Suma B)
04
+2109
(Almacena C)
05
+1109
(Escribe C)
06
+4300
(Alto)
07
+0000
(Variable A)
08
+0000
(Variable B)
09
+0000
(Variable C)
Figura 2. Programa LMS que lee dos enteros y calcula la suma.
El segundo programa LMS (Figura 3) lee dos nmeros desde el teclado, determina e imprime el
valor ms grande. Observe el uso de la instruccin +4107 como una transferencia de control
condicional, en forma muy similar a un if.
Ubicacin
00
Nmero
+1009
Instruccin
(Lee A)
01
+1010
(Lee B)
02
+2009
(Carga A)
03
+3110
(Resta B)
04
+4107
05
+1109
(Salto si acumulador es
negativo a 07)
(Escribe A)
06
+4300
(Alto)
07
+1110
(Escribe B)
08
+4300
(Alto)
09
+0000
(Variable A)
10
+0000
(Variable B)
Fig. 3 Programa LMS que lee dos enteros y determina cul de ellos es mayor.
Ahora escriba programas en LMS para realizar cada una de las siguientes tareas:
a) Usar un ciclo controlado por centinela para leer 10 nmeros positivos. Calcular e imprimir
la suma.
b) Usar un ciclo controlado por contador para leer siete nmeros, algunos positivos y otros
negativos, y calcular e imprimir su promedio.
c) Leer una serie de nmeros, determinar e imprimir el nmero ms grande. El primer
nmero ledo indica cuntos nmeros deben procesarse.
Ejercicio 2. (Un simulador de computadora) Es este problema usted crear su propia
computadora. No, no soldar componentes, sino que utilizar la poderosa tcnica de la simulacin
basada en software para crear un modelo de software orientado a objetos de Simpletron, la
computadora del ejercicio 1. Su simulador Simpletron convertir la computadora que usted utiliza
en Simpletron, y ser capaz de ejecutar, probar y depurar los programas LMS que escribi en el
ejercicio 1.
Cuando su simulador comience comenzar mostrando la figura 4
Su aplicacin debe simular la memoria del Simpletron con un arreglo unidimensional llamado
memoria, que cuenta con 100 elementos. Ahora suponga que el simulador se est ejecutando y
examinaremos el dilogo a media que introduzcamos el programa de la figura 2, que lee dos
enteros y calcula la suma.
En la ventana presentada en la figura 4, el campo de texto llamado Programa en LMS se utiliza
para capturar el programa en lenguaje de mquina Simpletron. Dado que el campo de Texto
(TextBox) permite copiar, cortar y pegar, el programa lo podemos editar con un block de notas y
guardarlo como un archivo de texto como se ve en figura 5, luego lo marcamos en el block de
notas, lo copiamos y lo pegamos en el TextoBox Programa en LMS.
El botn, Cargar en Memoria pone el programa en la memoria de Simpletron, o sea, dentro del
arreglo llamado memoria y presenta el programa ensamblado en el campo de Texto Programa
en Ensablador.
El botn Ejecutar corre el programa, mientras que Ejecutar Paso a paso solo hace una
instruccin por vez.
La intefaz tambin tiene una Consola llamada Consola LMS que muestra los mensajes
producidos por Simpletron
Descripcin
Muestra el Dialogo de entrada (fig. 6) que recibe como entrada un entero y
se almacena en la ubicacin
memoria[operando]= entrada;
CARGA:
acumulador = memoria[operando];
SUMA:
acumulador += memoria[operando];
ALTO:
Cuando el programa en LMS termine de ejecutarse, debern de mostrarse la consola LMS, el valor
de los registro, as como el contenido completo de la memoria (Fig 4). A este tipo de impresin se
le denomina vaciado de la computadora. Para ayudarlos a programar su mtodo de vaciado la
figura 4 se muestra un formato de vaciado en Memoria de Simpleton, muestra los valores
actuales de las instrucciones y los valores de los datos al momento en que se termin la ejecucin.
Procedamos ahora con la ejecucin de la primera instruccin de nuestro programa, +1007 en la
ubicacin 00. Como lo hemos indicado, la instruccin switch simula esta tarea pidiendo al usuario
que escriba un valor, leyendo el valor y almacenndolo en la ubicacin de memoria[ operando ]. A
continuacin este valor se lee (figura 6) y se coloca en la posicin de memoria 07.
En este punto se ha completado la simulacin de la primera instruccin. Todo lo que resta es
preparar a Simpletron para que ejecute la siguiente instruccin. Como la instruccin que acaba de
ejecutarse no es una transferencia de control, solo necesitamos incrementar el registro contador
de programa de la siguiente manera:
++contadorDePrograma;
Esta seccin completa la ejecucin simulada de la primera instruccin. Todo el proceso (es decir, el
ciclo de ejecucin de una instruccin) empieza de nuevo, con la bsqueda de la siguiente
instruccin a ser ejecutada,
Ahora veremos como se simulan las instrucciones de bifurcacin (las transferencias de control).
Todo lo que necesitamos hacer es ajustar el valor en el contador de instrucciones de manera
apropiada. Por lo tanto, la instruccin de bifurcacin incondicional (40) se simula dentro de la
instruccin switch como:
contadorDePrograma = operando;
La instruccin condicional bifurca si el acumulador es cero se simula como
if( acumulador == 0)
contadorDePrograma = operando;
En este punto, usted debe implementar su simulador Simpletron y ejecutar cada uno de los
programas que escribi en el ejercicio 1. Si lo desea, puede embellecer al LMS con caractersticas
adicionales y ofrecerlas a su simulador.
Su simulador debe comprobar diversos tipos de errores. Por ejemplo, durante la fase de carga del
programa, cada nmero que el usuario escribe en la memoria de Simpletron debe encontrarse
dentro del rango -9999 a +9999. Su simulador debe probar que cada nmero introducido se
encuentre dentro de este rango y, en caso contrario, seguir pidindole al usuario que vuelva a
introducir el nmero hasta que introduzca un nmero correcto.
Durante la fase de ejecucin, su simulador debe comprobar varios errores graves, como los
intentos de dividir entre cero, intentar ejecutar cdigos de operacin invlidos, y desbordamientos
del acumulador (es decir, las operaciones aritmticas que den como resultado valores mayores de
+9999 o menores que -9999). Dichos errores graves se conocen como errores fatales. Al detectar
un error fatal, su simulador debe imprimir un mensaje de error tal como
*** Intento de dividir entre cero ***
*** La ejecucin de Simpletron se termin en forma anormal ***
Y deber imprimir un vaciado de computadora completo en el formato que vimos anteriormente.
Este anlisis ayudar al usuario a localizar el error en el programa.
Para escribir el programa en lenguaje ensamblador (fig. 4 y fig 6) se hace lo siguiente (fig 7)
Lenguaje de mquina
codigoDeOperacion
operando
+1007
10
07
+1008
10
08
+2007
20
07
+3008
30
08
+2109
21
09
+1109
11
09
+4300
43
00
+0000
0
0
+0000
0
0
+0000
0
0
Figura 7. Decodificacin de instrucciones y ensamblado en Simpletron.
Ensamblador
0: LEE 7
1: LEE 8
2: CARGA 7
3: SUMA 8
4: ALMACENA 9
5: ESCRIBE 9
6: ALTO 0
7: VARIABLE
8: VARIABLE
9: VARIABLE