RISC-V 立即编码符号究竟是如何工作的?

问题描述

我以为我已经理解了这一点,但我认为我自己搞糊涂了。

RISC-V RV32G Encoding

我的印象是 [11:0] 是编码中直接位的顺序。例如,addi x1,x2,12 的立即数为 000000001100;立即数将从 addi 指令编码中的第 20 位开始。

我很困惑这个逻辑如何适用于 U 型编码 [31:12] 中使用的相同符号。我知道 U 型立即数是 20 位,但我现在不确定如何解释符号。

解决方法

U-type 用于 lui,立即数进入 Rd 的 20 位,低 12 位清零。或者对于auipc,同样的解码;位 [31:12] 来自指令,低 12 位为隐式 0。

所以位号是解码值内的位置,而不仅仅是直接数本身。

图中的位置显示了机器编码中每个值位来自的位置; [hi:lo] 位范围数字显示该字段映射到哪个值位(完整的 32 位或 64 位整数)。

有关 RISC-V 其他部分的更多一般内容,请参阅 ISA 文档中的设计评论,在几个 SO Q&A 中引用和扩展: