Регистр флагов

Регистр флагов или слово состояния процессора (ССП) — специализированный регистр, отражающий текущее состояние процессора.

Архитектура x86

В микропроцессорах Intel 8086 имеет название FLAGS и является 16-разрядным. Расширенные регистры EFLAGS и RFLAGS, введённые в архитектурах IA-32 (процессоры 80386) и x86-64, являются 32-битными и 64-битными соответственно. Расширенные регистры сохраняют обратную совместимость.

Регистр флагов содержит группу флагов состояния, управляющий флаг и группу системных флагов[1]:

Регистр флагов Intel x86
Бит, № Обозначение Название Описание Тип флага Когда введён
FLAGS
0 CF Carry Flag Флаг переноса Состояние
1 1 Зарезервирован
2 PF Parity Flag Флаг чётности Состояние
3 0 Зарезервирован
4 AF Auxiliary Carry Flag Вспомогательный флаг переноса Состояние
5 0 Зарезервирован
6 ZF Zero Flag Флаг нуля Состояние
7 SF Sign Flag Флаг знака Состояние
8 TF Trap Flag Флаг трассировки (пошаговое выполнение) Системный
9 IF Interrupt Enable Flag Флаг разрешения прерываний Системный
10 DF Direction Flag Флаг направления Управляющий
11 OF Overflow Flag Флаг переполнения Состояние
12 IOPL I/O Privilege Level Уровень приоритета ввода-вывода Системный 80286
13
14 NT Nested Task Флаг вложенности задач Системный 80286
15 0 Зарезервирован
EFLAGS
16 RF Resume Flag Флаг возобновления Системный 80386
17 VM Virtual-8086 Mode Режим виртуального процессора 8086 Системный 80386
18 AC Alignment Check Проверка выравнивания Системный 80486SX
19 VIF Virtual Interrupt Flag Виртуальный флаг разрешения прерывания Системный Pentium
20 VIP Virtual Interrupt Pending Ожидающее виртуальное прерывание Системный Pentium
21 ID ID Flag Проверка на доступность инструкции CPUID Системный Поздние 80486[2]
22 0 Зарезервированы
31
RFLAGS
32 0 Зарезервированы
63

Значение некоторых флагов в регистре флагов можно изменять напрямую, с помощью специальных инструкций (например, CLD для сброса флага направления), но нет инструкций, которые позволяют обратиться (проверить или изменить) к регистру флагов как к обычному регистру. Однако, можно сохранять регистр флагов в стек или регистр (E)AX и восстанавливать регистр флагов из них с помощью инструкций LAHF, SAHF, PUSHF, PUSHFD, POPF и POPFD.

При приостановке задачи (используя многозадачные возможности процессора), процессор автоматически сохраняет значение флага регистров в TSS (task state segment), при активизации новой задачи процессор загружает регистр флагов из TSS новой задачи.

Когда активизируется обработчик прерывания или обработчик исключительной ситуации, процессор автоматически сохраняет значение регистра флагов в текущем стеке.

Флаги состояния в активном состоянии

