这两行之间的区别是什么?
push eax
mov [esp], eax
它不将eax推送到堆栈上(esp指向的位置,就像mov [esp],eax一样)?
"push" 命令会自动将 "esp"(堆栈指针)的值增加。而 "mov" 并不会这样做。因此,如果你想在栈上放置多个元素,使用 push
,只需执行以下操作:
push eax
push ebx
...
使用mov
,为了获得相同的结果,你需要:
sub esp,4
mov [esp], eax
sub esp,4
mov [esp], ebx
...
而 push 的好处是有相反的操作,也就是pop
,能够以相反的顺序把事物取回。这正是堆栈的全部意义 :)
sub esp, 4
和 mov dword ptr ss:[esp],2E
而不是 PUSH 2E
(6A2E,2字节 vs 10字节)?我在我的程序中看到它发生了,不确定是否有任何目的我没有注意到。 - Zacklinesub esp, 4
等情况下,sub esp, 4
会“保留”栈空间,然后随后的mov
会使用那个空间。 - lurker