为什么商店说明有自己的格式
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
.
加载和存储指令对编码的要求相同:两个寄存器和一个 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
.