Команды PUSH и POP - это основные команды для работы со стеком. Позволяют заносить значения регистров и ячеек памяти в стек и извлекать их оттуда.

 

Команда PUSH
Синтаксис: PUSH op1
Операнды: op1 - r/m16, r/m32, sr, i8, i16, i32
Назначение: Помещение операнда в стек
Процессор: 8086+
Флаги: Не изменяются
Комментарий: Команда PUSH уменьшает значение регистра стека на размер операнда (2 или 4) и копирует содержимое операнда в память по адресу SS:SP.
Начиная с 80186 процессора появилась возможность помещать в стек непосредственные значения. При этом, если в стек заносится байт, то он расширяется до слова с сохранением знака.
Начиная с 80286 процессоров, команда PUSH SP помещает в стек значение SP до того, как эта же команда его уменьшит, в то время как на 8086 значение SP помещалось в стек уже уменьшенным на два.
Если команда выполняется в 32-разрядном режиме, то используется регистр ESP.
Ограничения: Нет
Примеры:
push	dx
Команда POP
Синтаксис: POP op1
Операнды: op1 - r/m16, r/m32, sr
Назначение: Извлечение операнда из стека
Процессор: 8086+
Флаги: Не изменяются
Комментарий: Команда POP копирует содержимое ячейки памяти по адресу SS:SP в операнд и увеличивает значение регистра стека на размер операнда (2 или 4).
Если операнд использует регистр SP для косвенной адресации, команда POP вычисляет адрес уже после того, как она увеличивает SP.
Если команда выполняется в 32-разрядном режиме, то используется регистр ESP.
Ограничения: С помощью команды POP нельзя загрузить из стека сегментный регистр CS.
Примеры:
pop	[bx]