我是MIPS的新手,我很难搞清楚这段代码的含义...... 其中$ s6是数组A的开头:
addi $t0,$s6,4
我不确定这是否意味着$ t0 = A [4] -要么- 如果它意味着$ t0 = A [0] + 4,取A [0]中的值并加4,将其保存回A [0]
任何帮助都会非常感激。
提前谢谢!!
答案 0 :(得分:1)
此指令表示您正在获取存储在$ s6中的值并向其中添加4并将该新值存储在$ t0中。 $ s6中的值保持不变。 $ s6是一个保存的临时寄存器,所以每当你需要更改$ s_中的值时,你需要先将它保存到堆栈中。您没有更改$ s6中的值,因此您无需将其保存到堆栈中。您将它保存到临时寄存器,您不必担心您所写的内容。另外$ s6实际上是Regester 22或$ R22而$ t0是$ r8 ....
您基本上将数组增加一个32位字到下一个指令/数据字。
这是对你评论的回应:
按照约定你说A [0] = 7你说的是寄存器$ s6的内容引用的“内存地址”,等于7. $ s6不等于7,但它在主存中指的是什么确实。 s6只保存一个我们解释或知道的地址。我们将4添加到$ s6,因为我们想要添加足够的字节来获取数组的下一个元素。一个字是32位是4个字节。按照惯例,我们想要添加4,它将以字节为单位来获取下一个单词。一个字通常是32位或4字节长。在向s6添加4个字节后,我们不知道结果,因为我们没有被告知s6最初是什么,但我们知道t0现在实质上指向s6 [1]。我不会说你正在为数组添加另一个指标。数组已经设置好了,或者你可能会在结束时读取但是mips,因为我知道它不会给你一个错误。它只会告诉你在你给它的地址所引用的主存储器中的位置。可以是空白,有效,保险或其他部分程序数据。需要了解更多关于该计划的背景知识。
答案 1 :(得分:1)
该行:
addi $t0,$s6,4
其中$ s6是数组的基础,取寄存器$ s6的内容,向它们添加4并将结果放入$ t0。因此,如果$ s6中的地址是0x00400000,则在addi指令之后,$ t0将包含0x00400004。
addi指令将立即值(即整数值)添加到源寄存器,并将结果存储在目标寄存器中,在本例中为$ t0。
因此,如果$ s6是A [0],则假设您有一个整数数组,则$ t0变为A [1]。如果你有一个字符数组,即一个字符串,那么$ t0就变成了A [3]。 $ t0不保存这些数组索引的值,它保存这些数组索引的地址,因为这是$ s6最初持有的。
答案 2 :(得分:0)
大多数MIPS说明是:
instruction $destination, $operands
这个具体指令,在$ s6上具有数组A []开头的内存地址,存储A []的第4个字节在$ t0的位置。
据我所知,在$ s6中你有A [0]的记忆地址,而不是值A [0]
也就是说,如果$ s6 = @A [0]是地址值0x00,那么$ t0 = $ s6 + 4的值为0x04
根据数组A [](short,int,long)的类型,这可能意味着你在$ t0中指向数组的不同位置。
在4字节长整数数组的正常情况下,$ t0现在指向A [1]