我目前正在通过 RISC-V 学习基本的汇编语言,我对遍历数组的有效方法有点困惑。
如果我们将 a0 作为指向整数数组的指针,是否足以移动到下一个元素?
- lw s0, 0(a0) #指向数组的指针存储在s0中
- lw s0 4(s0) #每次你想移动到下一个元素时调用这个?
如果我也想修改该位置元素的实际值,我可以简单地使用 sw 吗?
我也知道使用 slli/srli 也可以让你移动,谁能解释一下这个概念?
谢谢!
最佳答案
遍历数组(有 n 个元素)的基本模式是这样的:
- 将数组起始地址存入寄存器X
- 使用移位和加法指令将地址存储在寄存器 Y 中的最后一个元素之后(例如
Y = X + n * 4
) - 取消引用 X(即
lw
从 X 中存在的地址加载单词)并对该数组元素执行某些操作 - 使用
add
指令按字长(例如 4 个字节)递增 X - 跳转到第3步,如果X仍然小于Y
- 遍历完成
关于修改:您修改寄存器中加载的数组元素,然后您可以使用 sw
将新的寄存器值存储回您的数组。
关于arrays - 在 RISC-V 中遍历数组的不同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60430331/