RISC与CISC堆栈

Art*_*tru 4 stack processor

以下是有关RISC(与CISC)的"汇编语言简介"一书的引用

在MIPS中,我们可以在不使用堆栈的情况下编写过程.对于大多数正常过程,我们不必使用堆栈.大量寄存器的可用性允许我们使用基于寄存器的参数传递.但是,当我们编写递归过程时,我们必须使用堆栈.

我对在没有堆栈的情况下工作的魔力感到非常困惑.任何标准程序都有一个链调用:Main() - > Function1() - > Function2() - > ... - >

即使有很多寄存器(128),通常也是如此:

  1. 决定你应该采取哪些寄存器并保存它们的上下文(通常是在堆栈上推送)
  2. 提供运营
  3. 返回寄存器状态(通常从堆栈中弹出)

没有人阻止我们在CISC中使用基于寄存器的参数传递,特别是在现代处理器上.那么,如何在没有堆栈的情况下执行一个程序con RISC呢?

Nat*_*ert 7

我认为他们所指的是论证传递.在大多数RISC机器中,参数在寄存器中传递,并且通常为此目的保留约6-8个寄存器(并且一个用于返回值).这不是强制性的,它只是简单约定(并称为ABI或应用程序二进制接口).因此,如果函数的参数少于寄存器,并且这些参数足够简单以适合寄存器,则不需要额外的堆栈空间来传递这些参数.在CISC机器上,参数的寄存器不多,因此ABI指定这些参数在堆栈上传递.

此外,在RISC机器中,有许多临时寄存器(特别是被调用者保存的寄存器)用于存储局部变量.在CISC机器上,局部变量通常在堆栈上分配,寄存器通常保留用于中间值.