首页/指令库/加载双字
LD

RISC-V LD 指令详解

指令手册I-type

RV64I:从内存加载64位双字到rd;RV32 Zilsd:加载64位值到偶/奇寄存器对。

指令语法

ld rd, offset(rs1)
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数所在的寄存器。
立即数 imm:12 位有符号立即数,符号扩展后与 rs1 进行运算。
RV64IZilsd内存加载

指令编码

31..20
imm[11:0]
19..15
rs1
14..12
funct3
11..7
rd
6..0
opcode

LD 使用 opcode 0000011(0x03)、funct3 011。rs1 字段选择源寄存器,12 位立即数提供第二操作数,rd 选择目标寄存器。

格式: I-type
opcode: 0000011 (0x03)
funct3: 011 (0x3)

指令行为说明

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

常见使用场景

RV64专用操作

结合 «ld x10, 16(x2) # load 64-bit value from stack at offset 16» 等实际代码理解该场景。

数据加载

结合 «ld x10, 16(x2) # load 64-bit value from stack at offset 16» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

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