[英]RISC-V U-Format instruction immediate confusion
阅读RISC-V 非特权规范我看到 U 格式指令( lui
,..)定义如下:
但是这里的立即值对我来说没有意义:具体来说,如果给出像lui t0, 0xABCDE
这样的指令,立即数的低 12 位将(并且应该)在t0
的高 20 位中。 (即t0 = 0xABCDE000
)
imm[31:12]
看起来0xABCDE
在汇编过程中被左移了 12 位,对吗?
imm[31:12] 看起来 0xABCDE 在汇编过程中被左移了 12 位,对吗?
这20位被编码到指令的imm字段中,这是32位指令的高20位中的一个字段。 结果是一条机器代码指令,要求处理器将 0xABCDE000 加载到寄存器中。 此编码是否涉及将汇编代码中声明的立即数左移 12 位? 是的,我同意这一点。
需要明确的是,汇编器采用的形式是语法问题,机器代码采用的形式是编码问题。 在这里,我们可以编写一个不同的汇编器,它要求您指定值 0xABCDE000(然后如果低 12 位非零则报错)——这样就没有汇编时“移位”。
在 RISC V 中,其他指令的立即数以更复杂的方式编码。 一个大的立即数被拆分并插入到单独的单独字段中; 这样做是为了在每条指令中将寄存器字段保持在同一位置,并将立即数的符号位保持在同一位置(符号扩展需要动态扩展)。
例如,看看 S 格式,其中 12 位立即数在编码指令中被分成两个单独的字段。
也可以看看
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.