【问题标题】:RISC vs CISC stackRISC 与 CISC 堆栈
【发布时间】:2012-06-29 14:26:08
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 您提供的报价仅提及不使用堆栈编写程序的程序,而不是整个程序。但是如果你的程序足够简单,你正在用汇编编写并且你有足够的寄存器,那么你可以手动为每个变量和参数分配一个寄存器。不过,您可能最终仍会使用堆栈作为任何 jsrs/calls/isrs 等的返回地址。

标签: stack processor


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    顾名思义,精简指令集计算机(RISC /发音为“风险”/)是一种只使用简单指令的计算机,这些指令可以分为多个指令,在单个时钟周期内执行低级操作。 让我们以两个数相乘为例 A = 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 **要了解更多关于 RISC 和 CISC 的信息,请点击以下链接:- **

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

    【讨论】:

    • 怎么样 - 使用更少的晶体管然后更多的 GPR 相关?
    【解决方案3】:

    RISC

    1. 指令数量较少
    2. 指令长度是固定的
    3. 它使用加载/存储指令。
    4. 示例:ARM7、ARM9。
    5. 执行程序所需的循环次数更多 例如,如果我们想要产品 2 no 那么我们使用以下代码 加载一个,12 负载 b, 14, 产品 a, b 存储(内存位置),b

    CISC:

    1. 指令数量较多
    2. 指令长度可变
    3. 它不使用加载/存储指令来访问内存
    4. 示例:奔腾
    5. 执行程序所需的循环次数较少 例如 仅用于两个没有用的产品 MULT(内存位置 1),内存位置 2 并将结果存储在内存位置 1

    【讨论】:

    • -1:不回答问题。此外,您对指令周期的看法是错误的。许多处理器可以同时执行多条指令。
    猜你喜欢
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2021-08-07
    • 2014-06-23
    • 2017-04-23
    相关资源
    最近更新 更多