Dentro
del procesador, hay un conjunto de registros que ofrecen un nivel de
memoria que es más rápido y pequeño que la memoria principal. Los
registros del procesador sirven para dos funciones:
- Registros
visibles de usuario: Un programador de lenguaje de máquina o
ensamblador puede minimizar las referencias a memoria principal
mediante un uso óptimo de estos registros. Con lenguajes de alto
nivel, un compilador que optimice código intentará hacer una
selección inteligente de qué variables asignar a registros y cuáles
a ubicaciones de la memoria principal. Algunos lenguajes de alto
nivel permiten que el programador indique al compilador qué
variables se deben almacenar en registros.
- Registros
de control y de estado:
Son utilizados por el procesador para el control de las operaciones o
por rutinas privilegiadas del sistema operativo para controlar la
ejecución de los programas.
No
hay una separación clara de los registros en estas dos categorías.
En algunas máquinas, por ejemplo, el contador de programa es visible
al usuario y, en otras, no. Sin embargo, para comprender lo
siguiente, es necesario esta división.
Registros
visibles de usuario
Un
registro visible de usuario es aquél que puede ser referenciado por
medio del lenguaje de máquina que ejecuta el procesador y es, por lo
general, accesible para todos los programas, incluyendo tanto los
programas de aplicación como los del sistema. Las clases de registro
que, normalmente, están disponibles, son los registros de datos, los
registros de dirección y los registros de códigos de condición.
Los
registros de datos pueden ser asignados por el programador a diversas
funciones. En algunos casos, son de propósito general y pueden ser
empleados por cualquier instrucción de máquina que lleve a cabo
operaciones sobre los datos. Sin embargo, suelen ponerse ciertas
restricciones a menudo. Por ejemplo, pueden existir registros dedicados
a operaciones en coma flotante.
Los
registros de dirección contienen direcciones en la memoria principal
de datos e instrucciones o una parte de la dirección que se utiliza
en el cálculo de la dirección completa. Estos registros pueden ser
de propósito general o pueden estar dedicados a un modo específico
de direccionamiento. Entre los ejemplos se incluyen:
Registro
índice: El direccionamiento indexado es un modo común de
direccionamiento que implica sumar un índice a un valor base para
obtener la dirección efectiva.
Puntero de
segmento: Con direccionamiento segmentado, la memoria se divide en
segmentos, que son bloques de palabras de tamaño variable. Una
referencia a memoria consta de una referencia a un segmento
particular y un desplazamiento dentro del segmento. En este modo, se
utiliza un registro que alberga una dirección base (ubicación
inicial) de un segmento (más adelante se explica cómo funciona).
Puntero
de pila: Si hay un direccionamiento de pila visible para los
usuarios, la pila estará, por lo general, en la memoria principal,
existiendo un registro dedicado a señalar la cima de la pila. Esto
permite el uso de instrucciones que no contienen ningún campo de
dirección, tales como push (poner) y pop (sacar).
Una
última categoría de registros que son, al menos, parcialmente
visibles para los usuarios, son aquellos que contienen códigos de
condición (también denominados indicadores o flags). Los códigos
de condición son bits activados por el hardware del procesador como
resultado de determinadas operaciones. Por ejemplo, una operación
aritmética puede producir un resultado positivo, negativo, cero o
desbordamiento. Además de almacenar el resultado de esta operación
en un registro o en memoria, también se activará un código de
condición.
En
algunas máquinas, una llamada a un procedimiento o subrutina
provocará que los registros visibles de usuario se salven
automáticamente, para luego restaurarlos al retomar. Este proceso de
salvar y restaurar lo lleva a cabo el procesador como parte de la
ejecución de las instrucciones de llamada y retomo. Esto permite que
cada procedimiento pueda usar los registros de forma independiente.
En otras máquinas, es responsabilidad del programador salvar los
contenidos de los registros de usuario visibles que sean relevantes
antes de hacer la llamada a un procedimiento, incluyendo
instrucciones en el programa con tal propósito. Así pues, las
instrucciones de salvar y restaurar pueden ser llevadas a cabo por el
hardware o por el software, dependiendo de la máquina.
Registros
de control y de estado
Varios
registros se emplean para controlar las operaciones del procesador.
En la mayoría de las máquinas, la mayor parte de estos registros no
son visibles para los usuarios. Algunos de ellos pueden estar
accesibles a las instrucciones de máquina ejecutadas en un modo de
control o modo del sistema.
Por
supuesto, máquinas diferentes tendrán organizaciones diferentes de
registros y podrán usar terminologías distintas. Algunos son:
Contador
de programa (PC, Program Counter): Contiene la dirección de la
instrucción a ser leída.
Registro
de instrucción (IR, Instruction Regíster): Contiene la última
instrucción leída.
Todos
los diseños de procesadores incluyen además un registro o conjunto
de registros, conocidos a menudo como palabra de estado del programa
(PSW, Program Status Word), que contiene información de estado.
Normalmente, la PSW contiene códigos de condición junto a otra
información de estado. Entre los campos e indicadores más comunes
se incluyen los siguientes:
Signo:
Contiene el bit del signo de la última operación aritmética
efectuada.
Cero:
Se activa cuando el resultado de una operación aritmética es cero.
Acarreo:
Se activa cuando, como resultado de una suma o una resta, se produce
un acarreo más allá del bit más significativo. Se utiliza en
operaciones aritméticas de más de una palabra.
Igualdad:
Se activa si una comparación lógica da como resultado la igualdad.
Desbordamiento:
Empleado para señalar un desbordamiento aritmético.
Habilitar/inhahilitar
interrupciónes: Empleado para habilitar o inhabilitar
interrupciones. Cuando Las interrupciones están inhabilitadas, el
procesador las ignora. Esto es muy deseable cuando el sistema
operativo está ocupado en el tratamiento de otra interrupción.
Supervisor:
Indica si el procesador está ejecutando en modo supervisor o en
modo usuarlo. Ciertas instrucciones privilegiadas sólo se pueden
ejecutar en modo supervisor y sólo se puede tener acceso a ciertas
áreas de memoria en modo supervisor.
En
el diseño de un procesador específico, se pueden encontrar una
serie de registros relacionados con el estado y el control. Además
de la PSW, puede haber un puntero a un bloque de memoria que contenga
información de estado adicional. En máquinas que utilizan varios
tipos de interrupción, se puede ofrecer una serie de registros con
punteros a cada rutina de tratamiento de interrupción. Si se utiliza
una pila para implementar ciertas funciones (por ejemplo, las
llamadas a procedimientos), entonces se necesita un puntero a la
pila.
Una
serie de factores inciden en el diseño de la organización de los
registros de control y estado. Un punto clave es el soporte del
sistema operativo. Cierto tipo de información de control es de
utilidad específica para el sistema operativo. Si el diseñador del
procesador dispone de una visión funcional del sistema operativo, la
organización de los registros puede adaptarse convenientemente.
Otra
decisión clave del diseño es la asignación de información de
control a los registros y la memoria. Es habitual dedicar los
primeros centenares o miles de palabras (las más bajas) de memoria
para el control. El diseñador debe decidir la cantidad de
información de control que debe residir en los rápidos y costosos
registros, junto a la cantidad que debe permanecer en memoria
principal, que es más lenta y barata.