C.SB

RISC-V C.SB 指令详解

指令手册C-type

16位编码的sb指令,存储最低字节

指令语法

c.sb rs2', uimm(rs1')
操作数说明
RV32/RV64 Zcb,依赖 Zca;16位 CSB 格式,C 本身不提供此指令。
rs1'/rs2' 的3位字段选择 x8–x15;字节偏移为0–3。
uimm[1:0]={inst[5],inst[6]},零扩展、不缩放;有效地址为基址加字节偏移。
成功时仅存储 rs2' 的低8位;字节访问自然对齐,仍受 EEI 的权限和区域规则约束。
Zcb压缩指令

指令行为说明

C.SB (Zcb, CSB格式)将rs2'的最低字节存储到rs1'加零扩展偏移的内存地址。rs1'和rs2'仅限x8-x15。展开为sb rs2',uimm(rs1')。偏移量为2位无符号。属于Zcb,依赖Zca。

C.SB 指令解析与执行动画

仅显示 ISA 可见的 16 位编码、操作数和状态,不表示流水线、缓存或时序。

c.sb,()
执行环境
0x00002000 + 3 (mod 2^32) -> 0x00002003; mem8 <- 0xAB
16 位编码字段
15..10
funct6
100010
9..7
rs1'
010
6..5
uimm[0|1]
11
4..2
rs2'
001
1..0
op
00
执行数据路径
压缩操作数映射
rs1'=010 -> x(8+2)=x10, rs2'=001 -> x(8+1)=x9; uimm[1:0]={inst[5],inst[6]}=11 -> 零扩展字节偏移 3
具体计算
在“计算”阶段显示当前输入的等式。
架构可见结果

继续到“提交结果”以显示架构状态。

快速理解与检索要点

C.SB 使用 CSB 格式:rs1' 和 rs2' 映射到 x8-x15,uimm[1:0] 为零扩展字节偏移。

uimm[1] 来自编码 bit 5,uimm[0] 来自 bit 6;它不按访问宽度缩放。
只写入 rs2' 的最低字节;字节访问不会因地址未对齐而引发地址未对齐异常。

常见使用场景

压缩与代码优化

RV32/RV64 Zcb+Zca,x10=0x2000、x9=0x123456ab:c.sb x9, 3(x10) 在访问成功时写 mem8[0x2003]=0xab。

使用前检查清单

语法检查
  • RV32/RV64 Zcb,依赖 Zca;16位 CSB 格式,C 本身不提供此指令。
  • rs1'/rs2' 的3位字段选择 x8–x15;字节偏移为0–3。
语义检查
  • uimm[1:0]={inst[5],inst[6]},零扩展、不缩放;有效地址为基址加字节偏移。
  • 成功时仅存储 rs2' 的低8位;字节访问自然对齐,仍受 EEI 的权限和区域规则约束。

容易混淆 / 常见误区

rs1'和rs2'仅限x8-x15
偏移量为2位无符号(0-3字节)

常见问题

C.SB 偏移如何编码?

字节偏移为 0–3;bit5 给出 uimm[1],bit6 给出 uimm[0],零扩展且不再缩放。

字节存储会有未对齐异常吗?

字节地址总是自然对齐,不产生地址未对齐异常;访问仍受 EEI 权限和区域规则约束。