架构 – 为什么堆栈通常向下生长?

我知道在我个人熟悉的架构(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(例如,具有64K地址空间的z80没有必要有64K或RAM,事实上64K将是巨大的在我的早期)。一旦找到顶部实际地址,它将适当地设置堆栈指针,然后可以开始调用子例程。这种扫描通常由CPU在ROM中运行代码作为启动的一部分来完成。

关于堆叠的增长,不是所有的都向下生长,详见this answer

http://stackoverflow.com/questions/2035568/why-do-stacks-typically-grow-downwards

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:架构 – 为什么堆栈通常向下生长?