我正在阅读关于6502程序集的内容,而不了解该堆栈的用途。我知道它是一个FIFO存储器并理解推/弹的东西,但是它的用途是什么?它与寄存器或RAM有何不同(使用)?您在堆栈中放入了哪些数据?为什么?
答案 0 :(得分:2)
硬件支持堆栈的主要原因是维护函数调用的返回地址。这个论点的证据可以在机器语言操作假设堆栈存在的情况下看出。除了将堆栈作为源或目标处理的操作与简单移动操作的方式非常相似之外,假设堆栈存在的唯一指令是调用/返回操作。这个电话真的只是一个推动和跳跃。返回实际上只是一个流行和跳跃间接。由于它已经存在于此目的,因此将它用于函数调用的本地状态(参数和局部变量)也非常方便。
答案 1 :(得分:1)
有一种调用内存层次结构,如下所示:
堆栈基本上是RAM,或主存储器,就像图像......所有这些级别之间的主要区别在于成本,空间和速度。在顶部,您拥有最昂贵,最小和最快的存储设备,在底部您拥有最便宜,最大和最慢的存储设备。内存架构的工作方式是尝试平衡这些参数...
将数据从磁盘传递到寄存器所花费的时间很长,因此解决方案是在两者之间创建另一个存储设备..依此类推,直到我们达到限制。这个限制可以打破,但它的成本很高......
答案 2 :(得分:1)
堆栈用于临时存储,如寄存器,但通常是更大的电源。考虑函数调用,递归与否,如果你使用寄存器作为第一次调用的返回地址,那么当该函数调用函数时会发生什么?那个函数调用一个函数?使用固定寄存器根本不起作用,你无法处理嵌套的任意深度,无法处理递归。但是使用堆栈,推送返回地址,推送要修改的寄存器的副本,为局部变量分配存储,然后可以在函数中使用通用寄存器,从函数返回时进行清理,这是微不足道的。使用该返回地址。每个函数都执行这些任务,只要你有ram可用,就可以根据需要嵌套或递归调用函数等。