Simuproc Completo
Simuproc Completo
Introducción a la Informática
SimuProc 1.4.2.0
INDICE
1. PARTE TEORICA..................................................................................................................2
1.1 Introducción........................................................................................................................................................................2
2. PARTE PRÁCTICA................................................................................................................6
2.2 Vista de la pantalla principal del Simuproc.....................................................................................................................6
1. PARTE TEORICA
1.1 Introducción
SimuProc es un Simulador de un “Procesador Hipotético” con el cual tiene por objetivo el aprendizaje de las
nociones básicas para empezar a programar en lenguaje ensamblador, en el cual puede observar todo el
proceso interno de ejecución del programa a través de cada ciclo del procesador.
El simulador incluye:
El simulador solo reconoce lenguaje ensamblador (assembler1); por lo tanto para ejecutar programas en el
simulador, se deben escribirlos primero en este lenguaje.
Luego de tener el programa ya en lenguaje ensamblador se carga en el simulador. Para ello existen tres
alternativas:
La utilización del programa es muy sencilla, sólo debe crear el programa en ensamblador e insertarlo al
SimuProc mediante un archivo de texto (o manualmente). Luego él mismo se encarga de almacenar ese
proyecto en un archivo .SMP para futuras necesidades sin tener que volver a escribir el programa nuevamente.
Se pueden ingresar instrucciones manualmente desde la ventana principal, pero la manera mas fácil es hacerlo
desde el editor.
Se accede a los Editores presionando el botón Editor en la barra de herramientas. En el panel
derecho (Editor 2) puede escribir el programa, las instrucciones serán resaltadas; puede presionar el botón
derecho del Mouse en este editor para acceder a más opciones.
1.3.1 Memoria
La Memoria es el dispositivo que almacena toda la información del programa que se ejecuta, tanto datos
como instrucciones. Esta en realidad no es parte del procesador, sino que es un dispositivo a parte al que
el procesador accede para ir leyendo las instrucciones y datos del programa.
1
El assembler es un lenguaje de programación de bajo nivel.
La capacidad de la memoria Simulada es de 4096 posiciones de 16 bits cada una: desde 0 hasta 4095 en
decimal (en hexadecimal: desde 000 hasta FFF).
Esta memoria es suficiente para ejecutar gran variedad de simples y complejos programas.
1.3.2 Registros
Este Procesador consta de 3 registros de propósito general, AX, BX y CX cada uno con 16 bits de
capacidad, registros apuntadores, registros de pila y registros de control.
Los registros generales del procesador se usan para almacenar información de uso rápido, ya que se
accede a ellos a una velocidad mucho más alta que la memoria. En ellos se pueden almacenar
direcciones de memoria a las que se va a acceder a lo largo de la ejecución del programa, o
variables que se deseen utilizar.
• MDR: Memory Data Register o Memory Buffer Register. Es un registro intermedio en el que se
almacenan los datos que se escriben o leen de memoria. En el caso de una lectura, se pone en el
MAR la dirección y se activa la señal de leer, obteniendo en el MDR el dato buscado. En el caso
de una escritura, se pone en el MAR la dirección y en el MDR el dato a escribir en memoria,
después se activa la señal de escribir, de esta forma almacenamos en memoria el dato.
• BP: Base Pointer (Puntero de base de la pila.) El valor de por defecto es F80. Este puede
cambiarse desde un programa, asignándole otra dirección de memoria con la instrucción MOV.
Mientras se ejecuta el programa se puede visualizar en una barra de porcentaje el uso de la pila.
• SP: Stack Pointer (Puntero de la pila). Indica la próxima dirección de la pila que esta disponible, es
decir, apunta a la cima de la pila. Este valor se cambia automáticamente cuando se usan las
instrucciones PUSH ó POP.
Estos registros se usan para poder controlar el comportamiento de un programa; se activan después
de cada operación según sea el resultado de la instrucción ejecutada.
Estos flags se usan principalmente en instrucciones de bifurcación (por ejemplo, si queremos que, en
caso de que el resultado de la última operación fuera cero, el programa se salte varias de las
instrucciones siguientes, comprobamos el flag cero y si está activo el programa salta, esto se
consigue con la instrucción JEQ).
• Editor Interno: Es una herramienta usada para escribir los programas mas fácilmente. Permite:
deshacer, rehacer, desplazar o tabular el código seleccionado.
• Modificador de Memoria: Se utiliza para inicializar las variables y/o constantes del programa en
ciertas posiciones de memoria cuando lo escribe. También puede modificar posiciones de memoria
en cualquier momento, ya sea antes ó durante la ejecución de un programa.
• Conversor de Bases: Dispone un conversor de bases para realizar conversiones de una base a
cualquier otra, soporta desde base2 a base36. También permite la conversión entre números de
punto flotante y IEEE 754.
• Dispositivos Virtuales: Cada computadora utiliza periféricos para conectarse con el mundo
exterior. SimuProc también dispone unos dispositivos de E/S simulados. Estos están conectados a
unos puertos virtuales los cuales pueden ser accedidos con las instrucciones In y Out dependiendo
del tipo de dispositivo.
• Puerto 8 : Reloj
Lee los segundos del sistema, retorna un número en binario (entre 0 y 59) al registro especificado.
Permite generar números aleatorios.
• Puerto 9: Switches
Este dispositivo, consiste de 16 switches en fila enumerados de 0 a 15. Cualquier switch puede ser
encendido resultando un “1” lógico correspondiente al bit del switch.
1.4.2 La Pila
La pila de este simulador es simplemente un conjunto de datos que se almacenan en una zona de
memoria, del tipo LIFO (Last In- First Out = Ultimo en entrar - Primero en salir).
La Pila es un buffer usualmente implementado como un bloque de n bytes o words consecutivos. En este
simulador cada posición de memoria es de 16 bits.
El programador es el responsable de reservar el espacio apropiado para la pila. Un problema con las pilas
es que el programador las puede hacer muy pequeñas y puede que ocurra un stack overflow o
desbordamiento de pila si se esta intentando usar la instrucción PUSH para enviar algo cuando ya la pila
esta llena; o stack underflow si se usa la instrucción POP para leer la pila estando la misma vacía.
Por cada PUSH debe de haber luego un POP. Cuando un programa o función termina su ejecución la pila
debe quedar como estaba antes de que este se ejecutara, sino hay errores en este.
La velocidad de Simulación puede ser cambiada en cualquier momento y se puede apagar la animación
para una ejecución más rápida. Puede observarse el acceso en memoria de las instrucciones y/o variables
a medida que se ejecuta la simulación.
Al ejecutarse el Simulador este chequea que Windows este usando fuentes pequeñas y que la resolución
sea como mínimo de 800x600, en otro caso sacara un dialogo para cambiarla si el usuario desea.
Hay dos Barras de Porcentaje que muestran el porcentaje de uso de la memoria simulada y porcentaje de
uso del espacio reservado para la pila en ese momento.
A los Registros de control (flags) se les puede dar doble clic para hacer un cambio forzado de estos en
caso de sea necesario depurar un programa. También si hace clic con el botón derecho del mouse saldrá
un menú para seleccionar que flag se desea activar ó desactivar.
Para cargar programas en el simulador se pueden tipear las instrucciones manualmente por la interfaz del
programa o
puede abrir varios tipos de archivos:
• .SMP que son los creados por este mismo cuando se salvan
• .TXT
• .ASM (que son compatibles con la versión anterior de este simulador)
2. PARTE PRÁCTICA
A continuación se muestra la pantalla principal del simulador en donde se han hecho aclaraciones básicas
sobre el contenido de la misma. Haciendo referencia a lo comentado en la parte teórica de esta guía:
Cero
Negativo
Carry
Overflow
Permite seleccionar
la instrucción.
Muestra el mnemónico ó no, haciendo clic es posible activar o desactivar esta opción
A continuación se muestran ordenadas alfabéticamente las instrucciones que incluye el simulador (el número
antepuesto indica el orden en que aparecen ubicadas en el programa):
Cargar las seis instrucciones que se muestran a continuación desde la dirección 000, hasta la 005.
Luego ingresar en las posiciones de memoria 00E y 00F los datos que se muestran a continuación
Desde el editor del SIMUPROC puede cargarse directamente las instrucciones del programa, este
procedimiento es menos amigable que cargar las instrucciones desde la pantalla principal. A
continuación se muestra un programa que eleva un número ingresado por teclado a una potencia mayor
a cero ingresada también por teclado.
- La frecuencia debe ser entre 7Hz y 32767Hz (frecuencias menores son tomadas por defecto dentro
del umbral mínimo) y es leída del registro especificado en la instrucción.
- La duración es leída del registro BX.