You are on page 1of 10

ESPECIFICACIONES DEL PROCESADOR SIMUPROC

ELEMENTOS
Memoria: Es el dispositivo que almacena toda la informacin 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.
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
informacin de uso rpido, ya que se accede a ellos a una velocidad mucho ms 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 ejecucin del programa, o directamente variables
que se desean usar.
Este Procesador consta de 3 registros de propsito general, AX, BX y CX cada uno con
16 bits de capacidad.
Registros Apuntadores: Los registros apuntadores son los encargados de direccionar
las distintas posiciones de memoria del sistema. En SimuProc nos enccontraremos con
los siguientes:
PC IP: Program Counter o Instruction Pointer; contiene la direccin de
memoria de la prxima instruccin a ejecutar y es incrementado en cada nueva
instruccin.
MAR: Memory Address Register (Registro de Direccin de Memoria) es el
registro en el que se almacena la direccin 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 direccin y se activa la seal de
leer, obteniendo en el MDR el dato buscado. En el caso de una escritura, se pone
en el MAR la direccin y en el MDR el dato a escribir en memoria, despus de
activa la seal de escribir, de esta forma almacenamos en memoria el dato.
IR: Instruction Register, en este registro se introduce la instruccin a ejecutar,
despus de haberla ledo de memoria accediendo a ella mediante la direccin
sealada en el PC; El contenido de este registro se puede dividir en cdigo de
operacin (el cdigo que seala la operacin que se realizar) y operandos.
Puede haber 2 operandos o slo uno. Ac es donde se decodifica e interpreta la

instruccin as: se descompone la instruccin leda de forma que se pueda saber


cual es la operacin que se desea realizar y cuales son los operandos, en su caso,
o el desplazamiento en caso de que se trate de una instruccin de bifurcacin...
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, asignndole otra direccin de
memoria con la instruccin MOV. Digamos que se desea reservar ms espacio
para la pila haciendo que sta comience desde la posicin CF1, entonces se
copia este dato en cualquier posicin de memoria; supongamos que le elige la
direccin 3B entonces se utilizar la instruccin 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 prxima direccin de la pila
est disponible, es decir, apunta a la cima de la pila. Este valor se cambia
automticamente 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 despus de cada operacin, segn
sea el resultado de la instruccin ejecutada. Estos flags se usan principalmente en
instrucciones de bifurcacin.
Zero flag: Se vuelve 1 si el resultado de la ltima operacin es cero (Z=1).
Negative Sign flag: Se vuelve 1 (N=1)si el resultado de la ltima operacin es
igual a un numero negativo.
Carry flag: Se activa (C=1) cuando la operacin realizada ha producido un
acarreo.
Overflow flag: se activa (O=1) cuando la operacin produjo desbordamiento
(overflow) , es decir, el resultado ocupaba ms de los 16 bits que caben en un
registro.
ALU (Arithmetic Logic Unit) - (Unidad Arimtica y Lgica): Es donde el procesador
realiza las operaciones matemticas, (suma, resta, multiplicacin...) y las operaciones
lgicas (AND, OR, desplazamiento de bits...).

UTILIDADES
Editor Interno: Herramienta para facilitar la escritura de programas: Tiene resaltado de
sintaxis, soporte de Deshacer, Rehacer, Desplazamiento o tabulacin de cdigo

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. Tambin se pueden
modificar posiciones de memoria en cualquier momento, ya sea antes durante la
ejecucin de un programa en caso de que se necesite, ya sea para depurar ste
modificando variables, o las mismas instrucciones con sus parmetros.
Dispositivos virtuales: Cada computador real utiliza dispositivos perifricos de alguna
clase para conectarse con el mundo exterior. SimuProc posee unos dispositivos de E/S,
virtuales que estn conectados a unos puertos a los que se puede acceders con las
instrucciones In y Out dependiendo del tipo de dispositivo.

Puerto 1: Teclado y Pantalla. Usado solo Para pedirle al usuario un numero de


32 bits, o para imprimir uno en pantalla, ej: IN AX,1 ;pide al usuario un nmero
IEEE 754. Ej: OUT 1,AX ; escribe en pantalla el nmero de 32 bits formado por
BX y AX.

