【发布时间】:2012-06-29 14:26:08
【问题描述】:
这是《汇编语言简介》一书中关于 RISC(与 CISC)的引述
在 MIPS 中,我们可以在不使用堆栈的情况下编写程序。对于大多数 正常程序,我们不必使用堆栈。可用性 大量寄存器允许我们使用基于寄存器的 参数传递。但是,当我们编写递归过程时,我们 必须使用堆栈。
我对在没有堆栈的情况下工作的魔力感到非常困惑。 任何标准程序都有一个链式调用:Main()-> Function1() -> Function2() -> ... ->
即使有很多寄存器 (128),这种方式也很常见:
- 决定你应该使用哪些寄存器并保存它们的上下文 (通常是压栈)
- 提供操作
- 返回寄存器状态(通常从堆栈中弹出)
没有人阻止我们在 CISC 中使用基于寄存器的参数传递,尤其是在现代处理器上。 那么,如何在没有堆栈的情况下执行 RISC 程序呢?
【问题讨论】:
-
您提供的报价仅提及不使用堆栈编写程序的程序,而不是整个程序。但是如果你的程序足够简单,你正在用汇编编写并且你有足够的寄存器,那么你可以手动为每个变量和参数分配一个寄存器。不过,您可能最终仍会使用堆栈作为任何 jsrs/calls/isrs 等的返回地址。