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


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 ;в обратном порядке

Пример 2


push DS ;Пересылка DS через стек

pop ES ;Теперь ES=DS

Допустима засылка в стек 32-битовых операндов (регистров и ячеек памяти), а также занесение в стек 8-, 16- и 32-битовых непосредственных значений. Каждое 8-битовое значение занимает в стеке целое слово. Операнды любого допустимого размера могут заноситься з стек вперемежку', если это не вступает в противоречие с операциями по извлечению этих данных из стека.

Пример 1


push AX ; Сохранение в стеке регистра АХ

push 32h ;Сохранение в стеке

;константы 32h (она займет в

;стеке 1 слово)

push EAX ;Сохранение в стеке регистра

;ЕАХ (два слова стека)

386+ PUSHA Сохранение в стеке всех регистров


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




Начало  Назад  Вперед



Книжный магазин