Registre de BANDERES

De la Viquipèdia, l'enciclopèdia lliure
Genersació del bit CARRY : exemple senzill d'unitat lògica aritmètica (ALU) que fa AND, OR, XOR i suma.


El registre FLAGS és el registre d'estat que conté l'estat actual d'una CPU x86. La mida i el significat dels bits de bandera depenen de l'arquitectura. Normalment reflecteix el resultat de les operacions aritmètiques, així com informació sobre les restriccions imposades a l'operació de la CPU en el moment actual. Algunes d'aquestes restriccions poden incloure la prparellció de l'activació d'algunes interrupcions, la prohibició d'execució d'una classe d'instruccions "privilegiades". Els indicadors d'estat addicionals poden evitar el mapeig de memòria i definir quina acció hauria de fer la CPU en cas de desbordament aritmètic.

Les banderes de transport, paritat, transport auxiliar (o mig transport), zero i signe s'inclouen en moltes arquitectures.

A l'arquitectura i286, el registre és 16 bits amples. Els seus successors, els registres EFLAGS i RFLAGS, són 32 bits i 64 bits d'ample, respectivament. Els registres més amplis mantenen la compatibilitat amb els seus predecessors més petits.

Banderes[modifica]

Exemple dels microprocessadors x86 d'Intel:

Intel x86 FLAGS registre[1]
Bit # Màscara Abrebiacií Descripció Categoria =1 =0
FLAGS
0 0x0001 CF Carry flag Status CY(Carry) NC(No Carry)
1 0x0002 Reservat, sempre 1 a EFLAGS [2][3]
2 0x0004 PF Paritat flag Status PE(Paritat parell) PO(Paritat senar)
3 0x0008 Reservat[3]
4 0x0010 AF Auxiliary Carry flag[4] Status AC(Auxiliary Carry) NA(No Auxiliary Carry)
5 0x0020 Reservat[3]
6 0x0040 ZF Zero flag Status ZR(Zero) NZ(Not Zero)
7 0x0080 SF Sign flag Status NG(Negative) PL(Positive)
8 0x0100 TF Trap flag (single step) Control
9 0x0200 IF Interrupt habilita flag Control EI(habilita Interrupt) DI(deshabilita Interrupt)
10 0x0400 DF Direction flag Control DN(Down) UP(Up)
11 0x0800 OF Overflow flag Status OV(Overflow) NV(Not Overflow)
12-13 0x3000 IOPL I/O privilege level (286+ only),

sempre tot-1s a 8086 i 186

Sistema
14 0x4000 NT Nested task flag (286+ only),

sempre 1 a 8086 i 186

Sistema
15 0x8000 MD Mode flag (NEC V-series only),

reservat en tots Intel CPUs. sempre 1 a 8086/186, 0 a 286 i later.

Control (NEC only)

Native Mode (186 compatible)

(NEC only)

Emulation Mode (8080 compatible)

Ús[modifica]

Tots els registres FLAGS contenen els codis de condició, bits de bandera que permeten que els resultats d'una instrucció en llenguatge màquina afectin una altra instrucció. Les instruccions aritmètiques i lògiques estableixen algunes o totes les marques, i les instruccions de salt condicionals prenen accions variables en funció del valor de determinades marques. Per exemple, jz (Saltar si es desborda), jc (Saltar si es porta) i jo (Saltar si es desborda) depenen de banderes específiques. Altres salts condicionals proveen combinacions de diverses banderes.

Els registres FLAGS es poden moure des o cap a la pila. Això forma part de la tasca d'estalviar i restaurar el context de la CPU, en contra d'una rutina com ara una rutina de servei d'interrupció els canvis dels registres no haurien de ser vists pel codi de trucada. Aquí teniu les instruccions pertinents:

  • Les instruccions PUSHF i POPF transfereixen el registre FLAGS de 16 bits.
  • PUSHFD/POPFD (introduït amb l'arquitectura i386) transfereix el registre doble EFLAGS de 32 bits.
  • PUSHFQ/POPFQ (introduït amb l'arquitectura x64) transfereix el registre RFLAGS de quadword de 64 bits.

En mode de 64 bits, PUSHF/POPF i PUSHFQ/POPFQ estan disponibles, però PUSHFD/POPFD no.[5]

:4-349,4-432

Els 8 bits inferiors del registre FLAGS també estan oberts a la manipulació directa de càrrega/emmagatzematge per part de SAHF i LAHF (carrega/emmagatzema AH en banderes).

Referències[modifica]

  1. Intel 64 and IA-32 Architectures Software Developer's Manual (en anglès). 1, maig 2012, p. 3–21. 
  2. Intel 64 and IA-32 Architectures Software Developer’s Manual (en anglès). 1, Dec 2016, p. 78. 
  3. 3,0 3,1 3,2 «Silicon reverse engineering: The 8085's undocumented flags» (en anglès). www.righto.com. [Consulta: 21 octubre 2018].
  4. Intel 64 and IA-32 Architectures Software Developer’s Manual, Vol. 1 (en anglès), Dec 2022, p. 3-16. 
  5. Intel 64 and IA-32 Architectures Software Developer’s Manual (en anglès). 2B, maig 2012.