首页/指令库/存储双字
SD

RISC-V SD 指令详解

指令手册S-type

RV64I:将rs2的64位值存入内存;RV32 Zilsd:从偶/奇寄存器对存储64位值。

指令语法

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

指令编码

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

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

格式: S-type
opcode: 0100011 (0x23)
funct3: 011 (0x3)

指令行为说明

SD 指令在 RV64I 中采用 S 型格式(opcode=0100011, funct3=011),将 rs2 的 64 位值存到 rs1 加符号扩展 12 位偏移量处。在 RV32 的 Zilsd 扩展中,同一助记符/编码表示“从寄存器对存储双字”:64 位值来自 rs2 和 rs2+1,且 rs2 必须为偶数。自然对齐地址为 8 字节倍数;Zilsd 中 4 字节对齐但非 8 字节对齐的访问可拆为两个原子 word 访问,并仍可能产生 misaligned trap。

常见使用场景

RV64专用操作

结合 «sd x10, 24(x2) # store 64-bit value to stack at offset 24» 等实际代码理解该场景。

数据存储

结合 «sd x10, 24(x2) # store 64-bit value to stack at offset 24» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

RV64I 语义是单个 64 位寄存器存储;RV32 Zilsd 语义是偶/奇寄存器对存储。
Zilsd 中 rs2 必须为偶数;奇数 rs2 编码为保留。
偏移量为符号扩展 12 位;最可移植的是 8 字节自然对齐访问。