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

标签 arrays assembly riscv

我目前正在通过 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 将新的寄存器值存储回您的数组。

关于arrays - 在 RISC-V 中遍历数组的不同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60430331/

相关文章:

python - cython:将 2D numpy 数组传递给 cdef 函数

java - 中位数算法的中位数不能始终如一地工作

javascript - 按对象属性的键对对象数组进行排序

assembly - 如何确定可执行文件中反汇编代码的位置?

c - 我应该学习汇编语言或 C 来理解 "real programming"是如何工作的吗?

riscv - Chisel 3 的队列标准库接口(interface)综合了什么?

linux - 在 Docker 中部署交叉编译工具链

javascript - 使用 JS Proxy 拒绝数组输入

assembly - 有序/无序比较是什么意思?

ada - RISC-V FE310-G002 是否支持 Ada 任务?