gpt4 book ai didi

assembly - jal 和 jalr 之间的 RISC-V 区别

转载 作者:行者123 更新时间:2023-12-03 02:03:10 50 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

关于assembly - jal 和 jalr 之间的 RISC-V 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58280089/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com