PUSH (Поместить) декрементирует указатель стека (регистр ESP), затем копирует операнд-источник в вершину стека (см. Рисунок 3-1). Команда PUSH часто используется для размещения в стеке параметров перед вызовом процедуры. Внутри процедуры она может быть использована для резервирования пространства в стеке под временные переменные. Команда PUSH работает с операндами, размещенными в памяти, непосредственными операндами и с регистровыми операндами (включая регистры сегмента). Специльная форма команды PUSH возможна при размещении в стеке 32-разрядного регистра общего назначения. Эта форма кодируется на один байт короче, чем команда общей формы.
+-------------------------------------------------------------+| || ПЕРЕД РАЗМЕЩЕНИЕМ ДВОЙНОГО ПОСЛЕ РАЗМЕЩЕНИЯ ДВОЙНОГО || СЛОВА СЛОВА || || 31 0 31 0 || +--------------------+ +---------------------+ || +--------------------| +---------------------| || +--------------------| +---------------------| || | |ESP +---------------------| || +--------------------| | ДВОЙНОЕ СЛОВО |ESP || +--------------------| +---------------------| || +--------------------| +---------------------| || +--------------------| +---------------------| || +--------------------| +---------------------| || +--------------------+ +---------------------+ || |+-------------------------------------------------------------+ Рисунок 3-1. Команда PUSH.
PUSHA (Разместить/поместить все регистры) сохраняет содержимое восьми регистров общего назначения в стеке (см. Рисунок 3-2). Эта команда упрощает вызовы процедур путем сокращения числа команд, необходимых для сохранения содержимого регистров общего назначения. Процессор размещает регистры общего назначения в стеке в следующем порядке : EAX, ECX, EDX, EBX, начальное значение регистра ESP перед тем, как был размещен регистр EAX, EBP, ESI И EDI. Результат выполнения команды PUSHA противоположен действию команды POPA.
POP (Восстановить (данные) из стека) передает слово или двойное слово из текущей вершины стека (на которую указывает регистр ESP) операнду назначения и затем увеличивает значение регистра ESP, чтобы тот указывал на новую вершину стека. Смотри Рисунок 3 -3. POP перемещает информацию из стека в регистр общего назначения, регистр сегмента или в память. Для передачи двойного слова из стека в регистр общего назначения используется специальная форма команды POP. Эта форма кодируется кодом, который на один байт короче, чем кодирование общей формы команды.
POPA (Восстановить (из стека) все регистры) восстанавливает из стека данные, сохраненные в нем при помощи команды PUSHA, в регистры общего назначения, за исключением регистра ESP. Значение регистра ESP восстанавливается после выполнения чтения стека (Восстановления). Смотри Рисунок 3-4.