gpt4 book ai didi

architecture - RISC-V 中 JAL 的定义是什么以及如何使用它?

转载 作者:行者123 更新时间:2023-12-03 18:40:56 30 4
gpt4 key购买 nike

我不明白 JAL 在 RISC-V 中是如何工作的,因为我看到了多个相互矛盾的定义。例如,如果我引用这个网站:
https://rv8.io/isa.html

它说:JAL rd,offset将第三个参数作为偏移量,但在某些情况下显示 JAL rd, imm反而。有什么不同?

似乎 JAL 应该采用一个函数并在 rd 中返回其输出(我不知道为什么有些消息来源同时将其称为 rard)。但如果是这样,子程序或函数是什么? rd似乎被定义为寄存器目的地,而imm似乎只是一个整数..

真的很困惑请帮忙。

最佳答案

jal说明imm (或 imm20 )是一个 20 位二进制数。
offsetimm的解释由 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/

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