C.SW

RISC-V C.SW 指令详解

指令手册C-type

将32位字存储到内存。CS格式。

指令语法

c.sw rs2', offset(rs1')
操作数说明
16 位 CS 格式;rs1′ 与 rs2′ 的两个 3 位字段选择 x8–x15。
字节偏移为 0–124 的 4 字节倍数,零扩展;偏移已含 ×4 缩放。
成功访问只存储 rs2′ 低 32 位,不写通用寄存器;相同源和基址寄存器共用旧值。非自然对齐结果由 EEI 决定。
C压缩指令

指令行为说明

C.SW 使用 CS 格式;rs1' 和 rs2' 都只能编码 x8-x15。它将 rs2' 的低 32 位存储到 rs1' 加零扩展且按 4 缩放的偏移所形成的地址,展开为 sw rs2', offset(rs1')。

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

c.sw,()
RV64I + C 扩展;16 位编码

假设普通内存可读/写且无额外权限故障。EEI 选项仅用于非 4 字节自然对齐地址;不建模端序字节、一般权限、设备副作用或陷入后状态。

0x0000000000002000 + 16 = 0x0000000000002010 (mod 2^64) → mem[0x0000000000002010] <- 0x12345678; PC+2; 通用寄存器不变
16 位编码字段
15..13
funct3
110
12..10
uimm[5:3]
010
9..7
rs1'
011
6
uimm[2]
0
5
uimm[6]
0
4..2
rs2'
010
1..0
op
00
寄存器映射
rs1'=011 -> x11; rs2'=010 -> x10
立即数还原
uimm[5:3]=010; uimm[2]=0; uimm[6]=0 -> 4 × 4 = 16 字节(零扩展)
计算
尚未计算
访问
尚未访问
当前架构状态

尚未提交;寄存器、内存与 PC 保持初始状态。

教学步骤展示 ISA 可见效果,不表示特定 CPU 的流水线、缓存或时序。

快速理解与检索要点

C.SW 的两个 3 位压缩寄存器字段映射到 x8-x15;它只把 rs2' 的低 32 位写入 rs1' 加按 4 缩放偏移的地址。

rs1' 和 rs2' 的 3 位编码均映射到 x8-x15。
非自然对齐的有效地址由 EEI 规定为完成访问或抛出地址未对齐/访问错误异常。

常见使用场景

数据存储

结合 «c.sw x8, 0(x10) # x10=0x2000, x8=0x12345678 -> word at 0x2000=0x12345678» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认 RV32C / RV64C 与 16 位指令编码条件。
  • 16 位 CS 格式;rs1′ 与 rs2′ 的两个 3 位字段选择 x8–x15。
语义检查
  • 字节偏移为 0–124 的 4 字节倍数,零扩展;偏移已含 ×4 缩放。
  • 成功访问只存储 rs2′ 低 32 位,不写通用寄存器;相同源和基址寄存器共用旧值。非自然对齐结果由 EEI 决定。

容易混淆 / 常见误区

寄存器限于x8-x15

常见问题

C.SW 会写入整个 RV64 寄存器吗?

不会。它与 sw 一样,只存储 rs2' 的低 32 位。