如何将生成的总和值存储到内存 RISC-V

How can I store the resulting sum values to memory RISC-V

在 RISC-V 中,我可以使用什么代码来提取值并将值存储到内存中?

例如,我可以使用:

sw s1, 0(t6)        #stores updated value at t6 

这是将结果保存到新的内存地址t6还是将其放回数组中?因此所有数组值都存储在 s1

RV32I 是一个 load-store 架构,其中只有加载和存储指令访问内存,而算术指令仅在 CPU 寄存器上运行。加载和存储指令在寄存器和内存之间传输一个值。

负载

 imm[11:0]  | rs1  | funct3 |  rd  | opcode
    12      |  5   |   3    |  5   |   7
offset[11:0]| base | width  | dest |  LOAD

商店

 imm[11:5]  | rs2 | rs1 | funct3 |  imm[4:0]  | opcode
      7     |  5  |  5  |    3   |      5     |   7
offset[11:5]| src |base | width  | offset[4:0]| STORE

说明:

Load  Byte          LB        rd,rs1,imm
Load  Halfword      LH        rd,rs1,imm 
Load  Word          L{W|D|Q}  rd,rs1,imm 
Load  Byte Unsigned LBU       rd,rs1,imm 
Load  Half Unsigned L{H|W|D}U rd,rs1,imm 

Store Byte          SB        rs1,rs2,imm 
Store Halfword      SH        rs1,rs2,imm 
Store Word          S{W|D|Q}  rs1,rs2,imm

其中 rs - 寄存器源,rd - 寄存器目标,imm - 立即值。

换句话说,我们只是在内存中加载和存储数据。如果我们想从内存加载我们应该使用:

lw  t1, 28(a0)

其中 t1 - 临时寄存器,地址 a0 处内存读取操作的目标,偏移量为 28。如果 a0 等于 4000,我们将从中读取的地址将为 4028。

同理存储,反之亦然:

sw  t1, 28(a0)

正在将t1寄存器的值存入内存地址a0+28。 强烈建议将数据与其数据类型对齐,否则运行速度会很慢! 同样对于 RV64,我们只是将地址 space 扩展为 64 位。其余几乎相同。 试着看看这个文档,它对 riscv 程序员非常有用: https://riscv.org//wp-content/uploads/2017/05/riscv-spec-v2.2.pdf