Кіріспе
x86 архитектурасының жай-күй тіркелімі FLAGS тіркелімі - x86 процессордың ағымдағы жай-күйін қамтитын жай-күй тіркелімі. Байрақтың өлшемдері мен мағыналары архитектураға байланысты. Ол әдетте арифметикалық операциялардың нәтижесін және CPU-ның жұмыс істеуіне қойылатын шектеулер туралы ақпаратты көрсетеді. Бұл шектеулердің кейбіреулері "мүлік" нұсқауларының бір класын орындауды тыйым салуға әкелетін кейбір үзілістердің алдын алуды қамтиды. Қосымша күй белгілері жад картасын айналып өтіп, АЖ-ның арифметикалық ағып кетуіне қандай әрекет жасауы керектігін айқындай алады. Алып жүру, теңдік, көмекші алып жүру (немесе жартылай алып жүру), нөл және белгілер жалаушалары көптеген архитектураларға кіреді (көптеген заманауи (RISC) архитектураларында алып жүру сияқты жалаушалар жоқ, ал егер олар жалаушаларды қолданса да, жартылай алып жүру сирек кездеседі, өйткені BCD математикасы енді кең таралған емес, тіпті x86 64-те ұзақ режимде шектеулі қолдау бар). I286 архитектурасында регистрдің ені 16 бит. Оның мұрагерлері EFLAGS және RFLAGS регистрлері (қазіргі x86 64), тиісінше 32 биттік және 64 биттік ені бар. Кең регистрлер өздерінің кішігірім алдыңғыларымен үйлесімділікті сақтайды.
The FLAGS register is the status register that contains the current state of an x86 CPU. The size and meanings of the flag bits are architecture dependent. It usually reflects the result of arithmetic operations as well as information about restrictions placed on the CPU operation at the current time. Some of those restrictions may include preventing some interrupts from triggering, prohibition of execution of a class of "privileged" instructions. Additional status flags may bypass memory mapping and define what action the CPU should take on arithmetic overflow. The carry, parity, auxiliary carry (or half carry), zero and sign flags are included in many architectures (many modern (RISC) architectures do not have flags, such as carry, and even if they do use flags, then half carry is rare, since BCD math no longer common, and it even has limited support on long mode on x86 64). In the i286 architecture, the register is 16 bits wide. Its successors, the EFLAGS and RFLAGS registers (in modern x86 64), are 32 bits and 64 bits wide, respectively. The wider registers retain compatibility with their smaller predecessors.
ТҰРАҚТАР
Intel x86 FLAGS тіркелімі Бит # Маска Қысқартылған Сипаттама Категория =1 =0 FLAGS 0 0x0001 CF Carry flag Status CY (Carry) NC (No Carry) 1 0x0002 Емделді, әрқашан EFLAGS-те 1 2 0x0004 PF Parity flag Status PE (Parity Even) PO (Parity Odd) 3 0x0008 Емделді Status AC (Auxiliary Carry) NA (No Auxiliary Carry) 5 0x0020 Reserved барлық Intel процессорларында сақталған. 8086/186 әрқашан 1 , 286 және одан кейінгілерде 0 . Басқару (тек NEC) Нативті режим (((186 үйлесімді) (тек NEC) Эмуляциялық режим (((8080 үйлесімді) EFLAGS 16 0x0001 0000 RF Resume flag (386+ ғана) Жүйе 17 0x0002 0000 VM Virtual 8086 mode flag (386+ ғана) Жүйе 18 0x0004 0000 AC Alignment Check (486+, ring 3), SMAP Access Check (Broadwell+, ring 0 2) Жүйе 19 0x0008 0000 VIF Virtual interrupt flag (Pentium+) Жүйе 20 0x0010 0000 VIP Virtual interrupt pending (Pentium+) Жүйе 21 0x0020 0000 ID CPUID нұсқаулығын пайдалануға қабілетті (Pentium+) Жүйе 22 0x293 0000FC0 Rezerved 30 0x4000 0000 (жоқ) AES кілті кестесі flag loaded (((VIA Pad Lock only)) Жүйе 318 0000x00000 AI Instruction Reactivated (Broadwell+, ring 02) Жүйе 19 0x0008 0000 VIF Virtual interrupt flag (Pentium+) Жүйе 20 0x0010 0000 VIP Virtual interrupt pending (Pentium+) Жүйе 21 0x0020 0000 ID CPUID нұсқауларын пайдалануға қабілетті (Pentium+) Жүйе 22 0x0020 00000000 System System) System 22 0x29 0x00000000FC 0000 0000 ID CPUID нұсқауларын пайдалану мүмкіндігі (Pentium) Жүйе 0x00 Rezerved 30x4000 (жоқ емес) 30x4000 0000 (жоқ) AES кілті белгісі loaded flag (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
Note: The mask column in the table is the AND bitmask (as hexadecimal value) to query the flag(s) within FLAGS register value.
Қолданылуы
Барлық FLAGS регистрлерінде бір машина тілі нұсқаулығының нәтижесі басқа нұсқаулыққа әсер етуіне мүмкіндік беретін шартты кодтар, жалау биттері бар. Арифметикалық және логикалық нұсқаулар кейбір немесе барлық жалаушаларды белгілейді, ал шартты секіру нұсқаулары белгілі бір жалаушалардың мәндеріне негізделген өзгермелі әрекет жасайды. Мысалы, jz (Jump if Zero), jc (Jump if Carry) және jo (Jump if Overflow) белгілі бір жалауларға байланысты. Басқа шартты секірулер бірнеше жалаушалардың комбинацияларын сынап көреді. FLAGS регистрлерін стектен немесе стекке жылжытуға болады. Бұл процессордың контекстін сақтау және қалпына келтіру жұмысының бір бөлігі, бұзылу қызметі сияқты жүйеге қарсы, оның тіркелімдердегі өзгерістерін шақырушы код көрмесін. PUSHF және POPF нұсқаулары 16 битті FLAGS регистрін ауыстырады. PUSHFD/POPFD (i386 архитектурасымен енгізілген) 32 биттік екі регистрлі EFLAGS-ті көшіреді. PUSHFQ/POPFQ (x86 64 архитектурасымен енгізілген) 64 биттік төрт сөздік RFLAGS тіркелімін көшіреді. 64 бит режимінде PUSHF/POPF және PUSHFQ/POPFQ қол жетімді, бірақ PUSHFD/POPFD жоқ. FLAGS тіркелімінің төменгі 8 биті SAHF және LAHF-тің тікелей жүктеу / сақтау манипуляцияларына да ашық (флагтарға AH жүктеу / сақтау).
The PUSHF and POPF instructions transfer the 16 bit FLAGS register. PUSHFD/POPFD (introduced with the i386 architecture) transfer the 32 bit double register EFLAGS. PUSHFQ/POPFQ (introduced with the x86 64 architecture) transfer the 64 bit quadword register RFLAGS. In 64 bit mode, PUSHF/POPF and PUSHFQ/POPFQ are available but PUSHFD/POPFD are not. The lower 8 bits of the FLAGS register is also open to direct load/store manipulation by SAHF and LAHF (load/store AH into flags).