Иллюстрированный самоучитель по Assembler

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 не воздействует на флаги процессора.

Пара команд pushpop часто используется для пересылки данного из регистра в регистр (особенно, в сегментный) через стек.

Пример 1:

push ES:mem; Сохранение содержимого
push DS; слова памяти mem из
push BP; дополнительного сегмента
;а также регистров DS и ВР
…;
pop PP; Восстановление из стека
pop DS; трех операндов
pop ES: mem; в обратном порядке
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.