Registro de estado
Un registro de estado, un registro de bandera o un registro de código de condición (CCR) es una colección de registros de estado. bits de bandera para un procesador. Ejemplos de dichos registros incluyen el registro FLAGS en la arquitectura x86, los indicadores en el registro de palabra de estado del programa (PSW) en la arquitectura IBM System/360 a través de z/Architecture y el registro de estado del programa de aplicación (APSR) en la arquitectura ARM Cortex-A..
El registro de estado es un registro de hardware que contiene información sobre el estado del procesador. Los bits individuales son leídos y/o escritos implícita o explícitamente por las instrucciones del código de máquina que se ejecutan en el procesador. El registro de estado permite que una instrucción tome medidas dependiendo del resultado de una instrucción anterior.
Normalmente, los indicadores en el registro de estado se modifican como efecto de operaciones aritméticas y de manipulación de bits. Por ejemplo, se puede establecer un bit Z si el resultado de la operación es cero y borrarse si es distinto de cero. Otras clases de instrucciones también pueden modificar las banderas para indicar el estado. Por ejemplo, una instrucción de cadena puede hacerlo para indicar si la instrucción terminó porque encontró una coincidencia/no coincidencia o porque encontró el final de la cadena. Las banderas son leídas 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 las banderas indican un resultado específico de la instrucción anterior.
Algunas arquitecturas de CPU, como MIPS y Alpha, no utilizan un registro de bandera dedicado. Otros no establecen ni leen indicadores implícitamente. Estas máquinas no pasan información de estado implícita entre instrucciones en absoluto, o la pasan en un registro de propósito general seleccionado explícitamente.
Un registro de estado a menudo también puede tener otros campos, como indicadores más especializados, bits de habilitación de interrupción y tipos similares de información. Durante una interrupción, el estado del hilo que se está ejecutando actualmente se puede preservar (y luego recuperar) 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 memoria.
Banderas comunes
Esta es una lista de los indicadores de registro de estado de CPU más comunes, implementados en casi todos los procesadores modernos.
Bandera | Nombre | Descripción |
---|---|---|
Z | bandera cero | Indica que el resultado de una operación aritmética o lógica (o, a veces, una carga) fue cero. |
C | Carry flag | Permite que los números más grandes que una sola palabra sean agregados/sutractados por llevar un dígito binario de una palabra menos significativa a la menor parte significativa de una palabra más significativa según sea necesario. También se utiliza para extender los cambios de bits y rota de manera similar en muchos procesadores (a veces se hace a través de un dedicado X bandera). |
S / N | Sign flag Bandera negativa | Indica que el resultado de una operación matemática es negativo. En algunos procesadores, las banderas N y S son distintas con diferentes significados y uso: Se indica si el último resultado fue negativo mientras que el otro indica si se ha producido una resta o adición. |
V / O / W | Overflow flag | Indica que el resultado firmado de una operación es demasiado grande para encajar en el ancho de registro utilizando la representación de dos complementos. |
Otras banderas
En algunos procesadores, el registro de estado también contiene indicadores como estos:
Bandera | Nombre | Descripción |
---|---|---|
H / A / DC | Bandera de medio coche Bandera auxiliar Digit Carry Bandera de ajuste decimal | Indica que se produjo un poco de carga entre los nibbles (típicamente entre las mitades de 4 bits de un byte operand) como resultado de la última operación aritmética. Tal bandera es generalmente útil para implementar operaciones aritméticas de BCD en hardware binario. |
P | Parity flag | Indica si el número de bits del último resultado es extraño o incluso. |
I | Bandera interrumpida | En algunos procesadores, este bit indica si las interrupciones están activadas o enmascaradas. Si el procesador tiene múltiples niveles de prioridad de interrupción, como el PDP-11, se pueden utilizar varios bits para indicar la prioridad del hilo actual, lo que le permite ser interrumpido sólo por hardware fijado a una prioridad superior. En otras arquitecturas, un poco puede indicar que una interrupción es actualmente activa, y que el hilo actual es parte de un manipulador interrumpido. |
S | Supervisor flag | En los procesadores que proporcionan dos o más anillos de protección, uno o más bits en el registro de estado indican el anillo del hilo actual (cuán confiable es, o si debe utilizar el sistema operativo para solicitudes que podrían obstaculizar otros hilos). En un procesador con sólo dos anillos, un solo bit puede distinguir Supervisor del modo Usuario. |
Arquitecturas de CPU sin indicadores aritméticos
Los indicadores de estado permiten que una instrucción actúe según el resultado de una instrucción anterior. En los procesadores canalizados, como los procesadores superescalares y especulativos, esto puede crear peligros que ralentizan el procesamiento o requieren hardware adicional para solucionarlos.
Algunos procesadores de texto con instrucciones muy largas prescinden de las banderas 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 es igual. El resultado de la prueba no se guarda para instrucciones posteriores.
Otra alternativa al registro de estado es que las instrucciones del procesador depositen información de estado en un registro de propósito general cuando el programa lo solicite. 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 ramas condicionales actúan en función de el valor en el registro de propósito general.
Por lo general, las instrucciones de comparación prueban la igualdad o la magnitud con/sin signo. Para probar otras condiciones, un programa utiliza una fórmula de equivalencia. Por ejemplo, MIPS no tiene "bit de acarreo" pero un programa que realiza una suma de varias palabras puede comprobar si una suma de registros de una sola palabra se desbordó comprobando si la suma es inferior a un operando:
# alow = blow + clowaddualow, soplado, clow # set tmp = 1 if alow ♪sltutmp, alow, clowaddualto, bhigh, altoaddualto, alto, tmp
La instrucción sltu
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; más bien, el posible valor de 1, que indica el acarreo de la suma de orden inferior, se agrega al palabra de orden superior.)
Este esquema se vuelve menos conveniente al agregar tres o más palabras, ya que hay dos sumas al calcular b + c + tmp
, cualquiera de las cuales puede generar un acarreo, que debe detectarse con dos < instrucciones code>sltu. Afortunadamente, esos dos acarreos se pueden agregar entre sí sin riesgo de desbordamiento, por lo que la situación se estabiliza en cinco instrucciones por palabra agregada.
Contenido relacionado
Tarjeta perforada
CPython
Arquitectura Harvard