Un registro de estado , registro de indicadores o registro de código de condición ( CCR ) es una colección de bits de indicadores de estado para un procesador . Algunos ejemplos de estos registros incluyen el registro FLAGS en la arquitectura x86 , los indicadores en el registro de palabras de estado de programa (PSW) en la arquitectura IBM System/360 hasta z/Architecture y el registro de estado de programa de aplicación (APSR) en la arquitectura ARM Cortex-A . [1]
El registro de estado es un registro de hardware que contiene información sobre el estado del procesador . Las instrucciones de código de máquina que se ejecutan en el procesador leen y/o escriben bits individuales de forma implícita o explícita . El registro de estado permite que una instrucción realice una acción que depende del resultado de una instrucción anterior.
Normalmente, los indicadores del registro de estado se modifican como efecto de operaciones aritméticas y de manipulación de bits. Por ejemplo, un bit Z puede establecerse si el resultado de la operación es cero y borrarse si no es cero. Otras clases de instrucciones también pueden modificar los indicadores para indicar el estado. Por ejemplo, una instrucción de cadena puede hacerlo para indicar si la instrucción finalizó porque encontró una coincidencia/discordancia o porque encontró el final de la cadena. Los indicadores son leídos por una instrucción condicional posterior de modo que la acción especificada (dependiendo del procesador, un salto, una llamada, un retorno, etc.) ocurra solo si los indicadores indican un resultado especificado de la instrucción anterior.
Algunas arquitecturas de CPU, como MIPS y Alpha , no utilizan un registro de indicadores dedicado. Otras no establecen ni leen indicadores de forma implícita. Estas máquinas no pasan información de estado implícita entre instrucciones o la pasan en un registro de propósito general seleccionado explícitamente.
Un registro de estado también puede tener otros campos, como indicadores más especializados, bits de habilitación de interrupciones y tipos de información similares. Durante una interrupción, el estado del hilo que se está ejecutando en ese momento se puede conservar (y recuperar más tarde) almacenando el valor actual del registro de estado junto con el contador del programa y otros registros activos en la pila de la máquina o en alguna otra área reservada de la memoria.
Esta es una lista de los indicadores de registro de estado de CPU más comunes, implementados en casi todos los procesadores modernos.
En algunos procesadores, el registro de estado también contiene indicadores como estos:
Los indicadores de estado permiten que una instrucción actúe en función del resultado de una instrucción anterior. En procesadores segmentados , como los procesadores superescalares y especulativos , esto puede generar peligros que ralenticen el procesamiento o requieran hardware adicional para evitarlos. [4]
Algunos procesadores de texto con instrucciones muy largas prescinden de los indicadores de estado. Una única instrucción realiza una prueba e indica en qué resultado de esa prueba se debe realizar una acción, como Comparar a con b y Saltar a c si son iguales. El resultado de la prueba no se guarda para instrucciones posteriores.
Otra alternativa al registro de estado es que las instrucciones del procesador depositen la información de estado en un registro de propósito general cuando el programa lo solicita. MIPS , AMD 29000 , DEC Alpha y RISC-V son ejemplos de arquitecturas que proporcionan instrucciones de comparación que almacenan el resultado de la comparación en un registro de propósito general, como un solo bit o un valor numérico de 0 o 1. Las ramificaciones condicionales actúan en función del valor en el registro de propósito general.
Por lo general, las instrucciones de comparación prueban la igualdad o la magnitud con signo o sin signo. Para probar otras condiciones, un programa utiliza una fórmula de equivalencia. Por ejemplo, MIPS no tiene un "bit de acarreo", pero un programa que realice una suma de varias palabras puede probar si una suma de registros de una sola palabra se desbordó al probar si la suma es menor que un operando: [4]
# alow = blow + clow addu alow , blow , clow # establecer tmp = 1 si alow < clow, de lo contrario 0 sltu tmp , alow , clow addu ahigh , bhigh , chigh addu ahigh , ahigh , tmp
La sltu
instrucción se establece tmp
en 1 o 0 según la comparación especificada de sus otros dos operandos. (Aquí, el registro de propósito general tmp
no se utiliza como registro de estado para controlar un salto condicional; en cambio, el valor posible de 1, que indica el acarreo de la adición de orden inferior, se agrega a la palabra de orden superior).
Este esquema se vuelve menos conveniente cuando se suman tres o más palabras, ya que hay dos adiciones al calcular b + c + tmp
, cualquiera de las cuales puede generar un acarreo, que debe detectarse con dos sltu
instrucciones. Afortunadamente, esos dos acarreos pueden sumarse entre sí sin riesgo de desbordamiento, por lo que la situación se estabiliza en cinco instrucciones por palabra agregada.