RISCV解析操作码
RISCV resolving opcode
我需要帮助来理解如何在 RISCV 中解决这个问题。
为以下十六进制值提供汇编语言指令:
地址 1000:b3
地址 1001: 0b
地址 1002:9c
地址 1003: 41
我知道我必须更改为二进制并且 RISCV 是小字节序的,但除此之外我不知道如何继续。我有几个这样的问题,但我想自己做剩下的事情。
正如你所说,RISC-V 是小端字节序的,所以地址 1000 到 1003 处的字是
0x419c0bb3,二进制:
01000001100111000000101110110011
首先要注意的是,指令以 0110011
结尾。这与几个指令匹配,请参阅 riscv-spec-v2.2.pdf 中的第 104 页和第 105 页。为了进一步解码指令,我检查了位 14-12 中的 FUNC3 字段,它们是 000
。我只能使用一些可能的指令,ADD
、SUB
或 MUL
。我现在检查指令的最重要的 7 位,0100000
。指令是SUB
。指令的完整解码为:
FUNC7 rs2 rs1 FUNC3 rd OPCODE
0100000 11001 11000 000 10111 0110011
在汇编程序中,这应该是 sub x23,x24,x25
。
要检查答案,最好使用 assembler/emulator.
我需要帮助来理解如何在 RISCV 中解决这个问题。
为以下十六进制值提供汇编语言指令:
地址 1000:b3
地址 1001: 0b
地址 1002:9c
地址 1003: 41
我知道我必须更改为二进制并且 RISCV 是小字节序的,但除此之外我不知道如何继续。我有几个这样的问题,但我想自己做剩下的事情。
正如你所说,RISC-V 是小端字节序的,所以地址 1000 到 1003 处的字是 0x419c0bb3,二进制:
01000001100111000000101110110011
首先要注意的是,指令以 0110011
结尾。这与几个指令匹配,请参阅 riscv-spec-v2.2.pdf 中的第 104 页和第 105 页。为了进一步解码指令,我检查了位 14-12 中的 FUNC3 字段,它们是 000
。我只能使用一些可能的指令,ADD
、SUB
或 MUL
。我现在检查指令的最重要的 7 位,0100000
。指令是SUB
。指令的完整解码为:
FUNC7 rs2 rs1 FUNC3 rd OPCODE
0100000 11001 11000 000 10111 0110011
在汇编程序中,这应该是 sub x23,x24,x25
。
要检查答案,最好使用 assembler/emulator.