Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays RISC-V中遍历阵列的不同方法_Arrays_Assembly_Riscv - Fatal编程技术网

Arrays RISC-V中遍历阵列的不同方法

Arrays RISC-V中遍历阵列的不同方法,arrays,assembly,riscv,Arrays,Assembly,Riscv,我目前正在通过RISC-V学习基本汇编语言,对循环数组的有效方法有点困惑 如果给定a0作为指向整数数组的指针,这是否足以移动到下一个元素 lw s0,0(a0)#数组指针存储在s0中 lw s0 4(s0)#每次要移动到下一个元素时都调用此命令 如果我想修改该位置元素的实际值,我可以简单地使用sw吗 我还知道,使用slli/srli也可以让您进行转换,有人能解释一下这个概念吗 谢谢大家! 遍历数组(包含n个元素)的基本模式如下: 将阵列起始地址存储在寄存器X中 使用shift和add指令存储

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

如果给定a0作为指向整数数组的指针,这是否足以移动到下一个元素

  • lw s0,0(a0)#数组指针存储在s0中
  • lw s0 4(s0)#每次要移动到下一个元素时都调用此命令
如果我想修改该位置元素的实际值,我可以简单地使用sw吗

我还知道,使用slli/srli也可以让您进行转换,有人能解释一下这个概念吗


谢谢大家!

遍历数组(包含n个元素)的基本模式如下:

  • 将阵列起始地址存储在寄存器X中
  • 使用shift和add指令存储寄存器Y中最后一个元素后的地址(例如,
    Y=X+n*4
  • 取消引用X(即
    lw
    以从X中存在的地址加载单词),并对该数组元素执行某些操作
  • 使用
    add
    指令按字长(例如4字节)递增X
  • 转到步骤3。如果X仍然小于Y
  • 遍历完成

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

    将新的寄存器值存储回数组。让我们将您的想法带到逻辑的极端:如果数组有1000个元素长怎么办?是否要编写不同的
    lw
    来访问每个元素?很不切实际,不是吗?相反,您希望增加指针变量本身,并使用循环。不,
    lw s0,4(s0)
    不增加s0,而是取消引用
    4+s0
    。你可以用它来浏览一个链表,其中
    。next
    成员是第二个单词。移位实际上是一个不同的主题,最好放在不同的问题中。虽然使用查询
    位移位
    的web搜索应该能够提供足够的资料来解释这个概念。