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

Why store instructions have their own format

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

我不明白为什么 load 和 stores 不共享指令格式,而 stores 有自己专用的指令格式(S 型)。

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

I: |    imm[11:0]        |  rs1  |  funct3 | rd       | opcode |
S: |  imm[11:5]  |  rs2  |  rs1  |  funct3 | imm[4:0] | opcode |

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

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

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