Puerto 8 : Reloj. Lee los segundos del sistema, retorna un numero en binario
(entre 0 y 59) al registro especificado. (Sirve para generar nmeros 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 lgico
correspondiente al bit del switch.

Puerto 13: PC-Speaker. Genera sonidos a travs del altavoz de tu PC.


Para generar un Sonido necesitas dar la frecuencia y la duracin en
milisegundos. La frecuencia debe ser entre 7Hz y 32767Hz
La frecuencia es leda del registro especificado en la instruccin, y la duracin es
leda del registro BX. Ejemplo: Supongamos que AX = 101000101000 y BX =
111110100; OUT 13,AX ; produce un sonido de 2600Hz durante 500 ms.
Para averiguar los Hz de algunas notas se puede usar la siguiente formula:
Frecuencia, en Hertz = 440 * 2^[(octavo-4) + (nota/12)]
Donde las notas comienzan as:
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:
C=Do

D=Re

E=Mi

F=Fa

G=Sol

A=La

B=Si

Por ejemplo: C6 => 440 * 2^[(6-4) + 3/12)] = 2093 Hz, casi 2.1 kHz
Conversor de Bases: Permite la conversin de una base a cualquier otra. Soporta desde
base 2 a base 36. Tambin posee conversin para nmeros de punto flotante a IEEE
754 y viceversa.

Estadsticas: El simulador muestra constantemente las estadsticas del programa en


ejecucin, tales como nmero de instrucciones ejecutadas, clase de instruccin y la
velocidad de procesamiento, etc.
Vigilante de Memoria: Con el vigilante de memoria se pueden observar el valor de las
variables en las posiciones de memoria. Dispone de un historial que muestra los ltimos
5 valores de las posiciones vigiladas.
Velocidad de Simulacin: Puede ser cambiada en cualquier momento y se puede
apagar la animacin para una ejecucin mucho ms rpida. Es posible seguir el acceso
en memoria de las instrucciones y/o variables a medida que se ejecuta la simulacin
Resolucin del monitor: Al ejecutarse el Simulador este chequea que Windows este
usando fuentes pequeas y que la resolucin sea como mnimo 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.
Barras de Porcentaje: Muestran el porcentaje de uso de la memoria simulada y el
porcentaje de uso del espacio reservado para la pila en cada momento.
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 botn derecho del ratn saldr un men para seleccionar que flag quiere
activar/desactivar.
Carga de programas: Se pueden entrar las instrucciones manualmente por la interfaz
del programa y se pueden abrir los siguientes tipos de archivos:
SMP: que son los creados por este mismo cuando se salvan.
TXT o ASM: que son compatibles con la versin anterior de este simulador.
Pila: La pila es simplemente un conjunto de datos que se almacenan en una zona de
memoria, generalmente al final, y en la cual los datos se guardan con la estructura LIFO
( Last In, First Out). La Pila es un buffer usualmente implementado como un bloque de
n bytes o words consecutivos. En este simulador cada posicin de memoria es de 16
bits
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 pequeas y puede
que ocurra un stack overflow o desbordamiento de pila si se esta intentando usar la
instruccin PUSH para enviar algo cuando ya la pila esta llena; o stack underflow si se
usa la instruccin POP estando la pila vaca.

Por cada PUSH debe de haber luego un POP. Cuando un programa o funcin termina
su ejecucin 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:
XX - INST [par1] [par2]

Donde XX es el Cdigo de la instruccin, INST es la instruccin y [par1] [par2] son los


parmetros si stos existen.
La versin 1.4.3.0 soporta las siguientes instrucciones:

Sintaxis

Descripcin

01 - LDA [mem]

Carga en AX el contenido de la direccin de memoria


especificada. Si en (1F)=10111, despus de ejecutada la
instruccin LDA 1F se obtendra que AX=10111. Es
equivalente a usar la instruccin MOV AX,1F. Esta
instruccin se encuentra disponible para tener compatibilidad
con versiones anteriores. Es mejor usar MOV.

02 - STA [mem]

Guarda el contenido de AX en la direccin de memoria


especificada. Si tenemos el valor 1010110 en el registro AX y
se desea almacenarlo en la posicin de memoria 3C, la
instruccin es STA 3C. Es equivalente a usar la instruccin
MOV 3C,AX
Esta instruccin se encuentra disponible para tener
compatibilidad con versiones anteriores. Es mejor usar MOV
debido a que si se desea pasar algn dato de una direccin de
memoria a otra usando LDA y STA se necesitaran dos
instrucciones: LDA mem1 y luego STA mem2, mientras que
con MOV ser as: MOV mem2,mem1

03 - XAB

Intercambia los valores de los registros AX y BX


instruccin no necesita parmetros.

04 - CLA

Pone a cero AX (AX = 0)

06 - PUSH [registro]

Enva el valor del registro especificado a la pila

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.

Esta

Sintaxis

Descripcin

08 - INC [dest]

Incrementa en 1 el destino especificado, el parmetro puede


ser una direccin de memoria o un registro. Si en la posicin
de memoria EB esta el valor 1001, al ejecutar INC EB se
obtiene que ahora el valor de EB es 1010.

