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

P

POP Извлечение слова из стека

Команда pop выталкивает 16-битовое данное из стека, т.е. пересылает слово из вершины стека (на которую указывает регистр SP) по адресу операнда-приемника. После этого содержимое SP увеличивается на 2, и SP указывает на предыдущее слово стека, которое теперь является его новой вершиной. Выталкивать из стека можно только целые слова (не байты). Программа должна строго следить за тем, чтобы каждой команде проталкивания в стек push отвечала обратная команда выталкивания из стека pop. Если стек используется для временного хранения некоторых данных, то извлекать эти данные из стека следует в порядке, обратном их сохранению.

В качестве операнда-приемника можно использовать любой 16-разрядный регистр (кроме CS) или ячейку памяти. Команда не воздействует на флаги процессора.

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

Пример 1:

push AX; Временное сохранение
push BX; в стеке
push DS; трех операндов
pop DS; Восстановление из стека
pop BX; трех операндов
pop AX; в обратном порядке

Пример 2:

push CS; Пересылка CS через стек
pop DS; Теперь DS=CS

Пример 3:

;В полях данных
mem dw 0
; В программном сегменте
pop mem; Восстановление из стека в память

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › P Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров.

Пример:

pop EAX; Извлечение из стека двойного слова

386+ РОРА Восстановление из стека всех регистров

Команда рора восстанавливает из стека содержимое всех регистров, предварительно сохраненных в стеке командой pusha. Заполнение из стека регистров осуществляется в следующем порядке: DI, SI, BP, SP, ВХ, DX, СХ, АХ. Исходное содержимое указателя стека SP, сохраненное в стеке командой pusha, командой рора из стека извлекается, но отбрасывается. Команда не имеет параметров.

Пример:

рора

386+ POPAD Восстановление из стека всех регистров в 32-разрядном режиме

Команда popad восстанавливает из стека содержимое всех расширенных регистров, предварительно сохраненных в стеке командой pushad. Заполнение из стека регистров осуществляется в следующем порядке: EDI, ESI, EBP, ESP, ЕВХ, EDX, ЕСХ, ЕАХ. Исходное содержимое указателя стека ESP, сохраненное в стеке командой pusha, командой рора из стека извлекается, но отбрасывается. Команда не имеет параметров.

Пример:

popad
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.