SH 会写整个寄存器吗?
SH 只写 rs2 的低 16 位半字,不是总是写完整 XLEN 宽寄存器。
SH 指令采用 S 型格式(opcode=0100011, funct3=001)。有效地址由 rs1 与符号扩展的 12 位偏移相加得到,将 rs2 寄存器的低 16 位写入该地址。自然对齐的半字地址是 2 的倍数;未对齐访问的完成或异常行为由 EEI 定义。
从机器码字段解析开始,依次展示操作数读取、该指令专属语义计算和 ISA 可见状态更新。
仅当有效地址不是 2 的倍数时使用此 EEI 分支;自然对齐访问不得引发地址未对齐异常。
机器码按当前指令格式切成字段,动画从 encoding/decode 开始。
该动画展示 ISA 可见的解码和状态变化,不表示任何特定 CPU 的流水线、缓存、预测或时序实现。
SH 使用 rs1 加 12 位有符号偏移形成有效地址,并把 rs2 的低 16 位半字写入内存。
结合 «sh x6, 2(x10) # mem[x10+2][15:0] = x6[15:0]» 等实际代码理解该场景。
结合 «sh x6, 2(x10) # mem[x10+2][15:0] = x6[15:0]» 等实际代码理解该场景。
SH 只写 rs2 的低 16 位半字,不是总是写完整 XLEN 宽寄存器。
有效地址由基址寄存器 rs1 加符号扩展的 12 位字节偏移得到。