这是《汇编语言简介》一书中关于 RISC(vs CISC)的引述
我对在没有堆栈的情况下工作的魔力感到非常困惑。
任何标准程序都有一个调用链: Main()-> Function1() -> Function2() -> ... ->
即使有很多寄存器(128),方式也很常见:
(通常压栈)
没有人阻止我们在 CISC 中使用基于寄存器的参数传递,尤其是在现代处理器上。
那么,如何在没有堆栈的情况下执行 RISC 程序呢?
最佳答案
我认为他们指的是参数传递。在大多数 RISC 机器中,参数在寄存器中传递,并且通常为此目的保留大约 6-8 个寄存器(一个用于返回值)。这不是强制性的,它只是约定(称为 ABI 或应用程序二进制接口(interface))。因此,如果函数的参数少于寄存器,并且这些参数足够简单以适合寄存器,则不需要额外的堆栈空间来传递这些参数。在 CISC 机器上,没有那么多的参数寄存器,所以 ABI 指定这些参数在堆栈上传递。
此外,在 RISC 机器中,有许多可用的临时寄存器(特别是被调用者保存的)用于存储局部变量。在 CISC 机器上,局部变量通常分配在堆栈上,寄存器通常保留用于中间值。
关于stack - RISC 与 CISC 堆栈,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11263610/