如何连接 B 型 RISC-V 指令的立即数?

问题描述 投票:0回答:1

我需要解码来自 RISC-V 指令的以下二进制文件:

11111110000011100001100011100011

使用RISC-V参考卡,我知道以下信息:

  • 它的
    opcode
    1100011
    ,意思是它是B型格式指令
  • 它的
    funct3
    001
    =
    0x1
    ,意思是
    bne
    (分支!=)
  • 注册
    rs1
    11100
    =
    x28
    t3
  • 注册
    rs2
    00000
    =
    x0
    zero

到目前为止,指令应该看起来像

bne t3 zero
,但我缺少即时值。我有以下内容:

  • imm[12]
    =
    1
  • imm[11]
    =
    1
  • imm[10:5]
    =
    111111
  • imm[4:1]
    =
    1000

我无法理解应如何连接/排序这些内容才能获得指令的即时值。我假设了类似

111111111000
的东西,但是我该怎么办?

assembly riscv instruction-encoding immediate-operand
1个回答
0
投票

是的,这是正确的:立即数的位 12、11、10 到 5 以及 4 到 1 是指令中的单独字段。

位 0 隐式为零,因为分支目标始终按 2 对齐(2 字节压缩指令是一回事),因此您缺少低 0。换句话说,对您拥有的值左移 1现在。

按照您所做的那样将它们放在一起(使用

imm[0]=0
),符号扩展为 32 或 64 位,然后查阅文档中的说明以了解其含义。 (RISC-V 立即数操作数始终进行符号扩展,而不是零扩展。)

在这种情况下,它是相对位移,IIRC 相对于分支指令的开始,与其他一些 ISA 不同,它通常相对于结束。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.