4

这是《汇编语言简介》一书中关于RISC(与CISC)的引述

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

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

即使有很多寄存器(128),这种方式也很常见:

  1. 决定你应该使用哪些寄存器并保存它们的上下文(通常推入堆栈)
  2. 提供操作
  3. 返回寄存器状态(通常从堆栈中弹出)

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

4

3 回答 3

7

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

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

于 2012-07-13T17:34:58.853 回答
2

精简指令集计算机(RISC /发音为“风险”/)是一种仅使用简单指令的计算机,这些指令可以分为多个指令,这些指令在单个时钟周期内执行低级操作,顾名思义。让我们以两个数相乘 A = A * B 为例;<<<======这是 C 语句。对于这个特定的任务,CISC 处理器会准备好一条特定的指令(我们称之为“MULT”)。执行时,该指令将两个值加载到单独的寄存器中,将执行单元中的操作数相乘最后,将乘积存储在适当的寄存器中。因此,两个数相乘的整个任务可以用一条指令完成: MULT A,B <<<======这是汇编语句

   MULT is what is known as a “complex instruction.” It operates directly  on the computer’s memory banks and does not require the programmer to  explicitly call any loading or storing functions.

RISC 处理器只使用可以在一个时钟周期内执行的简单指令。为了执行 CISC 方法中描述的确切系列步骤,程序员需要编写四行汇编代码: LOAD R1, A <<<======这是汇编语句 LOAD R2,B <<< ======这是汇编语句 PROD A, B <<<======这是汇编语句 STORE R3, A <<<======这是汇编语句 优点:- 每条指令都需要只执行一个时钟周期,整个程序将在与多周期“MULT”命令大致相同的时间内执行。这些 RISC“精简指令”比复杂指令需要更少的晶体管硬件空间,为通用寄存器留出更多空间。因为所有指令都在统一的时间内执行(即一个时钟)。
**要了解更多关于 RISC 和 CISC 的信息,请点击以下链接:- **

http://www.firmcodes.com/difference-risc-sics-architecture/

于 2015-12-02T16:43:29.310 回答
-1

RISC

  1. 指令数量较少
  2. 指令长度固定
  3. 它使用加载/存储指令。
  4. 示例:ARM7、ARM9。
  5. 执行程序所需的周期数更多,例如,如果我们想要产品 2 no,那么我们使用以下代码 Load a, 12 load b, 14, prod a, b store (memory location), b

思科:

  1. 指令数量更多
  2. 指令长度可变
  3. 它不使用加载/存储指令来访问内存
  4. 示例:奔腾
  5. 执行程序所需的周期数较少,例如对于两个无用的乘积,仅 MULT(内存位置 1)、内存位置 2 和结果存储在内存位置 1
于 2014-01-30T07:21:48.787 回答