Хотя и существуют специальные команды для изменения флагов 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.