C.SW

RISC-V C.SW 指令详解

指令手册C-type

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

指令语法

c.sw rs2', offset(rs1')
操作数说明
压缩指令仅 16 位,寄存器选择通常限制在 x8–x15。
立即数字段较窄,查看特定压缩指令的完整编码。
C压缩指令

指令行为说明

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

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

只展示 RISC-V ISA 可见的 16 位编码、操作数和状态;不模拟流水线、缓存、端序实现或时序。

c.sw,()
执行环境

仅当有效地址不是 4 的倍数时,此 EEI 选项才影响结果;自然对齐访问不得引发地址未对齐异常。

16 位编码字段
15..13
funct3
110
12..10
uimm[5:3]
010
9..7
rs1'
010
6
uimm[2]
0
5
uimm[6]
0
4..2
rs2'
010
1..0
op
00
执行数据路径
地址
0x0000000000002000 + 16 = 0x0000000000002010
对齐
4 字节自然对齐
存储
0x0000000012345678 -> low 32 bits 0x12345678
架构可见结果

mem[0x0000000000002010] <- 0x12345678

快速理解与检索要点

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

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

常见使用场景

数据存储

结合 «c.sw x8, 0(x10)» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认压缩指令 16 位编码只在支持 C 扩展的 CPU 上可用。
  • 确认 rd/rs1'/rs2' 字段映射到 x8–x15。
语义检查
  • 注意压缩指令的操作数空间有限。
  • 确认这条压缩指令有对应的 32 位展开形式。

容易混淆 / 常见误区

寄存器限于x8-x15

常见问题

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

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