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