- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在学习 RISC-V 汇编语言时遇到了名为 jal 和 jalr 的指令。
我很难理解 jal 和 jalr 之间的区别。
jal x1, X
看来上面代码的意思是跳转到X,并将返回地址(通常是PC+4)保存到x1。
但在那之后,jalr x0, 0(x1)
出现。
0(x1)
表示返回到返回地址,但是x0是什么呢?
本质上,RISC-V 中的 x0 为零,那么为什么我们需要 x0?
这两条指令 jal
和 jalr
之间的实际区别是什么?
最佳答案
正如我们在 specification 中看到的那样(第15页),jal
和jalr
之间的主要区别在于地址值编码。
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/
我正在查看 C 应用程序的一个非常可疑的反汇编 MIPS 代码 80019B90 jal loc_80032EB4 loc_80032EB4 在另一个函数体的中
我了解到jal和jalr都可以用于调用函数,相反只有jal可以用于返回来自这样的函数: sum3: add a0, a0, a1 add a0, a0, a2 jalr x0,
我不明白 JAL 在 RISC-V 中是如何工作的,因为我看到了多个相互矛盾的定义。例如,如果我引用这个网站: https://rv8.io/isa.html 它说:JAL rd,offset将第三个
我是 Java 的新手,正在寻找 Java 中的标准数据结构和算法库。 通过谷歌搜索,我碰到了 JGL和 JAL .我发现对它们的大多数讨论都已有好几年了,例如 http://www4.ncsu.ed
我无法理解指令 日本航空 在 MIPS 处理器中工作。 我的两个问题是: 一) 中存储的值是多少? R31 "jal"之后:个人电脑+4 或 个人电脑+8 ? b) 如果真的是个人电脑+8 , 处的指
在 RISC-V 规范中,写到 JAL 和 JALR 指令中的立即数被转换为跳转偏移量: 将给定的立即数符号扩展到 XLEN 位。 将 LSB 设置为零。 关于这个,我有几个问题。 问题 1 对于 J
我在学习 RISC-V 汇编语言时遇到了名为 jal 和 jalr 的指令。 我很难理解 jal 和 jalr 之间的区别。 jal x1, X 看来上面代码的意思是跳转到X,并将返回地址(通常是PC
我是一名优秀的程序员,十分优秀!