ИНСТРУКЦИЯ push
Помещает данные в стек.
Помещает данные в стек.
|
|
СИНТАКСИС
| |
push reg
con,reg
|
|
АРГУМЕНТЫ
| |
reg — регистры общего назначения или константа.
|
|
ОПИСАНИЕ
| |
Данная инструкция используется для помещения в вершину стека значений, хранящихся в регистрах общего назначения EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI или констант, предворяемых символом '$'. В основном, она используется при выполнении операций вызова подпрограммы и передачи ей аргументов или возвращения результата работы функции (подпрограммы).
Для архитектуры x86-32 разрядность регистров стека EBP и ESP устанавливается согласно конфигурации по-умолчанию, соответственно 32 разряда, поэтому push в исходном коде ассемблера следует писать 'pushl'.
B архитектуре x86-64 инструкция push манипулирует с 64-х разрядным стеком. Таким образом, push в исходном коде ассемблера следует писать как 'pushq'. В тоже время, 32-х и 16-ти разрадные операции со стеком в данной архитектуре запрещены.
Пример взят с www.x86-64.org
При использовании в GCC экспериментальной 16-ти разрядной поддержки (только для x86 архитектуре) наряду с указанием в коде ассемблера директив .code16 или .code16gcc, устанавливаемой обычно опцией компилятора --code16gcc, следует писать как 'pushw'. При этом, если используется .code16gcc нужно помнить, что в отличии от .code16 'pusha' и 'pushf' имеют размерность 32 разряда.
| |
Взамен инструкции push обычно пользуются одной последовательностью, состоящей из двух инструкций – sub и mov, как это показано ниже.
Пример взят с www.scs.stanford.edu
|