为什么商店说明有自己的格式

Min*_*ing 5 riscv

加载和存储指令对编码有相同的要求:两个寄存器和一个 12 位立即数。然而,存储指令(sb、sh、sw)具有称为S 型的专用格式,而加载指令使用与 addi 指令相同的I 型格式。

我不明白为什么加载和存储不共享指令格式,但存储只有自己专用的指令格式(S-type)。

Dyl*_*mee 5

我相信这两种格式是不同的,以简化解码。查看 I 和 S 指令的格式,您会看到:

I: |    imm[11:0]        |  rs1  |  funct3 | rd       | opcode |
S: |  imm[11:5]  |  rs2  |  rs1  |  funct3 | imm[4:0] | opcode |
Run Code Online (Sandbox Code Playgroud)

加载rd位于指令的相同位位置,因为在所有其他需要一个的指令中rd(I、R、U 和 UJ 格式都放在rd同一位置)。相比之下,Store 指令没有目标寄存器,而是有一个地址寄存器和一个我们存储其值的寄存器,因此所需的位rd被用作立即编码的一部分。

如果您自己尝试实现 RISC-V(在 FPGA、Logisim 或您选择的任何方式中),您会发现rd始终在同一个地方是多么方便。

总结一下为什么 S 指令具有独特的格式:在load/store像 RISC-V 这样的架构中,它们是唯一一种不修改寄存器内容的指令。其余指令确实修改了寄存器,因此需要一个rd.