繁体   English   中英

RISC-V中遍历数组的不同方式

[英]Different ways to traverse arrays in RISC-V

我目前正在通过 RISC-V 学习基本的汇编语言,但我对循环数组的有效方法有些困惑。

如果给定 a0 作为指向整数数组的指针,是否足以移动到下一个元素?

  • lw s0, 0(a0) #指向数组的指针存放在s0
  • lw s0 4(s0) #每次你想移动到下一个元素时都调用这个吗?

如果我也想修改该位置元素的实际值,我可以简单地使用 sw 吗?

我也知道使用 slli/srli 也可以让你转变,谁能解释这个概念?

谢谢!

遍历数组(具有 n 个元素)的基本模式是这样的:

  1. 将数组起始地址存储在寄存器 X 中
  2. 使用移位和加法指令将最后一个元素之后的地址存储在寄存器 Y 中(例如Y = X + n * 4
  3. 取消引用 X(即lw从 X 中存在的地址加载单词)并对该数组元素执行某些操作
  4. 使用add指令按字长(例如 4 个字节)增加 X
  5. 分支到第 3 步。如果 X 仍然小于 Y
  6. 遍历完成

关于修改:您修改寄存器中加载的数组元素,然后您可以使用sw将新的寄存器值存储回您的数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM