【问题标题】:RISC-V ADDI instructionRISC-V ADDI 指令
【发布时间】:2023-03-22 03:30:01
【问题描述】:

我目前正在实施 RV32I 基本指令集。

我有一个关于 ADDI 指令的问题。手册中如何理解这句“ADDI rd, rs1, 0 用于实现MV rd, rs1 汇编伪指令。”

是否表示ADDI rd, rs1, 0 等于将rs1的内容移到rd指定的寄存器中?

【问题讨论】:

    标签: riscv


    【解决方案1】:

    是的,ADDI rd, rs1, 0 是MV rd, rs1 指令的编码。

    许多编码是可能的,例如XORI rd, rs1, 0 会产生同样的效果。

    指定选择哪种编码的原因是反汇编程序在看到ADDI rd, rs1, 0时会输出MV rd, rs1,但XORI rd, rs1, 0仍将被反汇编为XORI rd, rs1, 0。

    其他指令具有指定的编码,例如 NOP 是 ADDI x0, x0, 0,而不是任何其他什么都不做的指令。注意:寄存器 0 是 magic。它总是读为零,因此写入会丢失。

    MV 指令将一个寄存器的值设置为另一个寄存器的值,因此正如@LiHenyuan 所写,它们最好被描述为“复制”。

    【讨论】:

      【解决方案2】:

      mv x, y(移动)伪指令只是addi x, y, 0 的别名。这意味着它是在汇编器内部实现的syntactic sugar。

      由于mv 别名由汇编程序解析,mv 没有自己的操作码,因此不是真正的指令。因此它被称为伪指令。

      使用mv 伪指令可以更清楚地描述代码的目的。当然,对于人类来说,打字和解析都稍微少一些。

      【讨论】:

        【解决方案3】:

        是的ADDI rd, rs1, 0执行操作:

        rd <- rs1 + 0,即rd <- rs1

        所以ADDI rd, rs1, 0 执行MV rd, rs1

        它不会将 rs1 的内容移动(复制是一个更好的词)到问题中提到的 rd 指定的寄存器。 它将 rs1 的内容移动(再次复制)到寄存器 rd。

        举个例子:

        ADDI x3, x5, 0 会将x5 的内容复制到x3 - 并使用与上面相同的名称,在此示例中:rd 是x3,rs1 是x5。

        【讨论】:

          猜你喜欢
          • 2018-11-22
          • 2023-04-01
          • 2018-11-17
          • 1970-01-01
          • 1970-01-01
          • 2014-12-10
          • 1970-01-01
          • 2018-05-16
          相关资源
          最近更新 更多