RISC-V指令中的浮点寄存器(f0-f31)的rs1和rs2字段如何编码?

时间:2018-10-30 01:31:04

标签: floating-point disassembly riscv

整数寄存器编码对应于其数字名称(对于x0-x31,为0-31)。 f0-f31的编码是什么?

我正在尝试编写反汇编程序。

2 个答案:

答案 0 :(得分:1)

浮点寄存器以相同的方式编码。处理器根据指令的性质知道使用整数寄存器还是浮点寄存器。

RISC-V规范位于https://riscv.org/specifications/。作为一种类型的指令的示例,请参阅 RISC-V指令集手册,第一卷:用户级ISA ,版本2.2,2017年5月7日,第8.6节“单精度浮点数”。计算指令”说:

  

带有一个或两个源操作数的浮点算术指令使用带有OP-FP主操作码的R型格式。 FADD.S,FSUB.S,FMUL.S和FDIV.S在 rs1 rs2 ,将结果写入 rd

R型格式显示在2.2“基本指令格式”中。该图显示了 rs1 rs2 rd 分别是19至15、24至20和11至7。

答案 1 :(得分:0)

几件事1)有risc-v文档。 2)如果您正在为指令集编写第一个汇编程序或反汇编程序,那么您可以在其中工作,您可以直接从一个硅工程师的多维数据集中向下询问。 3)如果没有,则存在此指令集的工具,您应该将其用作参考:

选择risc-v文档:

.word 0x001100D3
.word 0x002100D3
.word 0x003100D3
.word 0x001100D3
.word 0x001200D3
.word 0x001300D3
.word 0x00130153
.word 0x00130253
.word 0x00130353

组装然后拆卸

   0:   001100d3            fadd.s  f1,f2,f1,rne
   4:   002100d3            fadd.s  f1,f2,f2,rne
   8:   003100d3            fadd.s  f1,f2,f3,rne
   c:   001100d3            fadd.s  f1,f2,f1,rne
  10:   001200d3            fadd.s  f1,f4,f1,rne
  14:   001300d3            fadd.s  f1,f6,f1,rne
  18:   00130153            fadd.s  f2,f6,f1,rne
  1c:   00130253            fadd.s  f4,f6,f1,rne
  20:   00130353            fadd.s  f6,f6,f1,rne

然后使用助记符编写代码,重复。与现有工具结合使用ISA文档开发反汇编程序,在此过程中进行轮换,直到对工具感到满意为止。预计文档中会出现错误或含糊不清...

当然,现在在这种情况下,我们希望gnu使用某种类似于risc-v人们所期望的汇编语言的语言,示例和文档。 GNU有不这样做的习惯。同时,如果您是在编写反汇编程序,而不是汇编程序或完整的工具链,则应出于自己的理智,使该反汇编程序与所使用的汇编程序的语法相匹配。