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

RISC-V FLD 指令详解

指令手册I-type

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

指令语法

fld rd, offset(rs1)
操作数说明
RV32/RV64 D(依赖 F);32 位 I-type LOAD-FP,opcode=0000111、funct3=011。
rd 选择 f0–f31,rs1 选择整数 x0–x31;offset 为 -2048..2047 的有符号字节偏移。f0 可写,x0 提供零基址。
有效地址为 x[rs1]+符号扩展偏移,按 XLEN 回绕;成功时原样加载 64 位,保留 NaN payload。更宽 FLEN 的高位按 NaN-boxing 置 1。
自然对齐为 8 字节;还要求 XLEN≥64 才有规范原子性保证;非对齐完成或异常由 EEI 决定。
D浮点加载

指令行为说明

FLD 使用 I-type LOAD-FP 编码,从 x[rs1] 加 12 位有符号字节偏移形成的有效地址加载 64 位双精度浮点位模式,并写入浮点寄存器 f[rd]。传输不会修改位模式或规范化 NaN payload。仅当有效地址自然对齐且 XLEN 不小于 64 时,FLD 的访问原子性由官方 D 扩展规则保证;非对齐访问由执行环境约束。

FLD 指令解析与执行动画

展示 D 扩展浮点加载的 ISA 可见流程:解析 I-type 编码,用整数基址加 12 位偏移形成地址,并传输 64 位浮点位模式。

rd
offset
rs1
fld
,
,
执行环境
fmt=D / width=64
基址寄存器是整数 x 寄存器
fflags 不改变
31..20
19..15
14..12
11..7
6..0
000000010000
imm[11:0]
01010
rs1
011
FLD
01010
rd
0000111
LOAD-FP
执行数据路径
instruction
0x01053507
opcode
0000111 -> LOAD-FP
funct3
011 -> 64-bit load
offset
000000010000 -> 16
rd/rs1
fa0(f10) / a0(x10)
read
a0(x10) = 0x0000000000001000
address
等待 Address 计算
write
尚未传输;目标寄存器不变
当前步骤

Fetch:展示 32-bit I-type 编码

机器码按 I-type 字段切分;浮点访存不是 OP-FP 算术编码。

encoding: 0x01053507
syntax : fld fa0(f10), 16(a0(x10))
result : 尚未传输;目标寄存器不变
地址与位模式传输
base
0x0000000000001000
offset
16
address
等待 Address 计算
alignment
8-byte aligned
loaded bits
尚未传输;目标寄存器不变

FLD 传输 64 位双精度位模式。 当前自然对齐且 XLEN=64,官方保证该访问原子性。 当前示例自然对齐,不能引发地址未对齐异常。

假定扩展可用、FS 已启用、FLEN=64,内存可读且除所选未对齐结果外无其他异常。位模式输入表示完整的 64 位加载值;f0 可写,x0 基址固定为零。步骤为教学视图。

该动画只展示 RISC-V D 扩展浮点加载/存储的 ISA 可见地址计算和位模式传输;不模拟 cache、总线、异常处理器、FPU 流水线或微架构时序。

快速理解与检索要点

FLD 是 D 扩展双精度浮点加载。它用整数寄存器 rs1 加 12 位有符号字节偏移形成地址,从内存取 64 位双精度位模式写入浮点寄存器 rd;传输不做浮点舍入。

I-type LOAD-FP:imm[11:0]、rs1、funct3=011、rd、opcode=0000111。
有效地址 = x[rs1] + sign_extend(offset),偏移单位是字节。
FLD 传输 64 位位模式;自然对齐且 XLEN≥64 时有访问原子性保证。

常见使用场景

浮点基本运算

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

使用前检查清单

语法检查
  • RV32/RV64 D(依赖 F);32 位 I-type LOAD-FP,opcode=0000111、funct3=011。
  • rd 选择 f0–f31,rs1 选择整数 x0–x31;offset 为 -2048..2047 的有符号字节偏移。f0 可写,x0 提供零基址。
语义检查
  • 有效地址为 x[rs1]+符号扩展偏移,按 XLEN 回绕;成功时原样加载 64 位,保留 NaN payload。更宽 FLEN 的高位按 NaN-boxing 置 1。
  • 自然对齐为 8 字节;还要求 XLEN≥64 才有规范原子性保证;非对齐完成或异常由 EEI 决定。

容易混淆 / 常见误区

rs1 是整数基址寄存器,rd 是浮点目标寄存器。
offset 是 12 位有符号字节偏移,范围 -2048 到 2047。
FLD 传输 64 位双精度位模式,不执行舍入或 NaN payload 规范化。
原子性保证要求自然对齐且 XLEN≥64;不要把非对齐 FLD 当作可移植同步原语。

常见问题

FLD 的 offset 是 8 字节倍数吗?

不是。offset 是 12 位有符号字节偏移;自然对齐是访问地址属性,不是编码单位。

FLD 会改变 NaN payload 吗?

不会。官方 D 扩展说明加载/存储传输不修改位模式,非规范 NaN payload 会被保留。