首页/指令库/加载双精度浮点数
FLD

RISC-V FLD 指令详解

指令手册I-type

从内存加载64位双精度浮点数到浮点寄存器。

指令语法

fld rd, offset(rs1)
操作数说明
rd:目标浮点寄存器。
rs1:整数基址寄存器。
offset:12 位有符号字节偏移,与 rs1 相加形成有效地址。
D浮点加载

指令编码

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

FLD 使用 opcode 0000111(0x07)、funct3 011。rs1 字段选择整数基址寄存器,立即数字段提供字节偏移,rd 字段选择目标浮点寄存器。

格式: I-type
opcode: 0000111 (0x07)
funct3: 011 (0x3)

指令行为说明

FLD 使用基地址+偏移量寻址(I 型格式),从内存加载 64 位双精度浮点值到浮点寄存器 f[rd]。偏移量为 12 位有符号立即数,基地址在 x[rs1] 中。加载的值可能是 NaN-boxed 单精度值。仅当有效地址自然对齐且 XLEN≥64 时保证原子性。位不修改传输,非规范 NaN 载荷保留。

快速理解与检索要点

FLD 是浮点加载/存储指令,使用整数寄存器 rs1 加 12 位有符号偏移形成有效地址,并在内存与浮点寄存器之间传输位模式。

宽度为 64 位;D 扩展的双精度传输不解释或规范化 NaN payload。
自然对齐访问的原子性和非对齐处理受规范与执行环境约束;不要把它当成通用同步原语。

常见使用场景

浮点基本运算

结合 «fld f0, 0(x10)» 等实际代码理解该场景。

使用前检查清单

语法检查
  • rd:目标浮点寄存器。
  • rs1:整数基址寄存器。
  • offset:12 位有符号字节偏移,与 rs1 相加形成有效地址。
语义检查
  • 确认 offset 是字节偏移,不是元素索引。
  • 确认目标地址的自然对齐和执行环境的非对齐访问规则。

容易混淆 / 常见误区

非对齐地址:XLEN<64 时无原子性保证;XLEN≥64 时执行环境决定是透明处理还是产生陷阱
偏移量仅为 12 位有符号(±2KB 范围),大偏移需先计算地址

常见问题

地址寄存器是浮点寄存器吗?

不是。基址 rs1 是整数寄存器,数据源/目的才是浮点寄存器。

偏移范围是多少?

偏移是 12 位有符号立即数,编码范围为 -2048 到 2047 字节。