После некоторых вычислений у меня в стеке появляется определенное кол-во числел. .WHILE edx < ecx ... какие-то вычисления ... push [edi+4] add edi, 20 ... какие-то вычисления ... .ENDW Если не вдаваться в подробности, то будет примерно так. Так вот, все замечательно, но мне надо, чтобы в стеке эти переменные находились в обратном порядке (кол-во переменных я знаю). То есть что-нибудь наподобие вот этого: mov eax, кол-во shl eax, 2 ; <- eax=eax*4 sub esp, eax .WHILE ... какие-то вычисления ... mov eax, [edi+4] mov [esp], eax add esp, 4 add edi, 20 ... какие-то вычисления ... .ENDW Но такое почему-то не работает. Подскажите как надо правильно сделать.
А для чего add esp,4 ? Может ты в конце забываешь вернуть esp обратно По идее нужно использовать дополнительный индексный регистр, например ecx: Code (Text): sub esp,eax xor ecx,ecx .while ... mov [esp+ecx*4],eax inc ecx ... .endw
leo прав, все я понял суть: команда push уменьшает esp на 2 или 4, то есть если выполняется 2 push, то esp = 0 push 1 push 1 esp = -8 А у меня в результате помещений переменных в стек esp равен 0 (грубо говоря, ну вы меня поняли). Вот правильный код: mov eax,кол-во переменных shl eax,2 ; <- eax=eax*4 sub esp, eax .WHILE ... ... mov [esp], edx add esp, 4 ... .ENDW sub esp, eax Вот так работает.