arrays - 在 RISC-V 中遍历数组的不同方法
问题描述
我目前正在通过 RISC-V 学习基本的汇编语言,我对遍历数组的有效方法有点困惑。
如果给定 a0 作为指向整数数组的指针,这足以移动到下一个元素吗?
- lw s0, 0(a0) #指向数组的指针存储在s0中
- lw s0 4(s0) #每次要移动到下一个元素时调用这个?
如果我也想修改该位置元素的实际值,我可以简单地使用 sw 吗?
我也知道使用 slli/srli 也可以让你转变,谁能解释这个概念?
谢谢!
解决方案
遍历数组(有 n 个元素)的基本模式是这样的:
- 将数组起始地址存储在寄存器 X 中
Y = X + n * 4
使用移位和添加指令将地址存储在寄存器 Y(例如)中最后一个元素之后- 取消引用 X(即
lw
从 X 中存在的地址加载单词)并对该数组元素执行某些操作 add
使用指令将 X 增加字长(例如 4 个字节)- 跳转到步骤 3。如果 X 仍然小于 Y
- 遍历完成
关于修改:您修改寄存器中加载的数组元素,然后您可以将新的寄存器值存储回您的数组中sw
。
推荐阅读
- python - 当内部有while循环时,tkinter模块崩溃
- android - Kotlin 中的类型化参数回调函数
- swift - 清除缓存目录显示 SQLite 错误
- google-cloud-platform - Cloud Functions:创建并启动 GCE VM,然后从 GCS 复制启动脚本
- byte - 不同符号数的算术溢出,6502 汇编
- python - Python Pandas 保留分析内存错误
- swift - 更新模型时不更新详细视图(使用列表)SwiftUI
- azure - azure 函数应用程序 python 请求在本地工作正常,但从函数应用程序给出连接错误
- docker - 如何在不运行 docker 镜像的情况下查看文件?
- sql - 将“约翰·乔·史密斯先生”分成“先生”“约翰”“乔”“史密斯”