首页/指令库/存储半精度浮点数
FSH

RISC-V FSH 指令详解

指令手册S-type

从内存存储 2 字节半精度浮点值。

指令语法

fsh rs2, offset(rs1)
操作数说明
rs2:源浮点寄存器,提供要写入内存的浮点编码。
rs1:整数基址寄存器。
offset:12 位有符号字节偏移,与 rs1 相加形成有效地址。
ZfhZfhmin浮点存储

指令编码

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

FSH 使用 opcode 0100111(0x27)、funct3 001。rs1 字段选择整数基址寄存器,rs2 字段选择源浮点寄存器,立即数字段提供字节偏移。

格式: S-type
opcode: 0100111 (0x27)
funct3: 001 (0x1)

指令行为说明

FSH 使用 x[rs1] 加 12 位有符号 offset 形成有效地址,把 f[rs2] 中的 2 字节半精度浮点编码存入内存。存储按位写出该格式宽度的数据,不执行数值转换。

快速理解与检索要点

FSH 是浮点寄存器和内存之间的半精度格式访存指令。地址计算和整数 load/store 一样使用基址加 12 位有符号字节偏移。

访问宽度是 2 字节;是否需要严格对齐以及非对齐处理取决于执行环境。
存储按位写出源浮点寄存器中的该格式编码。

常见使用场景

浮点访存

结合 «fsh f10, 4(x11) ; store lower 16 bits of f10 to [x11+4]» 等实际代码理解该场景。

数据加载与存储

结合 «fsh f10, 4(x11) ; store lower 16 bits of f10 to [x11+4]» 等实际代码理解该场景。

使用前检查清单

语法检查
  • rs2:源浮点寄存器,提供要写入内存的浮点编码。
  • rs1:整数基址寄存器。
  • offset:12 位有符号字节偏移,与 rs1 相加形成有效地址。
语义检查
  • 确认 offset 是字节偏移,不是元素索引。
  • 确认存储写出的是源浮点寄存器中的该格式编码,不执行格式转换。

容易混淆 / 常见误区

offset 是 12 位有符号字节偏移,不是元素索引。
自然对齐时才有规范的原子性保证;非对齐支持由执行环境定义。
存储写出半精度格式宽度的编码,不检查或转换成其他格式。

常见问题

FSH 的 offset 单位是什么?

offset 是字节偏移,由 12 位有符号立即数字段编码。

FSH 会转换浮点格式吗?

不会。访存指令搬移该格式的编码位;格式转换应使用 FCVT。