09 - DEC [dest]

Decrementa en 1 el destino especificado. Si el destino da


como resultado cero el flag Z se pone a 1 (Z = 1).

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
combinacin de estos. Para copiar lo que esta en la posicin
de memoria 12E a la posicin D2 se usa la instruccin MOV
D2,12E

11 AND [dest,orig]

Producto lgico entre los dos operandos escribiendo el


resultado en el destino. Los parmetros pueden ser
direcciones de memoria o Registros. Si AX=1001101 y la
posicin (3F)=11011, al ejecutar la instruccin AND AX,3F
se obtiene AX=1001. Observe que se dejan los bits en comn
que tienen los dos nmeros.

12 NOT [destino]

NO lgico, invierte los bits del operando formando el


complemento del primero. Si en AX=10011, al ejecutar NOT
AX se obtiene AX=1111111111101100
13 OR [dest,orig]
Suma lgica entre los operandos escribiendo el resultado en
el destino. Si en (3A)=1001101 y en (3B)=11011, al ejecutar
la instruccin OR 3A,3B se obtiene en (3A)=1011111.
14 XOR [dest,orig] Suma exclusiva entre los operandos escribiendo el resultado
en el destino. Si en (3A)=1001101 y en (3B)=11011, al
ejecutar la instruccin XOR 3A,3B se obtiene en
(3A)=1010110.
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 flag del Carry (C) queda el ltimo bit rotado.
Si en (7E)= 101110, al ejecutar... se obtiene en
7E
y en C
ROL 7E,2
10111000
0
ROL 7E,7
1011100000000
0
ROL 7E,13
1100000000000101
1
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 flag C guarda el ltimo bit rotado.
17 SHL [dest,veces] Desplaza los bits a la izquierda el nmero de veces
especificado (en decimal), agregando ceros a la derecha, el
Carry Flag guarda ltimo bit desplazado
18 SHR [dest,veces] Desplaza los bits a la derecha el nmero de veces
especificado (en decimal), agregando ceros a la izquierda, el
flag C guarda ltimo bit desplazado. Si en (1A)=101110

Sintaxis

20 - ADD [mem]
21 - SUB [mem]
22 - MUL [mem]

Descripcin
Al Ejecutar... se obtiene

en 1A

SHR 1A,2
SHR 1A,6
SHR 1A,11

1011
0
0

y en C
1
1
0

Suma AX con el dato de la posicin de memoria indicada.


AX = AX + (memoria).
Resta a AX el dato de la posicin de memoria indicada.
AX = AX - (memoria).
Multiplica: AX = AX * (memoria).
Si el nmero resultante supera su longitud en binario de 16
bits, este resultado se parte almacenando los bits ms
significativos en el registro BX. Si el resultado de una
operacin es, pr ejemplo,101101000111100010111 (21 bits),
los registros quedaran as:
A = 1000111100010111 (los ltimos 16bits)
B = 10110
(los primeros Bits)
Tambin se activa el flag Overflow, para indicar que en la
ltima operacin sucedi esto.

23 - DIV [mem]

Divide: AX = AX / (memoria), BX= mdulo o residuo.

24 - CLN
25 - CLC

Limpia el Negative Flag. N = 0


Limpia el flag Carry (C = 0).

26 - STC

Pone a uno el flag Carry (C = 1).

27 - CMC

