首页/指令库/存储字节
SB

RISC-V SB 指令详解

指令手册S-type

将rs2的低8位存储到内存指定地址

指令语法

sb rs2, offset(rs1)
操作数说明
源寄存器 rs2:要写入内存的数据寄存器。
基址寄存器 rs1:内存访问的基地址。
立即数偏移:12 位有符号偏移量,与 rs1 相加得到最终地址。
RV32I内存存储

指令编码

31..25
imm[11:5]
24..20
rs2
19..15
rs1
14..12
funct3
11..7
imm[4:0]
6..0
opcode

SB 使用 opcode 0100011(0x23)、funct3 000。rs1 保存基地址,rs2 保存存储数据,12 位立即数(拆分在 imm[11:5] 和 imm[4:0])提供偏移量。

格式: S-type
opcode: 0100011 (0x23)
funct3: 000 (0x0)

指令行为说明

SB指令采用S型格式(opcode=0100011, funct3=000)。有效地址由rs1与12位有符号偏移相加得到,将rs2寄存器的低8位写入该地址。S型指令的立即数分为两段编码:高7位在inst[11:5],低5位在inst[4:0]。未对齐访问行为由EEI定义。

快速理解与检索要点

SB 使用 rs1 加 12 位有符号偏移形成有效地址,并把 rs2 的低 8 位字节写入内存。

S-type 立即数被拆分在指令字的两个字段中,但语义上仍是一个 12 位有符号字节偏移。
存储指令不写 rd;写入宽度由 SB/SH/SW 决定。

常见使用场景

数据存储

结合 «sb x5, 0(x10) # mem[x10+0][7:0] = x5[7:0]» 等实际代码理解该场景。

数组与内存访问

结合 «sb x5, 0(x10) # mem[x10+0][7:0] = x5[7:0]» 等实际代码理解该场景。

设备与IO

结合 «sb x5, 0(x10) # mem[x10+0][7:0] = x5[7:0]» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 S-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

仅写入rs2的低8位,高位被忽略
S型格式的立即数拆分编码需注意

常见问题

SB 会写整个寄存器吗?

SB 只写 rs2 的低 8 位字节,不是总是写完整 XLEN 宽寄存器。

store 指令的地址怎么计算?

有效地址由基址寄存器 rs1 加符号扩展的 12 位字节偏移得到。