2014-11-07 3 views
0

В последнее время я делал много сборочного программирования, чтобы повысить свои навыки, и я понял, что можно надавить локальную переменную на стек, например, pushl 8(%esp), однако я запутался на той части, потому что кажется, что вместо того, чтобы делать операцию в следующем порядке:Вставьте локальную переменную в стек

decrement stack pointer -> fetch value 8(%esp) -> put on stack, кажется, сделать это вместо того, чтобы

fetch value 8(%esp) -> decrement stack pointer -> put on stack, кто-то может соответствовать этому, так как я не хочу, чтобы мои будущие усилия по основываться на ложном предположении Это было сделано в компиляторе gcc! спасибо !!

+0

Это была длинная запутанная программа, с которой я попал в сети, и это поведение показалось мне странным, так как при выполнении чего-то вроде 'pushl% eax' esp сначала уменьшается, а затем выдается значение. что привело к тому, что оно последовало за первым поведением, о котором я говорил. вы хотите, чтобы я опубликовал весь код? – user3769877

+0

Я сделал это, выполнив 'pushl 8 (% esp)', как я уже упоминал, если esp уменьшается сначала, тогда значение, которое будет нажато, будет мусором (так как переменная, которую я хочу, равна 8 (% esp)), но если сначала извлекается значение, тогда переменная будет нажата – user3769877

ответ

1

Предполагая, что это код x86, да, он извлекает значение, уменьшает указатель стека, а затем помещает значение в верхнюю часть стека. Ссылка here.

+0

, это действительно x86, спасибо за разъяснение. – user3769877