这是《汇编语言简介》一书中关于 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/

    10-16 10:27