Menu Close

爱芯网论坛

Please or 注册 to create posts and topics.

RISC-V 的加载和存储指令集

RISC-V 的加载和存储指令集

RISC-V 的加载和存储指令集用于从内存中读取数据(加载)和将数据写入内存(存储)。这些指令支持各种数据类型和数据宽度。以下是 RISC-V 中常见的加载和存储指令:

1. 加载指令(Load Instructions)

加载指令从内存中读取数据并将其放入寄存器。加载指令的形式通常为: LOAD rd, offset(rs1)
其中 rd 是目标寄存器,rs1 是基地址寄存器,offset 是内存地址的偏移量。

  • LB (Load Byte)
    • LB rd, offset(rs1)
      从内存中读取一个字节(8 位),并将其符号扩展为 32 位后存入 rd。
  • LBU (Load Byte Unsigned)
    • LBU rd, offset(rs1)
      从内存中读取一个字节(8 位),并将其零扩展为 32 位后存入 rd。
  • LH (Load Halfword)
    • LH rd, offset(rs1)
      从内存中读取半字(16 位),并将其符号扩展为 32 位后存入 rd。
  • LHU (Load Halfword Unsigned)
    • LHU rd, offset(rs1)
      从内存中读取半字(16 位),并将其零扩展为 32 位后存入 rd。
  • LW (Load Word)
    • LW rd, offset(rs1)
      从内存中读取一个字(32 位),并存入 rd。
  • LD (Load Doubleword)
    • LD rd, offset(rs1)
      (仅 RV64)从内存中读取一个双字(64 位),并存入 rd。

2. 存储指令(Store Instructions)

存储指令将寄存器中的数据写入内存。存储指令的形式通常为: STORE rs2, offset(rs1)
其中 rs2 是源寄存器,rs1 是基地址寄存器,offset 是内存地址的偏移量。

  • SB (Store Byte)
    • SB rs2, offset(rs1)
      将 rs2 中的最低 8 位(字节)写入内存地址 offset(rs1)。
  • SH (Store Halfword)
    • SH rs2, offset(rs1)
      将 rs2 中的最低 16 位(半字)写入内存地址 offset(rs1)。
  • SW (Store Word)
    • SW rs2, offset(rs1)
      将 rs2 中的 32 位(字)写入内存地址 offset(rs1)。
  • SD (Store Doubleword)
    • SD rs2, offset(rs1)
      (仅 RV64)将 rs2 中的 64 位(双字)写入内存地址 offset(rs1)。

3. 浮点加载和存储指令(Floating-Point Load/Store Instructions)

这些指令用于处理浮点数的加载和存储,依赖 F 或 D 扩展。

  • FLW (Floating-Point Load Word)
    • FLW rd, offset(rs1)
      从内存中加载单精度浮点数(32 位),并存入浮点寄存器 rd。
  • FLD (Floating-Point Load Double)
    • FLD rd, offset(rs1)
      从内存中加载双精度浮点数(64 位),并存入浮点寄存器 rd。
  • FSW (Floating-Point Store Word)
    • FSW rs2, offset(rs1)
      将浮点寄存器 rs2 中的单精度浮点数(32 位)存入内存。
  • FSD (Floating-Point Store Double)
    • FSD rs2, offset(rs1)
      将浮点寄存器 rs2 中的双精度浮点数(64 位)存入内存。

4. 扩展支持

在 64 位版本的 RISC-V 中(RV64),会有更多的加载和存储指令来支持 64 位宽的数据(双字),如 LD 和 SD。在 32 位系统上(RV32),加载和存储主要针对字(32 位)及更小的数据类型。

总结

  • 加载指令:从内存读取数据到寄存器,支持不同宽度的数据(字节、半字、字、双字)。
  • 存储指令:将寄存器中的数据写入内存,支持不同宽度的数据。
  • 浮点加载和存储:处理浮点数的读取和写入。