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

Different ways to traverse arrays in RISC-V

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

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

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

我也知道使用 slli/srli 也可以让你移动,谁能解释一下这个概念?

谢谢!

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

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

关于修改:您在寄存器中修改加载的数组元素,然后您可以使用 sw.

将新的寄存器值存储回您的数组中