【问题标题】:RISC-V Looping Through Array of WordsRISC-V 循环遍历单词数组
【发布时间】:2020-02-03 08:28:39
【问题描述】:

在我的课堂作业中,教授要求我们循环遍历一个由 10 个数字组成的给定数组并打印它们,以下是作为骨架代码提供的:

.data
arrayOfNums:
.word 0
.word 1
.word 255
.word 65536
.word 4294967295
.word 22
.word 314159
.word 161803
.word 42
.word 131929

K: .word 1337

.text
.globl main

main:
*Code goes here*

我不明白如何从 arrayOfNums 中删除单词列表。这是我第一次接触任何类型的汇编语言,所以详细的解释将非常有帮助,谢谢大家

【问题讨论】:

  • 我建议您查看la 伪指令,用于将标签arrayOfNums 表示的地址加载到寄存器中。该地址对应于数组的第一个元素(值0)。然后,使用寄存器中的此地址,您可以取消引用它以通过 lw 指令访问指向的元素。您可以一遍又一遍地执行最后一步,直到遍历所有元素,只需在每次迭代中将加载 arrayOfNums 的寄存器增加 4 以使寄存器内容指向下一个元素。
  • 此外,如果每个值是连续的,您不需要为每个值编写专用的.word 指令。您可以通过用逗号分隔值来编写一个:.word 0, 1, 255, ...
  • Pretty similar question 具有几乎相同的框架代码,但包含一个错误的解决方案。

标签: arrays loops assembly riscv


【解决方案1】:

在您的代码中,您必须解决以下任务:

  • 将数组的起始地址加载到寄存器中
  • 遍历数组,即从当前地址加载每个元素,
  • 用右边ecall打印加载的值
  • 将当前元素的地址增加一个字占用的字节数,
  • 如果地址仍然是数组的一部分,则有条件地跳转到循环的开头 - 提示:K 表示紧跟最后一个数组元素的地址
  • 调用退出ecall 来终止您的程序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2018-04-01
    • 2013-12-16
    相关资源
    最近更新 更多