首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当合并堆栈推送和弹出时

当合并堆栈推送和弹出时
EN

Stack Overflow用户
提问于 2015-12-04 21:46:10
回答 2查看 819关注 0票数 0

一段时间前(2-3年前),在我的大学里,我们正在编写MC68HC11微控制器的程序,我们的讲师告诉我们,堆栈是内存的一部分,它具有以下功能:

  • 存储中断程序的状态
  • 在转换到子程序时存储回调地址
  • 该堆栈也可用于程序员的需要。

我从来不知道如何才能过渡到一个子程序。实际上,我知道有PC (程序计数器),它从当前正在执行的程序中指向当前字节,即指向到达执行程序的位置。有人能举个例子吗?堆栈什么时候会拉,什么时候会弹出一些东西(可能是JMP在代码上面,但我不认为它会起作用)。堆栈拉动和pops是否自动执行(不包括程序员的需要)?我是否需要在内存中编写两个程序,然后从另一个调用其中一个来执行自动堆栈拉出?

现在不必要:

实际上,我正在尝试理解程序集堆栈,因为我希望与C和C++堆栈以及堆进行比较,并能够掌握所谓的“堆栈跟踪调试”,但这将出现在下一个线程中,即现在。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-04 23:06:24

在x86中:

  • push rax减少堆栈指针,然后将值存储在堆栈指针现在指向的位置。
  • pop rax做的正好相反:相当于mov rax, [rsp] / add rsp, 8

调用推送以下指令的地址,然后跳转到目标。如果您对x86有更多的兴趣,请参阅x86标记wiki中的链接。

堆栈指针开始指向分配给用作堆栈的内存块的顶部。见堆栈。关于计算机如何使用“该”堆栈(相对于自定义堆栈数据结构)的介绍,可能有更好的链接,但这个链接看起来还可以。

票数 1
EN

Stack Overflow用户

发布于 2015-12-04 22:07:14

call和中断将PC推到堆栈中,retiret pop PC再次在普通CPU上自动返回。仅此而已。

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

https://stackoverflow.com/questions/34098005

复制
相关文章

相似问题

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