Académique Documents
Professionnel Documents
Culture Documents
SimuProc 1.4.2.0
INDICE
1. PARTE TEORICA..................................................................................................................2
1.1 Introducción........................................................................................................................................................................2
2. PARTE PRÁCTICA................................................................................................................7
2.2 Vista de la pantalla principal del Simuproc.....................................................................................................................7
Ing. Larisa Toro - Ing. Rocío Andrea Rodríguez – Ing. Mónica Larrosa Página 1 de 11
UNIVERSIDAD NACIONAL DE LA MATANZA
Departamento de Ingeniería e Investigaciones Tecnológicas
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.
Ing. Larisa Toro - Ing. Rocío Andrea Rodríguez – Ing. Mónica Larrosa Página 2 de 11
UNIVERSIDAD NACIONAL DE LA MATANZA
Departamento de Ingeniería e Investigaciones Tecnológicas
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.
Ing. Larisa Toro - Ing. Rocío Andrea Rodríguez – Ing. Mónica Larrosa Página 3 de 11
UNIVERSIDAD NACIONAL DE LA MATANZA
Departamento de Ingeniería e Investigaciones Tecnológicas
• 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.
Ing. Larisa Toro - Ing. Rocío Andrea Rodríguez – Ing. Mónica Larrosa Página 4 de 11
UNIVERSIDAD NACIONAL DE LA MATANZA
Departamento de Ingeniería e Investigaciones Tecnológicas
• 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.
Ing. Larisa Toro - Ing. Rocío Andrea Rodríguez – Ing. Mónica Larrosa Página 5 de 11
UNIVERSIDAD NACIONAL DE LA MATANZA
Departamento de Ingeniería e Investigaciones Tecnológicas
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)
Ing. Larisa Toro - Ing. Rocío Andrea Rodríguez – Ing. Mónica Larrosa Página 6 de 11
UNIVERSIDAD NACIONAL DE LA MATANZA
Departamento de Ingeniería e Investigaciones Tecnológicas
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
• Hexadecimal
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):
Ing. Larisa Toro - Ing. Rocío Andrea Rodríguez – Ing. Mónica Larrosa Página 8 de 11
UNIVERSIDAD NACIONAL DE LA MATANZA
Departamento de Ingeniería e Investigaciones Tecnológicas
64 – ITOF: Conversión de Entero a Real: Convierte un número entero (16bits) almacenado en AX al mismo número pero
representado en Real IEEE754(32bits), el Resultado de la conversión queda en BX (bits mas significativos) y AX. Los
registros de control cambian de acuerdo al numero convertido: "Z" si el número es cero, "N" si el numero es negativo.
35 - JC [mem]: Saltar si el Carry Flag esta activado. Si C = 1, PC = contenido de memoria
31 - JEQ [mem]: Saltar si son iguales Si Z = 1, PC = contenido de la memoria.
34 - JMA [mem]: Saltar si es Mayor. Si Z = 0 y N = 0, PC = contenido de memoria.
33 - JME [mem]: Saltar si es Menor. Si N = 1, PC = contenido de la memoria
30 - JMP [mem]: Salto incondicional. PC = dirección de memoria donde esta la siguiente instrucción a ejecutar"
36 - JNC [mem]: Saltar si el Carry Flag no esta activado. Si C = 0, PC = contenido de memoria
39 - JNE [mem]: Saltar si no son iguales. Si Z = 0, PC = contenido de memoria
38 - JNO [mem]: Saltar si el Overflow Flag no esta activado. Si O = 0, PC = contenido de memoria
37 - JO [mem]: Saltar si el Overflow Flag esta Activado
01 - LDA [mem]: Cargue en AX el contenido de la dirección de Memoria especificada. (hay casos donde es mejor usar
MOV si se desea pasar datos sin tener que pasarlos por AX)
50 - LDB [mem]: La instrucción carga en AX el contenido de memoria almacenado en [mem] + BX
55 - LDF [mem]: Carga en BX y AX un numero de 32 bits (IEEE) que esta almacenado en la dir [mem] y mem+1. En BX
quedan los digitos mas Significativos
40 – LDT: Lee un valor del Teclado y lo lleva al registro AX
29 - LOOP [mem]: Decrementa CX y salta a la Pos de memoria si CX no es cero.
10 - MOV [dest,orig]: Copia el valor almacenado en el origen al destino. El destino y/o origen pueden ser registros o
direcciones de memoria o combinación de estos.
42 – MSG: Muestra un mensaje en pantalla
22 - MUL [mem]: Multiplicar: AX = AX * el contenido de la dirección de memoria. (Si el número resultante supera su
longitud en binario de 16 bits, este resultado se parte almacenando los bits más significativos en el Registro BX.)
62 - MULF [mem]: Multiplicación: BX y AX = BX y AX * [mem]y mem+1
90 – NOP: Esta operación no hace nada.
12 - NOT [destino]: NO lógico, invierte los bits del operando formando el complemento del primero.
13 - OR [dest,orig]: O inclusive lógico, todo bit activo en cualquiera de los operándoos será activado en el destino
81 - OUT puerto,registro: Escribe en el puerto especificado, el valor del registro
07 - POP [registro]: Trae de la Pila el último valor llevado por PUSH (indicado por el registro SP) y lo almacena en el
registro especificado.
06 - PUSH [registro]: Envía el valor del registro especificado a la pila
15 - ROL [dest,veces]: Rota los bits a la izquierda las veces especificadas(en decimal), los bits que salen por la izquierda
re-entran por la Derecha. En el Carry Flag queda el último bit rotado.
16 - ROR [dest,veces]: Rota los bits a la derecha las veces especificadas(en decimal), los Bits que salen por la derecha re-
entran por la izquierda. El Carry Flag guarda el último bit rotado.
17 - SHL [dest,veces]: Desplaza los bits a la izquierda el numero de veces especificado(en decimal), agregando ceros a la
derecha, el Carry Flag guarda ultimo bit desplazado.
18 - SHR [dest,veces]: Desplaza los bits a la Derecha el numero de veces especificado(en decimal), agregando ceros a la
izquierda, el Carry Flag guarda ultimo bit desplazado.
02 - STA [mem]: Guarde el contenido de AX en la dirección de Memoria especificada
51 - STB [mem]: guarda el contenido de AX en la dirección [mem] + BX
26 – STC: Pone el Carry Flag. C = 1
Ing. Larisa Toro - Ing. Rocío Andrea Rodríguez – Ing. Mónica Larrosa Página 9 de 11
UNIVERSIDAD NACIONAL DE LA MATANZA
Departamento de Ingeniería e Investigaciones Tecnológicas
- 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.
Ing. Larisa Toro - Ing. Rocío Andrea Rodríguez – Ing. Mónica Larrosa Página 10 de 11
UNIVERSIDAD NACIONAL DE LA MATANZA
Departamento de Ingeniería e Investigaciones Tecnológicas
Ing. Larisa Toro - Ing. Rocío Andrea Rodríguez – Ing. Mónica Larrosa Página 11 de 11