微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将得出的总和值存储到内存RISC-V

如何解决如何将得出的总和值存储到内存RISC-V

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

例如,我可以使用:

s1

这会将结果保存到新的内存地址nextcloud:fpm还是将其放回并存储在数组中?因此,所有数组值都存储在fastcgi_proxy

解决方法

RV32I是一种加载存储体系结构,其中只有加载和存储指令才能访问内存,而算术指令仅对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,imm 
Load  Word          L{W|D|Q}  rd,imm 
Load  Byte Unsigned LBU       rd,imm 
Load  Half Unsigned L{H|W|D}U rd,imm 

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

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

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

lw  t1,28(a0)

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

以相同的方式存储,反之亦然:

sw  t1,28(a0)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。