Registro FLAGS
# Registro FLAGS

El registro FLAGS es el registro de estado en los microprocesadores Intel x86 que contiene el estado actual del procesador. Este registro es de 16 bits de ancho. Sus sucesores, los registros EFLAGS y RFLAGS, son de 32 bits y 64 bits de ancho, respectivamente. El más amplio de los registros mantiene la compatibilidad con sus predecesores más pequeños.

Los bits fijos en las posiciones de bit 1,3 y 5, y las banderas de acarreo (carry), paridad (parity), ajuste (adjust), cero (zero) y signo (sign) se heredan de una arquitectura aún anterior, la 8080.La bandera de ajuste solía denominarse bit de transporte auxiliar (auxiliary carry) en 8080 y bit de transporte (half-carry) en la arquitectura Zilog Z80.

## BANDERAS

Registro FLAGS Intel x86 :

| Bit# | Abreviatura | Descripción | Categoría |
| - | - | - | - |
| FLAGS (Banderas) ||||
| 0 | CF | Bandera de acarreo | Estado |
| 1 | | Reservado, siempre 1 en EFLAGS | |
| 2 | PF | Bandera de paridad | Estado |
| 3 | | Reservado | |
| 4 | AF | Bandera de ajuste | Estado |
| 5 | | Reservado | |
| 6 | ZF | Bandera de cero | Estado |
| 7 | SF | Bandera de signo | Estado |
| 8 | TF | Bandera de trampa (paso único) | Control |
| 9 | IF | Bandera de interrupción habilitada | Control |
| 10 | DF | Bandera de dirección | Control |
| 11 | OF | Bandera de desbordamiento | Estado |
| 12-13 | IOPL | Nivel de privilegio de E/S (Solo 286+), siempre 1 encima 8086 y 186 | Sistema |
| 14 | NT | Bandera de tarea anidada (Solo 286+), siempre 1 en 8086 y 186 | Sistema |
| 15 | | Reservado, siempre 1 en 8086 y 186, siempre 0 en modelos más recientes. | |
| EFLAGS ||||
| 16 | RF | Bandera de resumen (Solo 386+) | Sistema |
| 17 | VM | Bandera de modo Virtual 8086 (Solo 386+) | Sistema |
| 18 | AC | Control de alineación (Solo 486SX+ ) | Sistema |
| 19 | VIF | Bandera de interrupción virtual (Pentium+) | Sistema |
| 20 | VIP | Interrupción virtual pendiente (Pentium+) | Sistema |
| 21 | ID | Capaz de utilizar instrucción CPUID (Pentium+) | Sistema |
| 22 | | Reservado | |
| 23 | | Reservado | |
| 24 | | Reservado | |
| 25 | | Reservado | |
| 26 | | Reservado | |
| 27 | | Reservado | |
| 28 | | Reservado | |
| 29 | | Reservado | |
| 30 | | Reservado | |
| 31 | | Reservado | |
| RFLAGS ||||
| 32-63 | | Reservado | |

## USO

Las instrucciones POPF, POPFD, y POPFQ lee del stack, los primeros 16, 32, y 64 bits del registro de banderas, respectivamente. POPFD fue introducido con la arquitectura i386 (Intel 80386) y POPFQ con la arquitectura x64 . En el modo 64-bit, PUSHF/POPF y PUSHFQ/POPFQ están disponible pero no PUSHFD/POPFD.

El código assembler siguiente cambia la bandera de dirección (DF):

En software práctico, las instrucciones cld y stdson usadas para limpiar y configurar la bandera de dirección, respectivamente. Algunas instrucciones en lenguaje assembly utilizan el registro FLAGS. Las instrucciones de salto condicionales utilizan ciertas banderas para calcular. Por ejemplo, jz utiliza la bandera de cero, jc utiliza la bandera de acarreo y jo utiliza la bandera de desbordamiento. Otras instrucciones condicionales observan combinaciones de varias banderas.

## Determinación de tipo de procesador

Probar si ciertos bits del registro FLAGS son cambiables permite determinar qué tipo de procesador está instalado. Por ejemplo, la bandera de alineación solo puede ser cambiada en el 486 y superiores, así que si pueda ser cambiado entonces el CPU es un 486 o más alto. Estos métodos de detección de procesadores no quedaron obsoletos por la instrucción CPUID introducida con el Intel Pentium, ya que CPUID no es implementado en estas antiguas CPUs.

