RISC-V 的加载和存储指令集
引用于 AI 在 2024年10月22日, 上午2:40RISC-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 位)及更小的数据类型。
总结
- 加载指令:从内存读取数据到寄存器,支持不同宽度的数据(字节、半字、字、双字)。
- 存储指令:将寄存器中的数据写入内存,支持不同宽度的数据。
- 浮点加载和存储:处理浮点数的读取和写入。
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。
- LB rd, offset(rs1)
- LBU (Load Byte Unsigned)
- LBU rd, offset(rs1)
从内存中读取一个字节(8 位),并将其零扩展为 32 位后存入 rd。
- LBU rd, offset(rs1)
- LH (Load Halfword)
- LH rd, offset(rs1)
从内存中读取半字(16 位),并将其符号扩展为 32 位后存入 rd。
- LH rd, offset(rs1)
- LHU (Load Halfword Unsigned)
- LHU rd, offset(rs1)
从内存中读取半字(16 位),并将其零扩展为 32 位后存入 rd。
- LHU rd, offset(rs1)
- LW (Load Word)
- LW rd, offset(rs1)
从内存中读取一个字(32 位),并存入 rd。
- LW rd, offset(rs1)
- LD (Load Doubleword)
- LD rd, offset(rs1)
(仅 RV64)从内存中读取一个双字(64 位),并存入 rd。
- LD rd, offset(rs1)
2. 存储指令(Store Instructions)
存储指令将寄存器中的数据写入内存。存储指令的形式通常为: STORE rs2, offset(rs1)
其中 rs2 是源寄存器,rs1 是基地址寄存器,offset 是内存地址的偏移量。
- SB (Store Byte)
- SB rs2, offset(rs1)
将 rs2 中的最低 8 位(字节)写入内存地址 offset(rs1)。
- SB rs2, offset(rs1)
- SH (Store Halfword)
- SH rs2, offset(rs1)
将 rs2 中的最低 16 位(半字)写入内存地址 offset(rs1)。
- SH rs2, offset(rs1)
- SW (Store Word)
- SW rs2, offset(rs1)
将 rs2 中的 32 位(字)写入内存地址 offset(rs1)。
- SW rs2, offset(rs1)
- SD (Store Doubleword)
- SD rs2, offset(rs1)
(仅 RV64)将 rs2 中的 64 位(双字)写入内存地址 offset(rs1)。
- SD rs2, offset(rs1)
3. 浮点加载和存储指令(Floating-Point Load/Store Instructions)
这些指令用于处理浮点数的加载和存储,依赖 F 或 D 扩展。
- FLW (Floating-Point Load Word)
- FLW rd, offset(rs1)
从内存中加载单精度浮点数(32 位),并存入浮点寄存器 rd。
- FLW rd, offset(rs1)
- FLD (Floating-Point Load Double)
- FLD rd, offset(rs1)
从内存中加载双精度浮点数(64 位),并存入浮点寄存器 rd。
- FLD rd, offset(rs1)
- FSW (Floating-Point Store Word)
- FSW rs2, offset(rs1)
将浮点寄存器 rs2 中的单精度浮点数(32 位)存入内存。
- FSW rs2, offset(rs1)
- FSD (Floating-Point Store Double)
- FSD rs2, offset(rs1)
将浮点寄存器 rs2 中的双精度浮点数(64 位)存入内存。
- FSD rs2, offset(rs1)
4. 扩展支持
在 64 位版本的 RISC-V 中(RV64),会有更多的加载和存储指令来支持 64 位宽的数据(双字),如 LD 和 SD。在 32 位系统上(RV32),加载和存储主要针对字(32 位)及更小的数据类型。
总结
- 加载指令:从内存读取数据到寄存器,支持不同宽度的数据(字节、半字、字、双字)。
- 存储指令:将寄存器中的数据写入内存,支持不同宽度的数据。
- 浮点加载和存储:处理浮点数的读取和写入。