2014-02-06 2 views
0

Я знаю, что, например, push eax сохранит eax в стеке и уменьшит esp на 4. И push dword ptr означает, что ему нужно нажать 4 байта, но тогда я смущен. Кроме того, если бы это было [esi + 22], это было бы одно и то же?Что означает push dword ptr [eax + 22]?

+0

Это было быстро, благодаря Kerrek. Могу ли я спросить, правильно ли это, основываясь только на последней инструкции, читатель не знает, указывает ли он на ebp + или ebp? – Soap

+0

Извините, я не совсем понимаю вопрос - кто это? Что вы подразумеваете под «читателем»? Чтение исходного кода или проверка стека? –

+0

(И, пожалуйста, добавьте комментарий к ответу - таким образом я получаю уведомление. Я просто случайно увидел ваш комментарий на этот раз. Или добавьте маркер «@name».) –

ответ

5

push инструкция, так же, как и многие другие инструкции x86, может принимать различные операндами: непосредственные значения, регистров и адресов памяти:

push 10     ; pushes the value 10 (32 bits in 32-bit mode) 
push eax    ; pushes the contents of the 32-bit register eax 
push DWORD [ebx + 42] ; pushes 32 bits from the memory location ebx + 42 

Форма регистра выводит размер от размера регистра , Форма памяти должна иметь указанный размер (например, здесь показано в синтаксисе Intel). Для немедленных значений размер операнда равен 16 или 32 бит; текущий режим по умолчанию, а другой размер может быть явно выбран (например, push WORD 10 в 32-битном режиме).

0

push dword ptr [eax+22] уменьшит esp на 4, а затем сохранит 4 байта данных из памяти ebx + 22. и pop eax делать в обратном порядке, сначала переместите биты storeed в esp к esp + 3 к eax, и приращение esp на 4.

Смежные вопросы