首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >增加%esp和CDECL

增加%esp和CDECL
EN

Stack Overflow用户
提问于 2014-07-09 13:37:27
回答 1查看 497关注 0票数 1

我一直在阅读x86栈和CDECL会议,读到一些让我感到困惑的东西。

所列出的调用者的职责包括弹出参数、使用参数或简单地递增%(尤其是删除它们)。

最后那部分是怎么工作的?

例如,假设%esp的初始值为0x105000,并将当前堆栈帧的初始值减少$0x1c。您分配了一些数据,然后将其增加--在这种情况下,数据不是仍然在内存中浮动吗?记忆是如何被清除的?访问0x104FF4会导致分段错误吗?如果是,是什么清除了那里的数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-09 13:47:17

POP只是将数据移动到寄存器并调整堆栈指针。它不会擦除数据,也不会产生任何其他副作用。

因此,如果不需要将数据移回寄存器,则只需使用ADD调整堆栈指针。您将堆栈指针返回到您想要的位置,只需要使用POP指令关闭寄存器即可。

它也可能更有效率。您将永远只需要一个添加指令,而不是一系列POP,这可能是较慢或导致更大的代码。

数据仍然存在于内存中,但当您下次将数据推到堆栈时,数据将被覆盖。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24655231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档