首页 > 解决方案 > 命令的实现

问题描述

我对理解特定命令的实现有点迷茫。

在此示例中,传递了一个0x00c6ba23二进制0000 0000 1100 0110 1011 1010 0010 0011命令

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

从这里我可以看到

我正在使用此图像对其进行解码

ALU 控制位如何设置取决于 ALUOp 控制位和 R 型指令的不同操作码

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

标签: riscv

解决方案


... 为什么是函数 SD,即使函数 3 显示的是 011 而不是 111?

011 是正确的。为了成为 SD 指令,funct3 位必须为 011。根据https://content.riscv.org/wp-content/uploads/2017/05/riscv-spec-v2.2.pdf的第 105 页,SD 指令的格式如下:

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

如果funct3 位是111,那么这条指令就不是SD。

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

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


推荐阅读