繁体   English   中英

RISC-V U-Format指令立即混淆

[英]RISC-V U-Format instruction immediate confusion

阅读RISC-V 非特权规范我看到 U 格式指令( lui ,..)定义如下: U型指令格式

但是这里的立即值对我来说没有意义:具体来说,如果给出像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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM