2012-06-29 69 views
3

下面是引自书“汇编语言简介”关于RISC(VS CISC)RISC VS CISC堆栈

在MIPS,我们可以写程序,而无需使用堆栈。对于大多数 正常程序,我们不必使用堆栈。大量寄存器的可用性 允许我们使用基于寄存器的 参数传递。但是,当我们编写递归程序时,我们 必须使用堆栈。

我对工作没有堆栈的魔法非常困惑。 任何标准程序有一个链调用:主() - >功能1() - >功能2() - > - >

即使有许多寄存器(128)的方法是通常的:

  1. 决定哪些寄存器,你应该采取并保存其上下文 (通常是推在栈上)
  2. 提供操作
  3. 返回登记状态(通常从栈中弹出)

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

+0

您提供的报价只提到不使用堆栈,而不是整个程序的程序编写程序。但是,如果你的程序足够简单,你正在汇编写入,并且你有足够的寄存器,那么你可以手动为每个变量和参数分配一个寄存器。尽管如此,你可能仍然会使用栈来获取任何jsrs/calls/isrs等的返回地址。 – tinman

回答

5

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

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

-1

RISC

  1. NO指令的较少指令的
  2. 长度是固定的
  3. 它使用加载/存储指令。
  4. 例如:ARM7,ARM9。
  5. 否执行程序所需的周期是例如更 如果我们想产品2不然后,我们使用下面的代码 负载A,12 负载B,14, PROD A,B 存储(存储位置) ,b

CISC:

  1. 指令的NO被多个指令的
  2. 长度是可变的
  3. 它不使用加载/存储指令来访问存储器
  4. 实施例:奔腾
  5. 否执行程序所需的周期是例如 为两种产品少 没有使用仅 MULT(存储器位置1),存储器LOCATION2 ,并在存储位置中的结果存储1
+0

-1:不回答问题。此外,你对指令周期是错误的。许多处理器可以一次执行多条指令。 –

1

精简指令集计算机(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/