整数寄存器编码对应于其数字名称(对于x0-x31,为0-31)。 f0-f31的编码是什么?
我正在尝试编写反汇编程序。
答案 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 之间分别执行单精度浮点加,减,乘和除。 em>,将结果写入 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有不这样做的习惯。同时,如果您是在编写反汇编程序,而不是汇编程序或完整的工具链,则应出于自己的理智,使该反汇编程序与所使用的汇编程序的语法相匹配。