русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Команды пересылки флага.


Дата добавления: 2015-06-12; просмотров: 1224; Нарушение авторских прав


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

Команды LAHF и SAHF работают с пятью флагами статуса, которые используются прежде всего арифметическими и логическими командами.

LAHF (Загрузить регистр AH из флагов) копирует флаги SF, ZF, AF, PF и CF в регистр AH, биты 7,6,4,2 и 0 соответственно (смотри Рисунок 3-21). Содержимое оставшихся битов 5,3, и 1 остается неопределенным. Содержимое регистра EFLAGS остается неизменным.

SAHF (Сохранить значения регистра AH во флагах) копирует биты 7,6,4,2, и 0 во флаги SF, ZF, AF, PF и CF соответственно (смотри Рисунок 3-21).

Kоманды PUSHF и POPF не только рекомендуется использовать для запоминания значения флагов в памяти, где они могут быть проверены и изменены, но также рекомендуется использовать для сохранения состояния регистра EFLAGS при выполнении подпрограмм.

+--------------------------------------------------------------+| || 7 6 5 4 3 2 1 0 || +---------------+ || |S|Z|0|A|0|P|1|C| || |F|F| |F| |F| |F| || +---------------+ || || БИТОВЫЕ ПОЗИЦИИ ФЛАГОВ ТЕ ЖЕ САМЫЕ, ЧТО И ИХ ПОЗИЦИИ В РЕ- || ГИСТРЕ EFLAGS ИЛИ В РЕГИСТРЕ AH. БИТОВЫЕ ПОЗИЦИИ, ПОКАЗАН- || НЫЕ КАК 0 ИЛИ 1, ЯВЛЯЮТСЯ ПОЗИЦИЯМИ, ЗАРЕЗЕРВИРОВАННЫМИ || КОМПАНИЕЙ INTEL (R). ЭТИ ПОЗИЦИИ ИСПОЛЬЗОВАТЬ ЗАПРЕЩЕНО. || |+--------------------------------------------------------------+ Рисунок 3-21. Младший байт регистра EFLAGS.

PUSHF (Сохранить флаги) сохраняет младшее слово регистра EFLAGS в стеке (смотри Рисунок 3-22). Команда PUSHFD сохраняет целиком регистр EFLAGS в стеке (тем не менее флаг RF читается как очищенный).



POPF (Восстановить флаги из стека) восстанавливает слово из стека в регистр EFLAGS. При всех использованиях этой команды изменяются значения только битов 14,11,10,8,7,6,4,2 и 0. Если уровень привилегированности данного программного сегмента равен 0 (самый привилегированный), биты IOPL (13 и 12) также изменяются. Если уровень привилегий Ввода/Вывода (IOPL) равен 0, то изменяется также флаг IF (бит 9). Команда POPFD восстанавливает двойное слово из стека в регистр EFLAGS, и она может изменять состояние флага AС (бит 18) так же, как и всех битов, изменяемых по команде POPF.

+-----------------------------------------------------------------+| || PUSHFD/POPFD || |<----------------------------------------------------------->| || || PUSHF/POPF || |<----------------------------------------------------------->| || 31 15 0 || +-------------------------------------------------------------+ || | | | | | | | | | | | | | | | | | | |I| | | | | | | | | | | | | || | | | | | | | | | | | | | |A|N|R| |N|O|O|D|I|T|S|Z| |A| |P| |C| || |0|0|0|0|0|0|0|0|0|0|0|0|0|C|M|F|0|T|P|F|F|F|F|F|F|0|F|0|F|1|F| || | | | | | | | | | | | | | | | | | | |L| | | | | | | | | | | | | || +-------------------------------------------------------------+ || || БИТОВЫЕ ПОЗИЦИИ, ПОМЕЧЕННЫЕ 0 ИЛИ 1, ЗАРЕЗЕРВИРОВАНЫ КОМПАНИЕЙ || INTEL (R). ИСПОЛЬЗОВАНИЕ ПОЗИЦИЙ ЗАПРЕЩЕНО. || |+-----------------------------------------------------------------+ Рисунок 3-22. Флаги, используемые командами PUSHF и POPF


<== предыдущая лекция | следующая лекция ==>
Команды для языков с блочной структурой | Команды работы указатель на данные


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.234 сек.