5.6 Registros de la CPU
Para poder hacer estas cosas, es obvio que la CPU necesita almacenar algunos datos temporalmente. Debe recordar la posición de la última instrucción de forma que sepa dónde ir a buscar la siguiente. Necesita almacenar instrucciones y datos temporalmente mientras una instrucción está siendo ejecutada. En otras palabras, la CPU necesita una pequeña memoria interna. En la estructura interna de la CPU se indican los caminos de transferencia de datos y de control lógico, que incluyen un elemento con el rótulo bus interno de la CPU. Este elemento es necesario para transferir datos entre los diversos registros y la ALU, ya que ésta en realidad sólo opera con datos de la memoria interna de la CPU. La figura muestra también los elementos básicos típicos de la ALU. Dentro de la CPU hay una memoria interna compuesta por un conjunto de registros. Los registros de la CPU son:
-
Registros visibles al usuario:
Permiten al programador de lenguaje de máquina
o ensamblador minimizar las referencias a memoria
principal optimizando el uso de los registros.
- Registros de control: Son utilizados por la unidad
de control para controlar el funcionamiento de la CPU y por programas privilegiados
del sistema para controlar la ejecución de programas.
- Registro de estado: Se utiliza para tomar decisiones en función
de operaciones realizadas.
- Registro puntero a pila.
Registros visibles al usuario
Un registro visible al usuario es aquél que puede ser referenciado por medio del lenguaje máquina que ejecuta la CPU. Prácticamente todos los diseños contemporáneos de CPUs están provistos de varios registros visibles al usuario, en oposición a disponer de un único acumulador.
Podemos
clasificarlos en:
- Uso General
- Datos
- Direcciones
- Códigos de Condición
Los registros de uso general pueden ser asignados por el programador
a diversas funciones. A veces, su uso dentro del repertorio de instrucciones
es para contener el operando para cualquier código de operación.
Esto proporciona una utilización de registros de auténtico uso
general. Con frecuencia, sin embargo, existen restricciones. Por ejemplo, puede
haber registros específicos para operaciones en coma flotante. En algunos
casos los registros de uso general pueden ser utilizados para funciones de direccionamiento.
En otros casos hay una separación clara o parcial entre registros de
datos y registros de direcciones.
Los registros de datos pueden ser usados únicamente para contener datos
y no se pueden emplear en el cálculo de una dirección de operando.
Los registros de dirección pueden ser en sí registros de uso más
o menos general, o pueden estar dedicados a un modo de direccionamiento particular.
El caso más conocido es el puntero a pila. La cantidad de registros generales
o especializados es una cuestión de diseño. No hay solución
óptima, pero la tendencia parece ir hacia el uso de registros especializados.
Otro problema de diseño es el numero de registros, de uso general o de
datos más direcciones, que tienen que incluirse.
A mayor cantidad de registros
se requieren mayor cantidad de bits en el campo de operando.
Parece óptimo entre 8 y 32 registros. Menos registros se traducen en
más referencias a memoria; más registros no reducen notablemente
las referencias a memoria. Por último, está la cuestión
de la longitud de los registros. Los registros que han de contener direcciones
han de ser lo suficientemente grandes como para albergar la dirección
más grande. Los registros de datos deben ser capaces de contener valores
de la mayoría de tipos de datos. Algunas máquinas permiten que
los registros contiguos sean usados como uno para contener valores de doble
longitud. Una categoría final de registros, que es al menos parcialmente
visible al usuario, contiene códigos de condición (también
llamados indicadores o flags).
Los códigos de condición son bits
fijados por el hardware de la CPU como resultado
de alguna operación. Por ejemplo, una operación
aritmética puede producir un resultado positivo, negativo o nulo,
o con desbordamiento. Además de almacenarse el propio resultado en un
registro o en la memoria, se obtiene también un código de condición.
El código puede ser examinado con posterioridad como parte de una condición
de bifurcación condicional.
Los bits de códigos de condición se reúnen en uno o más
registros. Por lo general, forman parte de un registro de control. Comúnmente,
las instrucciones de máquina permiten que estos bits sean leídos
por referencia implícita, pero no pueden ser alterados por el programador.
En algunas máquinas, una llamada a subrutina
dará lugar a la salvaguarda automática de todos los registros
visibles al usuario, que serán restablecidos en el retorno de la subrutina.
La CPU lleva a cabo la salvaguarda y restablecimiento como parte
de la ejecución de las instrucciones de llamada y retorno, respectivamente.
Esto permite a cada subrutina usar independientemente los registros visibles
al usuario. En otras máquinas, es responsabilidad del programador guardar
los contenidos de los registros visibles al programador relevantes antes de
la llamada a subrutina, teniendo que incluir en el programa instrucciones para
este fin.
Registros de control
Hay diversos registros de la CPU que se pueden emplear para controlar su funcionamiento. La mayoría de éstos, en la mayor parte de las máquinas, no son visibles al usuario. Algunos de ellos pueden ser visibles a instrucciones de máquina ejecutadas en un modo de control o de sistema operativo. Naturalmente, máquinas diferentes tendrán diferentes organizaciones de registros y usará distinta terminología. Se enumera aquí una lista razonablemente completa de tipos de registros, con una breve descripción. Son esenciales cuatro registros para la ejecución de una instrucción: el contador de programa , el registro de dirección, el registro de instrucción y el registro de datos. El contador de programa contiene una dirección de instrucción. Típicamente, la CPU actualiza el PC después de cada captación de instrucción de manera que siempre apunta a la siguiente instrucción a ejecutar. Una instrucción de bifurcación o salto también modificará el contenido de PC. La instrucción captada se carga en el registro de instrucción, donde son analizados el código de operación y los campos de operando. Se intercambian datos con la memoria por medio de registro de direcciones y el de datos. En un sistema con organización de bus, el de direcciones se conecta directamente al bus de direcciones, y el de datos directamente al bus de datos. Los registros visibles al usuario, sucesivamente, intercambian datos con el de datos. Los cuatro registros que acaban de mencionar se usan para la transferencia de datos entre la CPU y la memoria. Dentro de la CPU, los datos tienen que ofrecerse a la ALU para su procesamiento. La ALU puede tener acceso directo al de datos y a los registros visibles al usuario. Como alternativa, puede haber registros intermedios adicionales en el límite de la ALU; estos registros sirven como registros de entrada y salida de la ALU e intercambian datos con el de datos y los registros visibles al usuario.
Todos los diseños de CPUs incluyen un registro o un conjunto de registros, conocidos a menudo como palabra de estado de programa "programa status word", PSW), que contiene información de estado. La PSW contiene típicamente códigos de condición además de otra información de estado. Entre los campos comunes o indicadores se incluyen los expresados en la tabla.
Bit
de estado |
Nombre |
Descripción |
C |
Acarreo |
Puesto
a uno si una operación da lugar a un acarreo (suma) o adeudo (resta)
de un bit de orden superior. |
P |
Paridad |
Paridad
del resultado de una operación aritmética o lógica.
Un 1 indica paridad par y el 0 paridad impar. |
Z
|
Cero |
Puesto
a uno cuando el resultado de una operación aritmética o
lógica es cero. |
S |
Signo |
Contiene
el bit de signo del resultado de la última operación aritmética. |
O |
Desbordamiento |
Usado
para indicar un desbordamiento aritmético. |
I |
Interrupción |
Usado
para habilitar o inhabilitar interrupciones |
El registro puntero a pila permite almacenar la dirección de acceso a la memoria pila. Veremos su funcionamiento al tratar las subrutinas.