Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

ФЛАГИ регистре является регистр состояния в Intel x86 микропроцессоров , который содержит текущее состояние процессора. Этот регистр имеет ширину 16 бит . Его преемники, регистры EFLAGS и RFLAGS , имеют ширину 32 и 64 бита соответственно. Более широкие регистры сохраняют совместимость со своими меньшими предшественниками.

Фиксированные биты в битовых позициях 1, 3 и 5, а также флаги переноса, четности, настройки, нуля и знака унаследованы от еще более ранней архитектуры, 8080 и 8085 . Флаг настройки раньше назывался вспомогательным битом переноса в 8080 и битом половинного переноса в архитектуре Zilog Z80 .

ФЛАГИ [ править ]

Примечание. Столбец маски в таблице представляет собой битовую маску AND (в виде шестнадцатеричного значения) для запроса флага (ов) в значении регистра FLAGS.

Использование [ править ]

Все регистры FLAGS содержат коды условий , биты флагов, которые позволяют результатам одной инструкции на машинном языке влиять на другую инструкцию. Арифметические и логические инструкции устанавливают некоторые или все флаги, а инструкции условного перехода выполняют переменное действие в зависимости от значения определенных флагов. Например, jz(Перейти, если ноль), jc(Перейти, если переносить) и jo(Перейти, если переполнение) зависят от конкретных флагов. Другие условные переходы проверяют комбинации нескольких флагов.

Регистры FLAGS можно перемещать из стека или в стек. Это часть работы по сохранению и восстановлению контекста процессора для такой процедуры, как подпрограмма обслуживания прерывания, изменения регистров которой не должны быть замечены вызывающим кодом. Вот соответствующие инструкции:

  • Команды PUSHF и POPF передают 16-битный регистр FLAGS.
  • PUSHFD / POPFD (представленные в архитектуре i386 ) передают 32-битный двойной регистр EFLAGS.
  • PUSHFQ / POPFQ (представленные в архитектуре x64 ) передают 64-битный регистр четверного слова RFLAGS.

В 64-битном режиме доступны PUSHF / POPF и PUSHFQ / POPFQ, а PUSHFD / POPFD - нет. [4] : 4–349,4–432

Младшие 8 бит регистра FLAGS также открыты для прямого управления загрузкой / сохранением с помощью SAHF и LAHF (загрузка / сохранение AH во флаги).

Пример [ править ]

Возможность вставлять и вставлять регистры FLAGS позволяет программе манипулировать информацией в FLAGS способами, для которых не существует инструкций на машинном языке. Например, cldи stdинструкции ясно , и установить флаг направления (DF), соответственно; но инструкции по дополнению DF нет. Этого можно добиться с помощью следующего ассемблерного кода :

pushf  ; Использование стека для передачи Флагов попа  топор  ; ... в регистр AX нажимаем  ax  ; и скопируйте их обратно в стек для хранения xor  ax ,  400h  ; Переключить (дополнить) только DF; остальные биты неизменны push  ax  ; Снова используйте стек, чтобы переместить измененное значение popf  ; ... в регистр ФЛАГОВ ; Вставьте сюда код, который требовал дополнения флага DF popf  ; Восстановить исходное значение ФЛАГОВ

Управляя регистром FLAGS, программа может определить модель установленного процессора. Например, флаг выравнивания можно изменить только на 486 и выше. Если программа пытается изменить этот флаг и обнаруживает, что модификация не сохраняется, это означает, что процессор более ранний, чем 486.

Начиная с Intel Pentium , инструкция CPUID сообщает о модели процессора. Однако описанный выше метод остается полезным для различения более ранних моделей.

См. Также [ править ]

  • Битовое поле
  • Контрольный регистр
  • Флаг процессора (x86)
  • Слово состояния программы
  • Регистр статуса
  • язык ассемблера x86
  • списки инструкций x86

Ссылки [ править ]

  1. ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 (PDF) . 1 . Май 2012. С. 3–21.
  2. ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 (PDF) . 1 . Декабрь 2016. с. 78.
  3. ^ a b c "Кремниевый обратный инжиниринг: недокументированные флаги 8085" . www.righto.com . Проверено 21 октября 2018 .
  4. ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 (PDF) . . Май 2012 г.