Флаги состояния (биты 0, 2, 4, 6, 7 и 11) отражают результат выполнения арифметических инструкций, таких как ADD, SUB, MUL, DIV.

  • PF — устанавливается, если младший значащий байт результата содержит чётное число единичных (ненулевых) битов. Изначально этот флаг был ориентирован на использование в коммуникационных программах: при передаче данных по линиям связи для контроля мог также передаваться бит чётности (см., например: RS-232#Принцип работы) и инструкции для проверки флага чётности облегчали проверку целостности данных.
  • AF — устанавливается при переносе или заёме из бита 4 результата. Этот флаг ориентирован на использование в двоично-десятичной (binary coded decimal, BCD) арифметике.
  • ZF — устанавливается, если результат машинной операции по модулю 2 в степени k (где k — разрядность ячейки) равен нулю.
  • SF — равен значению старшего значащего бита результата, который является знаковым битом в знаковой арифметике.
  • OF — устанавливается, если целочисленный результат слишком длинный для размещения в целевом операнде (регистре или ячейке памяти). Этот флаг показывает наличие переполнения в знаковой целочисленной арифметике (в дополнительном коде).

Из перечисленных флагов только флаг CF можно изменять напрямую с помощью инструкций STC, CLC и CMC. Также, битовые инструкции (BT, BTS, BTR и BTC) копируют указанный бит во флаг CF.

Флаги состояния позволяют одной и той же арифметической инструкции выдавать результат трёх различных типов: беззнаковое, знаковое и двоично-десятично кодированное (BCD) целое число. Если результат считать беззнаковым числом, то флаг CF показывает условие переполнения (перенос или заём), для знакового результата (в дополнительном коде) перенос или заём показывает флаг OF, а для BCD-результата перенос/заём показывает флаг AF. Флаг SF отражает знак знакового результата, флаг ZF отражает и беззнаковый, и знаковый нулевой результат.

В длинной целочисленной арифметике флаг CF используется совместно с инструкциями сложения с переносом (ADC) и вычитания с заёмом (SBB) для распространения переноса или заёма из одного вычисляемого разряда длинного числа в другой.

Инструкции условного перехода Jcc (переход по условию cc — например, JNZ для перехода, если результат не ноль), SETcc (установить значение байта-результата в зависимости от условия cc), LOOPcc (организация цикла) и CMOVcc (условное копирование) используют один или несколько флагов состояния для проверки условия. Например, инструкция перехода JLE (jump if less or equal — переход, если «меньше или равен», ≤) проверяет условие «ZF=1 или SF ≠ OF».

Флаг PF был введён для совместимости с другими микропроцессорными архитектурами и по прямому назначению используется редко. Более распространено его использование совместно с остальными флагами состояния в арифметике с плавающей запятой[3]: инструкции сравнения (FCOM, FCOMP и т. п.) в математическом сопроцессоре устанавливают в нём флаги-условия C0, C1, C2 и C3 и эти флаги можно скопировать в регистр флагов. Для этого рекомендуется использовать инструкцию FSTSW AX для сохранения слова состояния сопроцессора в регистре AX и инструкцию SAHF для последующего копирования содержимого регистра AH в младшие 8 битов регистра флагов[4], при этом C0 попадает во флаг CF, C2 — в PF, а C3 — в ZF. Флаг C2 устанавливается, например, в случае несравнимых аргументов (NaN или неподдерживаемый формат) в инструкции сравнения FUCOM.

Управляющий флаг

Флаг направления (DF, бит 10 в регистре флагов) управляет строковыми инструкциями (MOVS, CMPS, SCAS, LODS и STOS): установка флага заставляет уменьшать адреса (обрабатывать строки от старших адресов к младшим), обнуление заставляет адреса увеличивать. Инструкции STD и CLD соответственно устанавливают и обнуляют флаг DF.

Системные флаги и поле IOPL

Системные флаги и поле IOPL управляют операционной средой и не предназначены для использования в прикладных программах.

  • IF — обнуление этого флага запрещает отвечать на маскируемые запросы на прерывание.
  • TF — установка этого флага разрешает пошаговый режим отладки, когда после каждой выполненной инструкции происходит прерывание программы и вызов специального обработчика прерывания (см. также: Int3).
  • IOPL — показывает уровень приоритета ввода-вывода исполняемой программы или задачи: чтобы программа или задача могла выполнять инструкции ввода-вывода или менять флаг IF, её текущий уровень приоритета (CPL) должен быть ≤ IOPL.
  • NT — этот флаг устанавливается, когда текущая задача «вложена» в другую, прерванную задачу, и сегмент состояния TSS текущей задачи обеспечивает обратную связь с TSS предыдущей задачи. Флаг NT проверяется инструкцией IRET для определения типа возврата — межзадачного или внутризадачного.
  • RF — флаг маскирования ошибок отладки.
  • AC — установка этого флага вместо с битом AM в регистре CR0 включает контроль выравнивания операндов при обращениях к памяти — обращение к невыравненному операнду вызывает исключительную ситуацию.
  • VIF — виртуальная копия флага IF; используется совместно с флагом VIP.
  • VIP — устанавливается для указания наличия отложенного прерывания; используется совместно с флагом VIF.
  • ID — возможность программно изменить этот флаг в регистре флагов указывает на поддержку инструкции CPUID.[2]

Идентификация процессора

В поздних версиях процессора 80486 появилась инструкция CPUID, позволяющая идентифицировать процессор, на котором работает программа. В более ранних процессорах для идентификации нужно анализировать особенности поведения инструкций и, в том числе, регистра флагов.

К примеру, в процессорах 8086 и 80186 биты 12-15 регистра флагов всегда установлены, в процессорах 80286 и новее биты 12-14 содержат поле IOPL и флаг NT и в реальном режиме всегда сброшены. Это позволяет в 16-битном коде различать процессоры 808x/8018x, 80286 и 80386 (и новее):

Также, флаг AC (бит 18), введённый в 80486, всегда сброшен в 80386, что и позволяет различить эти процессоры:

Аналогично, в старых моделях 80486, где инструкция CPUID ещё не введена, флаг ID (бит 21) всегда сброшен, что позволяет идентифицировать процессоры 80386 и старые модели 80486:

См. также

Примечания

  1. 3.4.3. EFLAGS Register // The IA-32 Intel Architecture Software Developer’s Manual. — Intel, 2004. — Т. 1: Basic Architecture. Order number: 253665-013
  2. 1 2 Инструкция CPUID была добавлена в поздних версиях процессора 80486 и процессоре Pentium. См.: CPUID — CPU Identification // The IA-32 Intel Architecture Software Developer’s Manual. — Intel, 2004. — Т. 2A: Instruction Set Reference, A-M. Order number: 253666-013
  3. 8.1.3. Branching and Conditional Moves on Condition Codes // The IA-32 Intel Architecture Software Developer’s Manual. — Intel, 2004. — Т. 1: Basic Architecture. Order number: 253665-013
  4. В архитектуре P6 были введены инструкции FCOMI, FCOMIP и т. п., которые в результате сравнения устанавливают флаги в регистре флагов напрямую. Ранее это было невозможно, поскольку сопроцессор реализовывался отдельной микросхемой, и только начиная с 80486DX сопроцессор начали встраивать в процессор.

Read other articles:

DawinNama lahirDawin PolancoLahir12 Desember 1990 (umur 33)Brooklyn, New YorkGenreHip hoptrapR&BPekerjaanPenyanyipencipta lagupenyanyi rapproduser laguInstrumenVokal, gitar, piano, basTahun aktif2014–sekarangLabelRepublic RecordsCasablanca Records Dawin Polanco, dikenal dengan nama panggung Dawin (lahir 12 Desember 1990), adalah seorang penyanyi dan produser lagu asal Brooklyn, New York.[1][2] Ia dikenal dalam penampilannya dalam lagu Dessert miliknya bersama penyan...

 

Государственный гимн Узбекской Советской Социалистической РеспубликиЎзбекистон Совет Социалистик Республикасининг давлат мадҳияси Автор слов Тураб Тула и Темур Фаттах Композитор Мута́ль Бурха́нов Страна Узбекская ССР Утверждён 1947 год Отменён 31 августа 1991 года Флаг ...

 

Синелобый амазон Научная классификация Домен:ЭукариотыЦарство:ЖивотныеПодцарство:ЭуметазоиБез ранга:Двусторонне-симметричныеБез ранга:ВторичноротыеТип:ХордовыеПодтип:ПозвоночныеИнфратип:ЧелюстноротыеНадкласс:ЧетвероногиеКлада:АмниотыКлада:ЗавропсидыКласс:Пт�...

System on a chip (SoC) designed by Apple Inc. Apple A5Apple A5 (S5L8940 version) chipGeneral informationLaunchedMarch 11, 2011DiscontinuedOctober 4, 2016Designed byApple Inc.Common manufacturer(s)Samsung ElectronicsProduct codeS5L8940X (A5)S5L8942X (A5R2)S5L8947X (A5R3)PerformanceMax. CPU clock rate800 MHz to 1 GHzCacheL1 cache32 KB instruction + 32 KB data[1]L2 cache1 MB[1]Architecture and classificationApplicationMobileTechnology node45 nm ...

 

San Francisco Bay damming project Proposed barriers in the San Francisco Bay The Reber Plan was a late 1940s plan to fill in parts of the San Francisco Bay. It was designed and advocated by John Reber—an actor and theatrical producer.[1] San Francisco Bay Project Under the plan, which was also known as the San Francisco Bay Project, the mouth of the Sacramento River (from Suisun Bay) would be channelized by dams and would feed two vast freshwater lakes within the bay, providing drin...

 

Santa Cruz de la Zarzacomune Santa Cruz de la Zarza – Veduta LocalizzazioneStato Spagna Comunità autonoma Castiglia-La Mancia Provincia Toledo TerritorioCoordinate39°58′36.12″N 3°11′26.88″W / 39.9767°N 3.1908°W39.9767; -3.1908 (Santa Cruz de la Zarza)Coordinate: 39°58′36.12″N 3°11′26.88″W / 39.9767°N 3.1908°W39.9767; -3.1908 (Santa Cruz de la Zarza) Altitudine790 m s.l.m. Superficie264,54 km² Abitanti4...

この項目には、一部のコンピュータや閲覧ソフトで表示できない文字が含まれています(詳細)。 数字の大字(だいじ)は、漢数字の一種。通常用いる単純な字形の漢数字(小字)の代わりに同じ音の別の漢字を用いるものである。 概要 壱万円日本銀行券(「壱」が大字) 弐千円日本銀行券(「弐」が大字) 漢数字には「一」「二」「三」と続く小字と、「壱」「�...

 

Sant'Alberto degli AbatiSant'Alberto dipinto nel XVIII secolo Religioso  NascitaTrapani, 1240 MorteMessina, 7 agosto 1307 Venerato daChiesa cattolica Canonizzazione15 ottobre 1457 da papa Callisto III Santuario principaleChiesa dei Carmelitani di Trapani Ricorrenza7 agosto Attributigiglio, libro delle Sacre Scritture, lucerna accesa, abito dell'ordine del Carmelo Patrono diTrapani Manuale Alberto degli Abati, o Alberto di Trapani'[1] (Trapani, 1240 – Messina, 7 agosto 1307...

 

此条目序言章节没有充分总结全文内容要点。 (2019年3月21日)请考虑扩充序言,清晰概述条目所有重點。请在条目的讨论页讨论此问题。 哈萨克斯坦總統哈薩克總統旗現任Қасым-Жомарт Кемелұлы Тоқаев卡瑟姆若马尔特·托卡耶夫自2019年3月20日在任任期7年首任努尔苏丹·纳扎尔巴耶夫设立1990年4月24日(哈薩克蘇維埃社會主義共和國總統) 哈萨克斯坦 哈萨克斯坦政府...

Palestina (merah); kedutaan besar dan/atau konsulat (hijau); misi semi-diplomatik dan tidak resmi (hijau muda). Negara Palestina memiliki jaringan misi diplomatik di seluruh dunia, terutama di Afrika, Asia, Eropa Timur, Amerika Latin, dan Timur Tengah. Namun, karena ketegangan yang sedang berlangsung dengan Israel sebagai bagian dari konflik Arab-Israel, ruang lingkup jaringan diplomatik Palestina relatif terbatas di dunia yang berpihak Barat/Barat, dengan banyak dari negara-negara ini hanya ...

 

Series of custom Nike Air Max 97 shoes Promotional image of the Satan Shoes Satan Shoes were a series of custom Nike Air Max 97 shoes, created in 2021 as a collaboration between American musician Lil Nas X and MSCHF, a Brooklyn, New York art collective. Their design and marketing gained controversy through prominent satanic imagery. Nike, Inc. sued MSCHF for trademark infringement, false designation of origin, trademark dilution, and unfair competition. A settlement was reached in July 2021 w...

 

                                            الثقافة الأعلام والتراجم الجغرافيا التاريخ الرياضيات العلوم المجتمع التقانات الطيران الأديان فهرس البوابات [تعديل]  كريكيت الكريكت (بالإنجليزية: Cricket)‏ رياضة جماعية يلعبها فريقان، في�...

Former province of Japan Map of the former Japanese provinces with Iwashiro highlighted Iwashiro Province (岩代国, Iwashiro-no kuni) is an old province in the area of Fukushima Prefecture.[1] It was sometimes called Ganshū (岩州). The province occupies the western half of the central part of Fukushima Prefecture; the eastern half is Iwaki Province. More precisely, Date and Adachi districts in the north belong to Iwashiro and Higashishirakawa and Nishishirakawa districts in the s...

 

German philologist (1929–2022) You can help expand this article with text translated from the corresponding article in German. (December 2012) Click [show] for important translation instructions. View a machine-translated version of the German article. Machine translation, like DeepL or Google Translate, is a useful starting point for translations, but translators must revise errors as necessary and confirm that the translation is accurate, rather than simply copy-pasting machine-trans...

 

Disambiguazione – Se stai cercando l'omonimo quartiere di Varsavia, vedi Bielany (Varsavia). Questa voce o sezione sull'argomento centri abitati della Polonia non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Segui i suggerimenti del progetto di riferimento. Warszawa, BielanycomuneWarszawa, Bielany – Veduta LocalizzazioneStato Polonia Voivodato...

Dominican basketball player This biography of a living person needs additional citations for verification. Please help by adding reliable sources. Contentious material about living persons that is unsourced or poorly sourced must be removed immediately from the article and its talk page, especially if potentially libelous.Find sources: Gelvis Solano – news · newspapers · books · scholar · JSTOR (May 2022) (Learn how and when to remove this message) Gel...

 

1941 book by Herbert Marcuse Reason and Revolution: Hegel and the Rise of Social Theory Cover of the first editionAuthorHerbert MarcuseLanguageEnglishSubjectsGeorg Wilhelm Friedrich HegelKarl MarxPublisherOxford University PressPublication date1941Publication placeUnited StatesMedia typePrint (Hardcover and Paperback)Pages431 (1970 Beacon Press edition)ISBN0-8070-1557-1 Part of a series on theFrankfurt School Major works Dialectic of Enlightenment Eclipse of Reason Eros and Civilization ...

 

Type of constituency at the Hong Kong legislative assembly This article is about a political group in Hong Kong. For other uses, see Functional constituency (disambiguation). Politics and government of Hong Kong Laws Basic Law Drafting Committee Consultative Committee Article 23 (national security laws) 2020 law 2024 law Article 45 Article 46 Article 69 One country, two systems Sino–British Joint Declaration Criminal law Capital punishment in Hong Kong Criminal procedure Jury system Law enf...

Jean-Baptiste Teste (20 October 1780, in Bagnols-sur-Cèze, Gard – 20 April 1852, in Chaillot, now in Paris) was a French politician of the July Monarchy. He fell from grace in the Teste-Cubières scandal. Life Early life The son of Antoine Teste, lawyer to the Parliament of Provence, and of his wife Élisabeth Boyer, Jean-Baptiste Teste studied under the Joséphites in Lyon. He distinguished himself early in his education, according to Joseph Marie Portalis, in the Demosthenic forms of hi...

 

Dov'èsingolo discograficoScreenshot tratto dal video del branoArtistaLe Vibrazioni Pubblicazione5 febbraio 2020 Durata3:03 GenerePop rock[1] EtichettaArtist First ProduttoreMatteo Cantaluppi Registrazione2020 CertificazioniDischi d'oro Italia[2](vendite: 35 000+) Le Vibrazioni - cronologiaSingolo precedenteL'amore mi fa male(2019)Singolo successivoPer fare l'amore(2020) Dov'è è un singolo del gruppo musicale italiano Le Vibrazioni, pubblicato il 5 febbraio 20...