Simulador del Procesador Básico. Manual en línea


por Germán Fabregat, noviembre de 2002.
fabregat@icc.uji.es
Aquí tienes una versión en texto llano.


Índice
  1. Introducción
  2. Descripción del Procesador Básico
  3. Conjunto de instrucciones
    1. Instrucciones de transferencia de constantes
    2. Instrucciones de ALU
    3. Instrucciones de salto
    4. Instrucciones de entrada/salida
    5. Instrucciones de acceso indirecto
    6. Instrucciones especiales y de control
  4. Gestión de las excepciones
  5. Dispositivos de entrada/salida
    1. Barra de LEDS
    2. Display numérico
    3. Teclado hexadecimal

1. INTRODUCCIÓN

El Procesador Básico (PB) ha sido concebido como una máquina sencilla para el aprendizaje del funcionamiento de un computador en los primeros cursos de Ingeniería Informática, Ingeniería Técnica en Informática de Gestión e Ingeniería Técnica en Informática de Sistemas de la Universitat Jaume I.
El simulador del PB ha sido desarrollado en SmallTalk en el excelente entorno VisualWorks (http://www.cincom.com), e implementa el propio PB, una memoria de datos de 32 posiciones y una de instrucciones de 128 (en la imagen distribuida), así como diversos dispositivos de entrada y salida.
El sistema se distribuye como una imagen (pb.im) para ser ejecutada sobre la máquina virtual SmallTalk incluida en el entorno VisualWorks, constituyendo una aplicación independiente.




2. DESCRIPCIÓN DEL PROCESADOR BÁSICO

El PB es una máquina simple pensada para comprender fácilmente los principios del funcionamiento de los computadores. Sus principales características son:
Los registros internos del PB son:


3. CONJUNTO DE INSTRUCCIONES

Las instrucciones se codifican mediante un mnemónico seguido de hasta tres operandos, que se separan por comas. Los operandos que impliquen direcciones de memoria de datos serán de la forma d0, d1, d30 etcétera; los que indiquen direcciones de memoria de instrucciones o constantes, serán exclusivamente un número en base 10.
Las instrucciones del PB se dividen en los siguientes tipos:
A continuación se describen estos tipos y las instrucciones propias de cada uno de ellos.

3.1. Instrucciones de transferencia de constantes.

Son instrucciones con dos operandos: una posición de memoria destino y una constante fuente. Sirven para cargar constantes en posiciones de memoria. Se justifican porque no existe un registro fijo a cero como en la mayor parte de procesadores RISC, por lo que sin ellas cualquier carga de constantes requeriría de dos intrucciones para verificarse.
Solo existe una instrucción en este grupo:

3.2. Instrucciones de ALU.

Estas instrucciones realizan transformación de los datos mediante operaciones clásicas de ALU y algunas algo más complejas. Todas ellas tienen tres operandos, de los cuales el más próximo al mnemónico es el destino y los otros dos fuentes.
Se dividen en dos grandes grupos:

A. Operaciones con valores inmediatos (constantes).
El segundo operando fuente es una constante. Hay dos intrucciones de este grupo:
B. Operaciones sobre memoria.
Los tres operandos residen en memoria. Hay cinco operaciones de este grupo. Las dos primeras son básicas:
y las tres restantes son más complejas -no cabrían en una ALU tradicional de una máquina simple:
Estas dos últimas, divide y módulo, pueden generar una excepción de división por cero.

3.3. Instrucciones de salto.

Se incluyen en este grupo todas las instrucciones de control del flujo del programa. Todas las direcciones de destino son absolutas y, en la mayor parte de los casos, se especifican mediante constantes. Se distinguen dos grupos principales, saltos y gestión de subrutinas.

A. Instrucciones de salto
Salvo la instruccion de salto incondicional, que sólo indica destino, tienen tres operandos. Dos de ellos residen en memoria y son valores sobre los que se realiza una comparación -especificada en el mnemónico- para determinar si el salto es o no efectivo. El tercer operando es la dirección absoluta de destino. El salto se realiza, lógicamente, modificando el valor del contador de programa (CP).Hay 5 instrucciones de este tipo, aunque dos son equivalentes:

B. Instrucciones de gestión de subrutinas
Se trata de dos instrucciones que permiten relaizar la llamada y retorno de subrutinas. Se comentan por separado.
La instrucción copia en la posición de memoria indicada la dirección de la instrucción siguiente, es decir, la dirección de retorno. A continuación salta a la dirección destino. La instrucción permite volver a una dirección destino guardada en una posición de memoria mediante una llamada a subrutina. Como en realidad se trata de un salto indirecto a memoria, permite también hacer otras cosas interesantes como almacenar tablas de direcciones de funciones, etcétera.

3.4. Instrucciones de entrada/salida.

Se incluyen dos instrucciones básicas para trabajar con la E/S. En realidad sólo transfieren datos entre los dispositivos externos -los disponibles en el simulador se describirán más adelante- y la memoria. Son instrucciones con dos operandos, donde uno indica la dirección del dispositivo y otro la ubicación del dato. Existen dos instrucciones de este tipo:

3.5. Instrucciones de acceso indirecto.

Estas instrucciones permiten la transferencia de datos entre posiciones de memoria, con la particularidad de que una de las direcciones se expresa mediante el modo indirecto a memoria. Esto permite trabajar con vectores, matrices, punteros, etcétera. Son instrucciones de dos operandos, de las cuales existen dos:

3.6. Instrucciones especiales y de control.

Aquí se agrupan todas las instrucciones que tienen influencia en el comportamiento del procesador. Hay tres instrucciones en este grupo, que se describen a continuación. El procesador básico, como todo procesador, está ejecutando instrucciones constantemente. La instrucción fin detiene el funcionamiento del procesador, que no vuelve a ponerse en marcha hasta que es resetado. Estra instrucciones permiten habilitar o deshabilitar las interrupciones en modo avanzado. En modo básico no hacen nada.


4.GESTIÓN DE LAS EXCEPCIONES

En el modo avanzado se tratan tres excepciones vectorizadas, sin contar el reset que tendría vector 0: La primera excepción no es enmascarable, y es generada por las instrucciones divide y modulo. Las otras dos (interrupciones externas) se habilitan y deshabilitan globalmente mediante las instrucciones intsi e intno.
La interrupción de usuario se activa mediante el botón a tal efecto de la interfaz, mientras que la periódica se activa cada cierto número de instrucciones, 23 en la versión actual.
El tratamiento de las excepciones es simple:
  1. Se deshabilitan las interrupciones.
  2. Se guarda el PC en d31.
  3. Se copia el vector correspondiente en el PC.
Las excepciones se verifican al acabar la cuarta fase de ejecución, y su prioridad es Divpor0 > Usuario > temporizador.
No existe retorno de excepción; simplemente se debe utilizar el retorno de subrutina, con d31 como fuente.


5. DISPOSITIVOS DE ENTRADA/SALIDA

Existen dos dispositivos de salida y uno de entrada. A continucación se describen:

5.1. Barra de LEDS



Ocupa la dirección 0 del mapa de E/S. El valor escrito, entre 0 y 255, se representa en binario mediante los leds.


5.2. Display numérico



Ocupa las direcciones 1, 2 y 3 del mapa de E/S.
En la dirección 1 está el puerto de control, que sirve para seleccionar individualmente el display de 7 segmentos activo (0, 1, 2 ó 3). Las escrituras posteriores a los puertos 2 ó 3 afectarán a este display.
En la dirección 2 tenemos el puerto de acceso a los segmentos. Al escribir un valor entre 0 y 127 se activarán los segmentos correspondientes a los 1 del valor en binario. El segmento G es el de mayor peso, el A el de menor.




En la dirección 3 tenemos el puerto de acceso en hexadecimal. Al escribir un valor entre 0 y 15 aparecerá la cifra decimal correspondiente en el display.


5.3. Teclado hexadecimal



Ocupa el puerto 4 del mapa de E/S. Tal vez su funcionamiento cambie en el futuro para hacerlo más real. De momento, al realizar una lectura del dispositivo se devuelve el valor hexadecimal de la última tecla pulsada desde la lectura anterior (0 a 15), o 255 si no se ha pulsado ninguna.