Arrays MIPS addi指令到数组基

Arrays MIPS addi指令到数组基,arrays,add,mips,Arrays,Add,Mips,我是MIPS的新手,很难理解这段代码的含义。。。 其中$s6是数组A的开始: addi $t0,$s6,4 我不确定这是否意味着$t0=A[4] -或- 如果它的意思是$t0=A[0]+4,则取A[0]中的值并加上四,然后将其保存回A[0] 任何帮助都将不胜感激 提前谢谢你 此指令意味着您正在获取存储在$s6中的值,并向其中添加4,然后将新值存储在$t0中。s6美元的价值保持不变$s6是一个已保存的临时寄存器,因此任何时候需要更改$s_u中的值时,都需要先将其保存到堆栈中。您没有更改$s6中的

我是MIPS的新手,很难理解这段代码的含义。。。 其中$s6是数组A的开始:

addi $t0,$s6,4
我不确定这是否意味着$t0=A[4] -或- 如果它的意思是$t0=A[0]+4,则取A[0]中的值并加上四,然后将其保存回A[0]

任何帮助都将不胜感激


提前谢谢你

此指令意味着您正在获取存储在$s6中的值,并向其中添加4,然后将新值存储在$t0中。s6美元的价值保持不变$s6是一个已保存的临时寄存器,因此任何时候需要更改$s_u中的值时,都需要先将其保存到堆栈中。您没有更改$s6中的值,因此不需要将其保存到堆栈中。您正在将其保存到一个临时寄存器中,这样您就不必担心重写了哪些内容。另外,$s6实际上是22或$R22,$t0是$r8

基本上是将数组从一个32位字增加到下一个指令/数据字

这是对你的评论的回应:


按照惯例,你说A[0]=7就是说寄存器$s6的内容引用的“内存地址”等于7$s6不等于7,但它在主存储器中所指向的值等于7。s6只包含一个我们理解或知道的数字,即地址。我们将4添加到$s6,因为我们希望添加足够的字节以到达数组的下一个元素。一个字是32位是4字节。按照惯例,我们想要添加4,它将以字节为单位进入下一个单词。一个字通常是32位或4字节长。将4个字节添加到s6后,我们不知道结果,因为我们没有被告知s6最初是什么,但我们知道t0现在本质上指向s6[1]。我不会说你正在为数组添加另一个索引。数组可能已经设置好,或者您可能会读取到末尾,但据我所知,mips不会给您带来错误。它只会告诉你在主内存中,你给它的地址所引用的位置是什么。可以是空白、有效、静态或程序数据的另一部分。需要了解更多程序的上下文才能了解更多信息。

大多数MIPS指令包括:

instruction $destination, $operands
这条具体指令的内存地址为$s6上数组A[]的开头,存储$t0上数组A[]的第四个字节的位置

据我所知,在$s6中,内存地址是A[0],而不是A[0]

也就是说,如果$s6=@A[0]是地址值0x00,那么$t0=$s6+4的值为0x04

根据数组A[](short、int、long)的类型,这可能意味着您将在$t0中指向数组的不同位置

在4字节长整数数组的正常情况下,$t0现在将指向[1]

行:

addi $t0,$s6,4
其中$s6是数组的基,它获取寄存器$s6的内容,向其中添加4,并将结果放入$t0。因此,如果$s6中的地址是0x00400000,则在addi指令之后,$t0将包含0x00400004

addi指令向源寄存器添加一个立即数,即整数值,并将结果存储在目标寄存器中,在本例中为$t0


因此,如果$s6是[0],那么$t0将成为[1],假设您有一个整数数组。如果您有一个字符数组,即字符串,那么$t0将成为[3]$t0不保存这些数组索引的值,它保存这些数组索引的地址,因为$s6最初保存的是地址。

谢谢。你把我逼到最后一句话。所以我很清楚,假设A[0]=7 addi$t0,$s6,4意味着$t0=11 A[0]的值将保持在7不变,我不会在数组中添加另一个标记,对吧?sw(存储字)和lw(加载字)不符合您所说的约定。SW R1 R2将获取R1中的值,并将其存储在R2中引用的主存(ram)地址中。lw r1 r2获取r2引用的主存内容,并将其存储在r1中。@aaronburns你说得对,只是为了不引起混淆而对其进行了编辑。谢谢,我相信我现在理解得更多了……我错误地认为我是在一个特定的标记上添加数组的内容。在向数组的基本索引添加4的情况下,我将前进到数组中的下一个单词或标记。谢谢大家的耐心和时间陪我度过这一切!非常感谢。这个说明可能是