- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不明白 JAL 在 RISC-V 中是如何工作的,因为我看到了多个相互矛盾的定义。例如,如果我引用这个网站:
https://rv8.io/isa.html
它说:JAL rd,offset
将第三个参数作为偏移量,但在某些情况下显示 JAL rd, imm
反而。有什么不同?
似乎 JAL 应该采用一个函数并在 rd 中返回其输出(我不知道为什么有些消息来源同时将其称为 ra
和 rd
)。但如果是这样,子程序或函数是什么? rd
似乎被定义为寄存器目的地,而imm
似乎只是一个整数..
真的很困惑请帮忙。
最佳答案
在 jal
说明imm
(或 imm20
)是一个 20 位二进制数。offset
是imm
的解释由 jal
说明:imm
的内容左移 1 个位置,然后符号扩展到地址的大小(当前为 32 或 64 位),从而生成一个值为 -100 万(大约)到 +100 万的整数。
此 offset
整数被添加到 jal
的地址中指令本身获取要调用的函数的地址。这个新地址被放入 PC,程序继续执行,无论指令位于该地址。
同时,jal
后面的指令地址存储到 CPU 寄存器 rd
.被调用的函数可能稍后会使用 this 返回,使用 jalr rn
操作说明。
RISC-V 硬件允许将 32 个整数寄存器中的任何一个指定为 rd
.如果寄存器 0 (x0) 被指定为 rd
然后返回地址被丢弃,你实际上有一个 +/1 MB goto
而不是函数调用。
标准 RISC-V ABI(一种软件约定,与硬件无关)指定对于正常功能 rd
应该是寄存器 1 (x1),然后通常称为 ra
(退货地址)。寄存器 5 (x5) 也常用于特殊的运行时库函数,例如在函数开始和结束时保存和恢复寄存器的特殊函数。
RISC-V 指令集手册建议 CPU 设计者可能会选择添加特殊硬件(return address stack
)来制作严格嵌套的 jal x1/x5,offset
对。和 `jalr x1/x5' 的运行速度比预期的要快,因此遵循标准 ABI 可能会有优势。但是,即使使用其他寄存器,程序也能正常工作。
关于architecture - RISC-V 中 JAL 的定义是什么以及如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53036468/
我正在查看 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
我是一名优秀的程序员,十分优秀!