jal和jalr之间的RISC-V差异

时间:2019-10-08 04:10:17

标签: riscv

我在学习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之间的实际区别是什么?

谢谢。

1 个答案:

答案 0 :(得分:4)

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

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

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

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