Articulo de referencia

Registro de BANDERAS

El registro FLAGS es el registro de estado que contiene el estado actual de una CPU x86 . El tamaño y el significado de los bits de estado dependen de la arquitectura. Generalme...

El registro FLAGS es el registro de estado que contiene el estado actual de una CPU x86 . El tamaño y el significado de los bits de estado dependen de la arquitectura. Generalmente, refleja el resultado de las operaciones aritméticas, así como información sobre las restricciones impuestas a la operación de la CPU en ese momento. Algunas de estas restricciones pueden incluir impedir que se activen ciertas interrupciones o prohibir la ejecución de una clase de instrucciones "privilegiadas". Otros indicadores de estado pueden omitir la asignación de memoria y definir la acción que la CPU debe tomar ante un desbordamiento aritmético.

Las banderas de acarreo, paridad, acarreo auxiliar (o medio acarreo ), cero y signo están incluidas en muchas arquitecturas (muchas arquitecturas modernas (RISC) no tienen banderas, como la de acarreo, e incluso si las usan, el medio acarreo es raro, ya que las matemáticas BCD ya no son comunes, e incluso tienen soporte limitado en el modo largo en x86-64 ).

En el Intel 8086 , el registro tiene un ancho de 16  bits . Sus sucesores, los registros EFLAGS y RFLAGS (en la arquitectura x86-64 moderna ), tienen un ancho de 32  y 64  bits , respectivamente. Los registros de mayor ancho conservan la compatibilidad con sus predecesores de menor ancho.

BANDERAS

  1. Los procesadores VIA Nano y posteriores VIA/Zhaoxin con soporte para PadLock ya no utilizan el bit 30 de EFLAGS. [ 8 ]

Nota: La columna de máscara en la tabla es la máscara de bits AND (como valor hexadecimal ) para consultar el/los indicador(es) dentro del valor del registro FLAGS.

Uso

Todos los registros FLAGS contienen códigos de condición , bits de bandera que permiten que el resultado de una instrucción en lenguaje máquina afecte a otra. Las instrucciones aritméticas y lógicas activan algunas o todas las banderas, y las instrucciones de salto condicional realizan acciones variables según el valor de ciertas banderas. Por ejemplo, jz(Saltar si es cero), jc(Saltar si hay acarreo) y jo(Saltar si hay desbordamiento) dependen de banderas específicas. Otros saltos condicionales prueban combinaciones de varias banderas.

Los registros FLAGS se pueden mover desde o hacia la pila. Esto forma parte del proceso de guardar y restaurar el contexto de la CPU, en el caso de rutinas como las de servicio de interrupción, cuyos cambios en los registros no deben ser visibles para el código que las llama. A continuación se muestran las instrucciones pertinentes:

  • Las instrucciones PUSHF y POPF transfieren el registro FLAGS de 16 bits.
  • Las instrucciones PUSHFD/POPFD (introducidas con la arquitectura i386 ) transfieren el registro doble de 32 bits EFLAGS.
  • PUSHFQ/POPFQ (introducidos con la arquitectura x86-64 ) transfieren el registro de cuatro palabras de 64 bits RFLAGS.

En modo de 64 bits, PUSHF/POPF y PUSHFQ/POPFQ están disponibles, pero PUSHFD/POPFD no lo están. [ 11 ] : 4–349, 4–432

Los 8 bits inferiores del registro FLAGS también están abiertos a la manipulación directa de carga/almacenamiento por parte de SAHF y LAHF (carga/almacenamiento de AH en flags).

Ejemplo

La capacidad de insertar y extraer valores de los registros FLAGS permite que un programa manipule la información en los FLAGS de maneras para las que no existen instrucciones en lenguaje máquina. Por ejemplo, las instrucciones cld` stdpush` y `set` borran y establecen el indicador de dirección (DF), respectivamente; pero no existe una instrucción que complemente a DF. Esto se puede lograr con el siguiente código ensamblador :

; Este es código 8086, con registros de 16 bits apilados, ; y el registro de indicadores es solo de 16 bits con esta CPU. pushf ; Usa la pila para transferir los INDICADORES pop ax ; … al registro AX push ax ; y cópialos de nuevo a la pila para su almacenamiento xor ax , 400h ; Alterna (invierte, 'complementa') solo el DF; los demás bits permanecen sin cambios push ax ; Usa la pila de nuevo para mover el valor modificado popf ; … al registro de INDICADORES ; Inserta aquí el código que requería que el indicador DF se complementara popf ; Restaura el valor original de los INDICADORES

Al manipular el registro FLAGS, un programa puede determinar el modelo del procesador instalado. Por ejemplo, el indicador de alineación solo se puede modificar en los procesadores 486 y superiores. Si el programa intenta modificar este indicador y detecta que la modificación no se guardó, el procesador es anterior al 486.

A partir del procesador Intel Pentium , la instrucción CPUID informa sobre el modelo del procesador. Sin embargo, el método anterior sigue siendo útil para distinguir entre modelos anteriores.

Véase también

Referencias

  1. Manual del desarrollador de software para arquitecturas Intel 64 e IA-32 (PDF) . Vol.  1. Mayo de 2012. págs. 3–21 . Archivado (PDF) del original el 6 de diciembre de 2013. Consultado el 11 de marzo de 2024 . 
  2. NEC, Manual de datos de microprocesadores de la serie V de 16 bits , 1991, págs. 429-433.
  3. Manual del desarrollador de software para arquitecturas Intel 64 e IA-32 (PDF) . Vol. 1. Dic. 2016. pág. 78. Archivado (PDF) del original el 25/05/2019 . Consultado el 07/02/2017 .  
  4. 1 2 3 "Ingeniería inversa de silicio: Las banderas no documentadas del 8085" . www.righto.com . Archivado del original el 22/10/2018 . Consultado el 21/10/2018 .
  5. Manual del desarrollador de software para arquitecturas Intel 64 e IA-32, vol. 1. Dic. 2022. págs. 3–16 . Archivado del original el 2 de junio de 2023. Consultado el 2 de febrero de 2023 . 
  6. NEC, Manual del usuario de la serie V de 16 bits. Archivado el 2 de diciembre de 2021 en Wayback Machine , documento n.º U11301E, septiembre de 2000, pág. 186.
  7. VIA, Guía de programación de candados , v1.66, 4 de agosto de 2005, págs. 7-8. Archivado del original el 26 de mayo de 2010.
  8. Brilly Wu, RE: (PARCHE) KVM: Agregar soporte para CPUID para CPU VIA , lista de correo de KVM, 21 de abril de 2011 - describe el cambio en el uso de EFLAGS[30] entre VIA C7 y VIA Nano. Archivado el 14 de marzo de 2026.
  9. Nota de aplicación del conjunto de instrucciones alternativo del procesador VIA C3 , archivada el 19/01/2024 en Wayback Machine , versión 0.24, 2002: consulte la figura 2 en la página 12 y el capítulo 4 en la página 21 para obtener detalles sobre la bandera EFLAGS.AI.
  10. "Registro rFLAGS" . sandpile.org . Consultado el 26 de febrero de 2026 .
  11. Manual del desarrollador de software para arquitecturas Intel 64 e IA-32 (PDF) . Vol. 2B. Mayo de 2012. Archivado (PDF) del original el 17 de julio de 2013. Consultado el 11 de marzo de 2024 .