 |
::
Меню :: |
 |
|
|
 |
::
Друзі :: |
 |
|
|
 |
::
Лічильники :: |
 |
|
|
|
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 завантажується із стека
-
|
 |
::
Наша кнопка :: |
 |
|
 |
Отримати код:
|
Підтримайте наш сайт і розмістіть нашу
кнопку на своєму ресурсі. |
|
|
 |
::
Популярне :: |
 |
|
|
 |
:: Посилання :: |
 |
|
|
|