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.
La capacidad de la memoria Simulada es de 4096 posiciones de 16 bits cada una:
Desde 0 hasta 4095, o sea en hexadecimal:
Desde 000 hasta FFF.
Esta memoria es suficiente para ejecutar gran variedad de simples y complejos programas.
El simulador trabaja con constantes y variables en binario y direcciones (posiciones de memoria) en Hexadecimal.
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 la memoria. En ellos se pueden almacenar direcciones de memoria a las que se va a acceder bastante 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 Apuntadores como:
PC ó IP: Program Counter o Instruction Pointer, Contiene la dirección de memoria de la próxima instrucción a ejecutar y es incrementado en cada nueva instrucción.
MAR: Memory Address Register. (Registro de Dirección de Memoria) es el registro en el que se almacena la dirección de memoria a la que se quiere acceder.
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 de activa la señal de escribir, de esta forma almacenamos en memoria el dato.
IR: Instruction Register, en este registro se introduce la instrucción a ejecutar, después de haberla leído de memoria accediendo a ella mediante la dirección señalada en el PC; El contenido de este registro se puede dividir en código de operación (el código que señala la operación que se realizará) y operandos. Puede haber 2 operandos o sólo uno. Acá es donde se decodifica e interpreta la instrucción así: se descompone la instrucción leída de forma que se pueda saber cual es la operación que se desea realizar y cuales son los operandos, en su caso, o el desplazamiento en caso de que se trate de una instrucción de bifurcación...
Registros de Pila:
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. Digamos que quiero reservar mas espacio para la pila haciendo que esta comience desde la posición CF1, entonces copio esta dirección de memoria en cualquier pos de memoria; supongamos que lo copie en la dirección 3B entonces uso la instrucción MOV BP,3B y así BP es igual a CF1.
Mientras se ejecuta el programa se puede visualizar en una barra de porcentaje el uso de la pila.
Mas adelante hablare de la Pila.
SP: Stack Pointer, Puntero de la pila, indica en que próxima dirección de la pila esta disponible, es decir, apunta a la cima de la pila. Este valor se cambia automáticamente cuando se usan las instrucciones PUSH ó POP.
Registros de Control (Flags)
Estos registros se usan para poder controlar el comportamiento de un programa los cuales se activan después de cada operación, según sea el resultado de la instrucción ejecutada.
Zero flag: se vuelve 1 si el resultado de la ultima operación = 0
Negative ó Sign flag: Se vuelve 1 si el resultado de la ultima operación es igual a un numero negativo.
Carry flag: se activa cuando la operación realizada ha producido un acarreo.
Overflow flag: se activa cuando la operación produjo desbordamiento (overflow) , es decir, el resultado ocupaba más de los 16 bits que caben en un registro.
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).
En la ALU (Arithmetic Logic Unit) - (Unidad Arimética y Lógica) es donde el procesador realiza las operaciones matemáticas, (suma, resta, multiplicación...) y las operaciones lógicas (AND, OR, desplazamiento de bits...).
SimuProc es Freeware (Gratis), Puede ser usado y distribuido libremente.
(c)2005 Vlaye