на начало
На главную страницу
Форум   

Статья :: POP Извлечение слова из стека

 

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

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

Пример 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 ;Восстановление из стека в память

Допустимо использование 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

 

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 загружается из стека

 

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

страницы в данном разделе 
Приложение. Система команд процессоров Intel Система команд процессоров Intel
ААА ASCII-коррекция регистра АХ после сложения ADC Целочисленное сложение с переносом
386+ BSF Прямое сканирование битов 386+ BTR Проверка и сброс бита
CLC Сброс флага переноса СМР Сравнение
486+ CMPXCHG Сравнение и обмен DAA Десятичная коррекция в регистре AL после сложения
HLT Останов INS Ввод строки из порта
INT Программное прерывание MP Безусловный переход
386+ LEAVE Выход из процедуры высокого уровня 386Р+ LGDT Загрузка регистра таблицы глобальных дескрипторов
LOCK Запирание шины 386+ LODSD Загрузка двойного слова из строки
386Р+ LTR Загрузка регистра задачи TR MOVS Пересылка данных из строки в строку
MUL Умножение целых чисел без знака OUTS Вывод строки в порт
POP Извлечение слова из стека PUSH Занесение операнда в стек
RCR Циклический сдвиг вправо через бит переноса RET Возврат из процедуры
ROL Циклический сдвиг влево SBB Целочисленное вычитание с займом
386+ SETcc Установка байта по условию 386P+ SIDT Сохранение в памяти содержимого регистра таблицы дескрипторов прерываний
STI Установка флага прерывания 386P+ STR Сохранение содержимого регистра состояния задачи
486+ XADD Обмен и сложение >  


Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)



PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C



 
© faq.pp.ru, справочник программиста