首页/指令库/加载单精度浮点数
FLW

RISC-V FLW 指令详解

指令手册I-type

从内存加载一个32位单精度浮点数到浮点寄存器。

指令语法

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

指令编码

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

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

格式: I-type
opcode: 0000111 (0x07)
funct3: 010 (0x2)

指令行为说明

FLW 指令使用基地址+偏移量寻址模式,从内存中加载一个单精度浮点值到浮点寄存器 rd。有效地址为 rs1 中的基地址加上12位有符号字节偏移量。FLW 仅在有效地址自然对齐时保证原子性执行。该指令不修改传输中的比特位,特别是非规范 NaN 的有效载荷会被保留。

快速理解与检索要点

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

宽度为 32 位;FLW 写入浮点寄存器时按规范进行 NaN-boxing。
自然对齐访问的原子性和非对齐处理受规范与执行环境约束;不要把它当成通用同步原语。

常见使用场景

浮点基本运算

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

使用前检查清单

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

容易混淆 / 常见误区

非对齐地址可能导致陷阱或性能下降
RV64中,FLW将FP寄存器的高32位设为全1(NaN-boxing),保持浮点寄存器规范格式
偏移量仅±2KB范围

常见问题

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

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

偏移范围是多少?

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