C.LW

RISC-V C.LW 指令详解

指令手册C-type

从内存加载 32 位字并符号扩展到 XLEN 后写入 rd'。CL格式。

指令语法

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

指令行为说明

C.LW (CL格式,rd'和rs1'仅限x8-x15)从 rs1' 加零扩展、按 4 字节缩放偏移形成的地址加载 32 位字,并符号扩展到 XLEN 后写入 rd'。展开为 lw rd',offset(rs1');偏移范围为 0-124 字节。

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

此可交互模型只展示架构可见的解码、操作数、状态更新;不表示流水线、缓存或时序。

c.lw,()
执行环境
编码字段
15..13
funct3
010
12..10
uimm[5:3]
010
9..7
rs1'
010
6
uimm[2]
0
5
uimm[6]
0
4..2
rd'
000
1..0
op
00
执行数据路径
解码
CL: rd' / rs1' / uimm
操作数
x10 = 0x0000000000002000
执行
EA = 0x0000000000002010
状态
x8 <- sext.w

地址为 4 字节自然对齐;该示例假定 EEI 允许访问。

架构可见结果

等待状态更新:上方高亮显示当前步骤的字段和计算,尚未提交架构可见结果。

快速理解与检索要点

C.LW 使用 CL 格式,rs1' 加零扩展且按 4 缩放的偏移形成地址,加载字后符号扩展到 XLEN。

rd' 和 rs1' 都只能编码 x8-x15。
非自然对齐有效地址的完成或异常由 EEI 决定。

常见使用场景

数据加载

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

使用前检查清单

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

容易混淆 / 常见误区

rd'和rs1'仅限x8-x15
偏移量为零扩展(非符号扩展),范围0-124字节且按 4 字节缩放;RV64 仍对加载的 32 位字做符号扩展
有效地址非自然对齐时,是否完成或引发 address-misaligned/access-fault 由 EEI 决定

常见问题

RV64 上 C.LW 会零扩展吗?

不会;它与 LW 一样把加载的 32 位字符号扩展到 XLEN。