【问题标题】:How exactly does the RISC-V immediate encoding notation work?RISC-V 立即编码符号究竟是如何工作的?
【发布时间】:2021-05-02 08:48:26
【问题描述】:

我以为我已经理解了这一点,但我想我自己很困惑。

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

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

【问题讨论】:

  • 好吧,这下沉了。那么在lui 指令中可用作立即数的最大十进制值将是 (2^31/2)-1?
  • 不,(2^32 - 1) & -4096 = 4294963200 = 0xfffff000。 (作为地址,虚拟地址空间的低 4GiB 中最高 4k 页的地址。)高 20 中的任何模式,低 12 中的全零。

标签: assembly encoding riscv machine-code immediate-operand


【解决方案1】:

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

所以比特数是在解码值中的位置,而不仅仅是在立即数本身中。

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

有关其他 RISC-V 立即数的更多一般信息,请参阅 ISA 文档中的设计 cmets,在几个 SO Q&A 中引用和扩展:

【讨论】:

    猜你喜欢
    • 2017-01-18
    • 2017-03-13
    • 1970-01-01
    • 2013-12-05
    • 2011-06-26
    • 2021-08-15
    • 2012-06-08
    • 2011-10-11
    • 2013-07-05
    相关资源
    最近更新 更多