Niega el flag Carry Flag (C = C').

29 - LOOP [mem]

Decrementa CX y va a la Pos de memoria si CX no es cero

30 - JMP [mem]

Salto incondicional. PC = direccin de memoria donde est


la siguiente instruccin a ejecutar.

31 - JEQ [mem]

Salta si el flag Z es uno (Z = 1, PC = contenido de la


memoria).

32 - CMP [mem]

Compara AX con [mem], si AX es mayor, Z=0 N=0, si es


igual Z=1 N=0, si es menor Z=0 N=1. Si AX=10110 y en
(4G)=1100, al ejecutar la instruccin CMP 4G se obtine que
como el nmero almacenado en AX es mayor entonces: Z=0
y N=0

33 - JME [mem]

Salta si el flag N es uno (N = 1, PC = contenido de la


memoria). Al ejecutar, por ejemplo, la instruccin JME 3F
inmediatamente despus de ejecutar la instruccin del

Sintaxis

Descripcin
ejemplo anterior de la instruccin 32, se verifica el flag N, y
como en este caso se encuentra en 0 (porque el nmero no es
menor) entonces no se realiza dicho Salto a 3F porque el
valor de PC no se modifica, el programa sigue su ejecucin.

34 - JMA [mem]

Salta si los flags Z y N son cero (Z = 0 y N = 0, PC =


contenido de memoria). Siguiendo con el ejemplo de la
instruccin 32, al ejecutar seguidamente JMA G5 se verifican
los flags N y Z, y como en este caso los dos son 0 (porque el
numero es menor) entonces se realiza un salto a G5, ya que el
valor de PC se modifica, y el programa sigue su ejecucin.

35 - JC [mem]

Salta si el flag C est a uno (C = 1, PC = contenido de


memoria).

36 - JNC [mem]

Salta si el flag C est a cero (C = 0, PC = contenido de


memoria).

37 - JO [mem]

Salta si el flag O est a uno (O = 1, PC = contenido de


memoria).

38 - JNO [mem]

Salta si el flag O est a cero (O = 0, PC = contenido de


memoria).

39 - JNE [mem]

Salta si el flag Z es cero (Z = 0, PC = contenido de memoria).

40 - LDT

Lee un valor del teclado y lo lleva al registro AX Esta


instruccin es para comunicarse con el usuario, pidindole
que entre un dato. Se puede colocar una descripcin del dato
que pide, que se mostrar en tiempo de ejecucin.

41 - EAP

Escribe en pantalla el contenido del registro AX. Esta


instruccin tambin es para comunicarse con el usuario. Se
puede colocar una descripcin del dato que se entrega, este se
mostrar en tiempo de ejecucin.

42 - MSG
50 - LDB [mem]

Muestra un mensaje en pantalla. Ej: MSG "Hola Mundo !!"


Se carga en AX el dato almacenado en la direccin [mem] +
BX
Si BX=1100 y (2B)=3A; LDB 1F carga 3A en AX.
Aclaracin: 1100=C; 1F+C=2B

51 - STB [mem]

Guarda el contenido de AX en la direccin [mem] + BX. Si


BX=101 ; STB 3A guarda AX en 3F

55 LDF [mem]

Carga en BX y AX un nmero de 32 bits (IEEE) que est


almacenado en la dir [mem] y mem+1. En BX quedan los

Sintaxis

Descripcin
dgitos ms significativos. Ej: Supongamos que el nmero
01000010110010001000000000000000 est cargado en
memoria del siguiente modo:
02A = 0100001011001000 (Los MSBs)
02B = 1000000000000000 (Los LSBs)
Un LDF 2A dejara el siguiente resultado:

56 STF [mem]

60 ADDF [mem]

61 - SUBF [mem]
62 - MULF [mem]
63 - DIVF [mem]
64 - ITOF

65 - FTOI

80-IN registro,puerto
81-OUT

BX = 0100001011001000
AX = 1000000000000000
-------------------------Nota: Para pedirle al usuario o mostrar estos nmeros IEEE
754 en pantalla, usar puerto 1, con las instrucciones IN AX,1
y OUT 1,AX
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.
Suma nmeros de 32 bits: En BX y AX queda el resultado de
la suma de estos mas el contenido de [mem] y mem+1. Estos
nmeros IEEE 754 pueden ser de punto flotante, o enteros
desde -2147483647 hasta 2147483647 Si en cualquier
operacin aritmtica se sobrepasa este valor, se activa el
Overflow flag.
Resta un nmero de 32 bits: BX y AX = BX y AX - [mem] y
[mem+1]. Esta instruccin se puede utilizar como un CMP
para nmeros de 32 bits.
Multiplicacin: BX y AX = BX y AX * [mem]y [mem+1] Si
el resultado es > 2147483647, Resultado = 2147483647 y
Overflow Flag = 1
Divisin: BX y AX = BX y AX / [mem]y [mem+1], en CX
queda el residuo de la divisin en entero de 16 bits .
Conversin de Entero a Real: Convierte un nmero entero
(16bits) almacenado en AX al mismo nmero pero
representado en Real IEEE754(32bits), el Resultado de la
conversin queda en BX (MSBs) y AX. Los registros de
control cambian de acuerdo al nmero convertido: "Z" si el
nmero es cero, "N" si el nmero es negativo.
Conversin de Real a Entero: Convierte un nmero 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 nmero convertido: "Z" si el nmero
es cero, "N" si el nmero es negativo, "O" si el numero real
es mayor de 65535.
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).
Escribe en el puerto especificado, el valor del registro.

Sintaxis

Descripcin

puerto,registro
90 - NOP

Esta operacin no hace nada.

99 - HLT

Termina el programa. Todo programa lleva esta instruccin


para indicarle al simulador que el programa ha terminado su
ejecucin.

Nota: Generalmente las instrucciones de salto condicional 31, 33, 34 y 39 se utilizan


inmediatamente despus de usar la instruccin 32 - CMP

You might also like