现知道某条 RISC-V (指RV32)的机器指令在内存中的值为 b3 05 95 00(16进制),从左往右为从低地址到⾼地址,单位为字节,那么如何将其翻译为对应的汇编指令?
前置知识
- RISC-V不管在32位CPU上还是在64位CPU上,其宽度都是32位,除非是压缩指令集模块
- RISC-V的汇编指令在内存中按小端序排列
- 在RV32中有32个通用寄存器,分别是x0~x31
正文
- 由于
b3 05 95 00是小端序的,所以需要反过来写,即00 95 05 b3 - 转为二进制串【1】
00000000-10010101-00000101-10110011 - 根据RISC-V非特权指令手册手册24章中的基础指令集表和编码格式表

基础指令集表
编码格式表
- 先根据最后一字节的后7位
0110011,即opcode字段,在上表(基础指令集表)中的最后一列中寻找值为0110011的行,后可确定其编码格式为R-type类型 - 根据下表(编码格式表)知,
R-type类型中25-31位,12-14位为funct7字段和funct3字段 - 在上表(基础指令集表)中的最后一列中寻找值为
0110011的行,在根据funct7和funct3的值确定具体的某一行,即ADD指令所在的那一行,然后根据该行信息解析【1】的内容 - 解析结果为
0000000(funct7) 0-1001(rs2) 0101-0(rs1) 000(funct3) 0101-1(rd) 0110011(opcode) - 进一步转换为
0000000 rs2=9 rs1=10 000 rd=11 0110011 - 对应汇编指令为
ADD x11, x10, x9
结果
在RV32中机器指令b3 05 95 00(16进制)反汇编后的汇编指令为ADD x11, x10, x9
参考
版权声明:本文为weixin_54430656原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。