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.

Registro de estado

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

Registro puntero a pila

El registro puntero a pila permite almacenar la dirección de acceso a la memoria pila. Veremos su funcionamiento al tratar las subrutinas.