P
POPF Восстановление из стека регистра флагов
Команда popf пересылает верхнее слово стека (на которое указывает регистр SP) в регистр флагов FLAGS. После этого содержимое SP увеличивается на 2, и SP указывает на предыдущее слово стека, которое теперь является его новой вершиной. Команда popf не имеет параметров; она воздействует на все флаги процессора, кроме флагов VM и RF.
Пример 1:
popf; Регистр флагов загружается из стека
Пример 2:
pushf; Отправим флаги в стек mov BP,SP; Настроим ВР на флаги в стеке or [BP],100h; Установим бит 100h (флаг TF) popf; Вытолкнем в регистр флагов. ;Теперь в регистре флагов TF=1
386+ POPFD Восстановление из стека расширенного регистра флагов
Команда popfd пересылает верхнее слово стека (на которое указывает регистр ESP) в расширенный регистр флагов EFLAGS. После этого содержимое ESP увеличивается на 4, и ESP указывает на предыдущее слово стека, которое теперь является его новой вершиной. Команда popfd не имеет параметров; она воздействует на все флаги процессора.
Пример:
popfd; Регистр EFLGS загружается из стека
PUSH Занесение операнда в стек
Команда push уменьшает на 2 содержимое указателя стека SP и заносит на эту новую вершину двухбайтовый операнд-источник (проталкивает в стек новое данное). Проталкивать в стек можно только целые слова (не байты). Программа должна строго следить за тем, чтобы каждой команде проталкивания в стек push отвечала обратная команда выталкивания из стека pop. Если стек используется для временного хранения некоторых данных, то извлекать эти данные из стека следует в порядке, обратном их сохранению.
В качестве операнда-источника может использоваться любой 16-разрядный регистр (включая сегментный) или ячейка памяти. Не допускается занесение в стек непосредственного значения, хотя некоторые трансляторы преобразуют команду вида:
push 1234h
В неэффективную последовательность операций со стеком, результатом которой будет проталкивание указанного операнда в стек. Команда push не воздействует на флаги процессора.
Пара команд push – pop часто используется для пересылки данного из регистра в регистр (особенно, в сегментный) через стек.
Пример 1:
push ES:mem; Сохранение содержимого push DS; слова памяти mem из push BP; дополнительного сегмента ;а также регистров DS и ВР …; pop PP; Восстановление из стека pop DS; трех операндов pop ES: mem; в обратном порядке