【发布时间】:2015-01-03 22:49:09
【问题描述】:
最近我一直在做很多汇编编程来提高我的技能,我开始意识到可以像这样pushl 8(%esp) 将局部变量推送到堆栈上但是,我对此感到困惑,因为它似乎不是按以下顺序进行操作:
decrement stack pointer -> fetch value 8(%esp) -> put on stack,它似乎改为这样做
fetch value 8(%esp) -> decrement stack pointer -> put on stack,有人能遵守吗,因为我不希望我未来的努力建立在错误的假设之上
这是在 gcc 编译器上完成的!
谢谢!!
【问题讨论】:
-
这是我上网的一个长期令人困惑的程序,这种行为对我来说似乎很奇怪,因为在执行
pushl %eaxesp 之类的操作时,首先会递减值,然后再推送值。这导致人们相信它遵循我提到的第一个行为。你想让我发布整个代码吗? -
我通过
pushl 8(%esp)来做到这一点,正如我所提到的,如果首先减少 esp,那么将被推送的值将是垃圾(因为我想要的变量在 8(%esp) 中)但是如果先获取值,则将推送变量
标签: pointers assembly stack push