问题描述
我以为我已经理解了这一点,但我认为我自己搞糊涂了。
我的印象是 [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 中引用和扩展: