gpt4 book ai didi

architecture - 为什么堆栈通常向下增长?

转载 作者:太空狗 更新时间:2023-10-29 11:22:49 26 4
gpt4 key购买 nike

我知道在我个人熟悉的架构(x86、6502 等)中,堆栈通常向下增长(即,将每个项目插入堆栈都会导致 SP 递减,而不是递增)。

我想知道这有什么历史依据。我知道在统一的地址空间中,在数据段的另一端启动堆栈很方便(比方说),所以如果两侧在中间发生碰撞,只会出现问题。但是为什么堆栈传统上会得到顶部呢?特别是考虑到这与“概念”模型有何不同?

(请注意,在 6502 架构中,堆栈也会向下增长,即使它被限制在一个 256 字节的页面上,而且这个方向选择似乎是任意的。)

最佳答案

至于历史原因,我不能肯定地说(因为我没有设计它们)。我对此事的想法是,早期的 CPU 将其原始程序计数器设置为 0,并且自然希望在另一端启动堆栈并向下增长,因为它们的代码自然向上增长。

As an aside, note that this setting of the program counter to 0 on reset is not the case for all early CPUs. For example, the Motorola 6809 would fetch the program counter from addresses 0xfffe/f so you could start running at an arbitrary location, depending on what was supplied at that address (usually, but by no means limited to, ROM).

一些历史系统首先要做的事情之一是从顶部扫描内存,直到它找到一个可以读回写入的相同值的位置,这样它就会知道实际安装的 RAM(例如,一个 z80 64K 地址空间不一定有 64K 或 RAM,事实上 64K 在我早期的日子里很大)。一旦它找到了顶部的实际地址,它就会适本地设置堆栈指针,然后可以开始调用子程序。作为启动的一部分,这种扫描通常由 CPU 在 ROM 中运行代码来完成。

关于堆栈增长,并不是所有的堆栈都向下增长,参见this answer了解详情。

关于architecture - 为什么堆栈通常向下增长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11762893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com