【发布时间】:2019-04-09 09:30:35
【问题描述】:
我正在使用 riscV 处理器 (RV32)。通过我在上面编写的一些代码,我注意到了一些奇怪的事情。当我使用“JAL”指令或“J”指令跳转到特定地址时,似乎偏移量计算不正确。
假设我有一些位于地址 0x00008080 的代码 (PRAM_ResetVector) 我想跳转到。
跳转代码在汇编“jal x1, PRAM_ResetVector”中如下所示,位于地址 0x000085e8。指令编码(risc32)如下 0xeff09fa9。
但是,在执行跳转指令后发生的情况是,我降落在地址 0x00008082 而不是预期的 0x00008080。
我似乎找不到原因,有人可以在这里帮忙吗?
【问题讨论】:
-
您使用哪种处理器?是自己开发的吗?您使用哪些工具生成程序?再说一遍,是自研工具还是来自 RISC-V 基金会的官员?如果您使用的是自行开发的处理器但官方工具,那么您的错误就在您的处理器中。
-
这是在 github (github.com/pulp-platform/zero-riscy) 上找到的零风险,没有在 riscv 逻辑中进行自定义。使用 GCC 开发工具 (riscv-none-gcc)。