命令的执行

时间:2018-12-18 23:15:21

标签: riscv

我对理解特定命令的执行有些迷惑。

在此示例中,有一个通过0x00c6ba23的命令,该命令是二进制的0000 0000 1100 0110 1011 1010 0010 0011

我正在尝试查找此指令的ALU控制单元的输入。

从这里我可以看到

  • 操作码= 0100011
  • imm [4:0] = 10100
  • funct3 = 011(不正确...)
  • rs1 = 01101
  • rs2 = 01100
  • imm [11:5] = 0000000

我正在使用这张图片解码

  

How the ALU control bits are set depends on the ALUOp control bits and the different opcodes for the R-type instruction

我的问题是如何获得此功能的ALU控制位和ALUOp控制位?为什么函数SD即使功能3显示的是011而不是111呢?

1 个答案:

答案 0 :(得分:1)

  

...即使功能3显示011而不是111,功能SD为何仍显示?

011是正确的。 funct3位必须为011,以使其成为SD指令。根据{{​​3}}的第105页,SD指令的格式为:

    | imm[11:5] | rs2 | rs1 | 011 | imm[4:0] | 0100011 |

如果funct3位为111,则该指令将不是SD。

  

...如何获得此功能的ALU控制位和ALUOp控制位?

由于这是一条SD指令,因此您可以直接在问题中引用的图中的下部表格的SD行中读取这些位。