Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Simuproc PDF
Simuproc PDF
ELEMENTOS
Memoria: Es el dispositivo que almacena toda la información del programa que se
ejecuta, tanto datos como instrucciones. En realidad no es parte del procesador, sino que
es un dispositivo anexo al que el procesador accede para ir leyendo las instrucciones y
datos del programa. La capacidad de la memoria Simulada es de 4096 posiciones de 16
bits cada una: Desde 0 hasta 4095, o desde 000h hasta FFFh.
Registros Generales: 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
a la memoria. En ellos se pueden almacenar direcciones de memoria a las que se va a
acceder con frecuencia a lo largo de la ejecución del programa, o directamente variables
que se desean usar.
Este Procesador consta de 3 registros de propósito general, AX, BX y CX cada uno con
16 bits de capacidad.
Registros de Pila:
BP: Base Pointer, Puntero de base de la pila. El valor de por defecto es F80,
aunque se puede cambiar desde un programa, asignándole otra dirección de
memoria con la instrucción MOV. Digamos que se desea reservar más espacio
para la pila haciendo que ésta comience desde la posición CF1, entonces se
copia este dato en cualquier posición de memoria; supongamos que le elige la
dirección 3B entonces se utilizará la instrucción MOV BP,3B y así BP será igual
a CF1. 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 qué próxima dirección de la pila
está disponible, es decir, apunta a la cima de la pila. Este valor se cambia
automáticamente cuando se usan las instrucciones PUSH ó POP.
UTILIDADES
Editor Interno: Herramienta para facilitar la escritura de programas: Tiene resaltado de
sintaxis, soporte de Deshacer, Rehacer, Desplazamiento o tabulación de código
seleccionado (presionando ctrl. Shit I ó U), marcadores (presionando Ctrl Shit. 1-9 para
marcar y ctrl. 1-9 para ir al marcador), y otras opciones configurables.
Editor de Memoria: Se usa para inicializar las variables y/o constantes del programa
en ciertas posiciones de memoria una vez realizado el programa. También se pueden
modificar posiciones de memoria en cualquier momento, ya sea antes ó durante la
ejecución de un programa en caso de que se necesite, ya sea para depurar éste
modificando variables, o las mismas instrucciones con sus parámetros.
• Puerto 8 : Reloj. Lee los segundos del sistema, retorna un numero en binario
(entre 0 y 59) al registro especificado. (Sirve para generar números aleatorios)
A=0 A#=1 B=2 C=3 C#=4 D=5 D#=6 E=7 F=8 F#=9 G=10 G#=11
siendo:
Por ejemplo: C6 => 440 * 2^[(6-4) + 3/12)] = 2093 Hz, ó casi 2.1 kHz
Conversor de Bases: Permite la conversión de una base a cualquier otra. Soporta desde
base 2 a base 36. También posee conversión para números de punto flotante a IEEE
754 y viceversa.
Estadísticas: El simulador muestra constantemente las estadísticas del programa en
ejecución, tales como número de instrucciones ejecutadas, clase de instrucción y la
velocidad de procesamiento, etc.
Resolución del monitor: 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 caso
contrario sacará una ventana de dialogo para cambiarla si el usuario desea.
Archivos SMP: El Simulador registra los archivos de tipo .SMP para que se puedan
abrir mediante un doble clic desde el explorador de Windows.
Registros de control (flags): Se les puede dar un doble clic para hacer un cambio
forzado de los mismos en caso de que se necesite depurar su programa. Si se da clic con
el botón derecho del ratón saldrá un menú para seleccionar que flag quiere
activar/desactivar.
SMP: que son los creados por este mismo cuando se salvan.
TXT o ASM: que son compatibles con la versión anterior de este simulador.
Usos para la pila: Ya sea para almacenar datos, para llevar control del programa, la pila
se usa para pasar variables entre funciones y para almacenar variables locales. El
programador es el responsable de reservar el espacio apropiado para la pila (ya
explicado anteriormente).
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 estando la pila 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; en caso
contrario habrá errores.
INSTRUCCIONES SOPORTADAS
Con las instrucciones que soporta este simulador se pueden escribir una gran cantidad
de programas para resolver muchos problemas diferentes. Su sintaxis será la siguiente:
Sintaxis Descripción
01 - LDA [mem] Carga en AX el contenido de la dirección de memoria
especificada. Si en (1F)=10111, después de ejecutada la
instrucción LDA 1F se obtendría que AX=10111. Es
equivalente a usar la instrucción MOV AX,1F. Esta
instrucción se encuentra disponible para tener compatibilidad
con versiones anteriores. Es mejor usar MOV.
07 - POP [registro] Extrae de la Pila el último valor llevado por PUSH (indicado
por el registro SP) y lo almacena en el registro especificado.
Sintaxis Descripción
08 - INC [dest] Incrementa en 1 el destino especificado, el parámetro puede
ser una dirección de memoria o un registro. Si en la posición
de memoria EB esta el valor 1001, al ejecutar INC EB se
obtiene que ahora el valor de EB es 1010.
BX = 0100001011001000
AX = 1000000000000000
--------------------------
Nota: Para pedirle al usuario o mostrar estos números IEEE
754 en pantalla, usar puerto 1, con las instrucciones IN AX,1
y OUT 1,AX
56 – STF [mem] Guarda en [mem] y mem+1 el contenido de BX y AX. Ej: Si
AX y BX tienen los mismos valores del ejemplo anterior, un
STF 2A deja la memoria con el valor inicial del ejemplo
anterior.
60 – ADDF [mem] Suma números de 32 bits: En BX y AX queda el resultado de
la suma de estos mas el contenido de [mem] y mem+1. Estos
números IEEE 754 pueden ser de punto flotante, o enteros
desde -2147483647 hasta 2147483647 Si en cualquier
operación aritmética se sobrepasa este valor, se activa el
Overflow flag.
61 - SUBF [mem] Resta un número de 32 bits: BX y AX = BX y AX - [mem] y
[mem+1]. Esta instrucción se puede utilizar como un CMP
para números de 32 bits.
62 - MULF [mem] Multiplicación: BX y AX = BX y AX * [mem]y [mem+1] Si
el resultado es > 2147483647, Resultado = 2147483647 y
Overflow Flag = 1
63 - DIVF [mem] División: BX y AX = BX y AX / [mem]y [mem+1], en CX
queda el residuo de la división en entero de 16 bits .
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 (MSB’s) y AX. Los registros de
control cambian de acuerdo al número convertido: "Z" si el
número es cero, "N" si el número es negativo.
65 - FTOI Conversión de Real a Entero: Convierte un número Real
(32bits) a su equivalente en entero BX y AX en un entero
(16bits), el Resultado queda en AX. Los registros de control
cambian de acuerdo al número convertido: "Z" si el número
es cero, "N" si el número es negativo, "O" si el numero real
es mayor de 65535.
80-IN registro,puerto Lleva al Registro el valor retornado por el puerto
especificado. Ej: IN AX,8; lleva a AX el valor retornado por
el puerto 8 (Reloj: los segundos del sistema).
81-OUT Escribe en el puerto especificado, el valor del registro.
Sintaxis Descripción
puerto,registro
90 - NOP Esta operación no hace nada.