【问题标题】:RISC-V difference between jal and jalrjal和jalr的RISC-V区别
【发布时间】:2020-02-05 08:54:22
【问题描述】:

我在学习 RISC-V 汇编语言的时候遇到了名为 jal 和 jalr 的指令。

我很难理解 jal 和 jalr 之间的区别。

jal x1, X 

上面的代码好像是跳转到X的意思,把通常是PC+4的返回地址保存到x1。

但在那之后,jalr x0, 0(x1) 来了。

0(x1)表示返回地址是返回地址,但是x0是什么?

在 RISC-V 中 x0 基本上为零,

那么为什么我们需要 x0?

jaljalr 这两条指令之间的实际区别是什么?

谢谢。

【问题讨论】:

    标签: riscv


    【解决方案1】:

    正如我们在specification(第15页)中看到的,jaljalr之间的主要区别在于地址值编码。

    jal 对目标地址使用立即(20 位)编码,并且可以跳转 +-1MiB 范围。并将实际的address + 4 保存在寄存器rd 中。 (在您的示例中为x1)。

    jalr 使用间接地址(在您的示例中为x1)加上一个 12 位常量(在您的示例中为 0)。它也将实际的address + 4 保存在寄存器rd 中。在您的示例中,您将x0 设置为返回地址寄存器,因为您“不在乎”。

    例如从子程序返回时,返回地址没有用,那么我们设置x0

    【讨论】:

      猜你喜欢
      • 2020-03-27
      • 1970-01-01
      • 2013-06-09
      • 2019-04-01
      • 2017-03-20
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 2017-07-04
      相关资源
      最近更新 更多