|
Ушел с форума
16381 / 7693 / 1080
Регистрация: 11.11.2010
Сообщений: 13,779
|
||||||||||||||||
| 15.11.2013, 04:52 [ТС] | ||||||||||||||||
|
ГЛАВА 13 64/32-разрядный регистр RFLAGS/EFLAGS содержит некоторые флаги состояния и управления процессором, а также некоторые системные флаги (см. рисунок). После инициализации процессора, регистр флагов содержит значение 00000002h, его биты 1, 3, 5, 15 и от 22 до 31 зарезервированы и программы не должны их использовать.ПЕРЕХОДЫ И ЦИКЛЫ (часть 5/5) Регистр RFLAGS/EFLAGS Некоторые флаги регистра EFLAGS можно изменять непосредственно, при помощи специальных команд (они описаны ниже). Для загрузки значений флагов в регистр EFLAGS и считывания из него предназначены команды LAHF, SAHF, PUSHF, PUSHFD, POPF и POPFD. Значение любого флага всегда можно проверить, для этого нужно сохранить содержимое регистра EFLAGS в стек, затем извлечь его в регистр общего назначения и проверить командами TEST или BT. Изменить значения флагов можно путём загрузки его через стек из регистра общего назначения, но некоторые флаги таким образом изменить нельзя (например, двухбитовое поле IOPL в защищённом режиме). Регистр EFLAGS автоматически сохраняется процессором в стек при дальних вызовах и восстанавливается из него при дальних возвратах; при переключении задач процессор сохраняет содержимое EFLAGS в TSS старой задачи и загружает значение из TSS новой. До появления 32-разрядного процессора i386, регистр флагов был 16-разрядным и назывался FLAGS. Младшие 16 разрядов регистра EFLAGS, для совместимости со старыми программами, полностью аналогичны регистру FLAGS i8086, 8 младших разрядов которого, в свою очередь, аналогичны регистру FLAGS i8080. Регистр EFLAGS представляет собой набор флагов, устанавливаемых или сбрасываемых по результатам выполняемых команд. Флаг – это переменная длиной 1 бит, используемая в командах условного перехода. Если значение этой переменной равно 1, то считается, что флаг установлен, если 0 – сброшен. Флаги встречаются не только в регистре EFLAGS, в IA32 есть много регистров, целиком или частично состоящих из флагов – регистры управления, отладки, тестирования, MSR и так далее, поэтому термины «сброс» и «установка» флага употребляются везде, где идёт речь об изменении флагов. Формат регистра флагов EFLAGS Флаги состояния отображают результаты целочисленных арифметических операций (ADD, SUB, MUL и пр.), этими флагами являются биты 0, 2, 4, 6, 7 и 11 регистра EFLAGS (флаги CF, PF, AF, ZF, SF, OF).Флаги состояния и флаг направления DF Флаг переноса (CF – Carry flag). Устанавливается, если арифметическая операция приводит к переносу или займу в/из старшего разряда, таким образом, этот флаг показывает условие переполнения при выполнении арифметических операций. Также, этот флаг используется некоторыми командами сдвига – именно в него выдвигается «лишний» бит. Флаг CF наиболее удобно использовать при ветвлении программы, потому что, с одной стороны, множество команд взаимодействует с этим флагом, с другой стороны, простые команды условного перехода JC и JNC обеспечивают быстрый и компактный способ условной передачи управления. Флаг чётности (PF – Parity flag). Устанавливается, если младший байт результата команды содержит чётное число бит, иначе – сбрасывается. Вспомогательный флаг переноса (AF – Auxiliary carry Flag). Устанавливается, если арифметическая операция производит перенос из 3-го бита в 4-й бит в результате сложения, или при займе из 4-го бита в 3-й в результате вычитания, в остальных случаях сбрасывается. Этот флаг используется командами работающими с BCD-числами (AAA, AAS, AAD, AAM, DAA, DAS). Флаг нуля (ZF – Zero flag). Устанавливается, если результат операции – нуль, иначе – сбрасывается. Флаг знака (SF – Sign flag). Всегда равен значению старшего бита результата, который интерпретируется как знаковый в некоторых арифметических операциях (0 – число положительное /1 – отрицательное). Флаг переполнения (OF – Overflow flag). Устанавливается, если знаковый результат операции не соответствует беззнаковому. Из всех флагов состояния только флаг CF можно менять непосредственно командами STC, CLC и CMC. Также флаг CF используют команды BT, BTS, BTR, BTC сохраняя в него результат. Флаги состояния используются командами арифметики трех типов – знаковой, беззнаковой и BCD:
Флаг направления (DF – Direct flag) управляет командами строковой обработки (MOVS, CMPS, SCAS, LODS и STOS). Если DF сброшен, то строки обрабатываются в направлении от младших адресов к старшим; если DF установлен – обработка в обратном направлении (от старших адресов к младшим). Флаг явно изменяется командами STD и CLD. Системные флаги и поле IOPL Эти флаги предназначены для использования на системном уровне и подразумевается, что прикладные программы не должны менять их значения (а в защищённом режиме – не могут).Флаг разрешения прерываний (IF – Interrupt enable flag). Управляет реакцией процессора на маскируемые аппаратные прерывания – если установлен, то в ответ на IRQ процессор генерирует прерывания, если сброшен – процессор не отвечает на них (но не игнорирует). Флаг ловушки (TF – Trap flag). Если установлен, то процессор использует покомандную отладку текущей программы; если сброшен – программа выполняется обычным образом. Поле привилегий для ввода/вывода (IOPL – In/Out Privilege Level field). Содержит для текущей задачи уровень привилегий для операций ввода/вывода. Текущий уровень привилегий (CPL – current privilege level) текущей задачи или программы должен быть численно меньше или равен значению в поле IOPL, для того, чтобы были возможны операции ввода/вывода. Это поле может меняться только командами POPF/POPFD и IRET и только на нулевом уровне привилегий. Флаг вложенности задачи (NT – Nested Task flag). Устанавливается процессором, когда происходит переход из одной задачи в другую командой CALL или аппаратным прерыванием и показывает, что текущая задача либо является вызванной из предыдущей (флаг NT=1), либо нет (NT=0). Флаг возобновления (RF – Resume flag). Управляет ответом процессора на исключение отладки. Флаг режима виртуального процессора 8086 (VM – Virtual-8086 Mode flag). Когда устанавливается, процессор переходит в режим виртуального 8086, когда сбрасывается – возвращается в защищённый режим. Флаг проверки выравнивания (AC – Alignment Check flag). Установка этого флага вместе с установленным флагом AM в CR0 заставляют процессор проверять выравнивание при доступе к памяти и в случае невыравненного доступа генерировать исключение. Флаг виртуальных прерываний (VIF – Virtual Interrupt flag). Это виртуальный образ флага IF, используется совместно с флагом VIP при включённом расширении режима виртуального 8086. Флаг ожидания виртуального прерывания (VIP – Virtual Interrupt Pending flag). Устанавливается, когда возникает прерывание. Процессором только считывается и используется совместно с флагом VIF; изменяется только программно. Флаг идентификации (ID – Identification flag). Если программа смогла установить или сбросить этот флаг, то это значит, что процессор может выполнять команду CPUID. Контрольные вопросы и упражнения
0
|
||||||||||||||||
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|