2012-10-17 148 views
2

我是MIPS新手,不明白這是怎麼回事:將整數值添加到數組?

假設字數組A存儲0,1,2,3,4,5,6,7,8,9,按此順序。假設A的起始地址是$ s0。在下面的指令之後,這個數組的值是什麼?

addi $t0, $s0, 32 
lw $t1, 0($t0) 
sw $t1, 4($t0) 

(a) 0,1,2,3,4,5,6,7,8,9 
(b) 0,1,2,3,4,5,6,7,9,9 
(c) 0,1,2,3,4,5,6,7,8,8 
(d) None of the above. 

答案是「c」,但我不明白爲什麼。這是我的思維過程:代碼

第一行:

由於這是一個整數陣列,加入32到地址$ s0和給它$ T0將意味着給予A的[地址8 ]到$ t0。 A [8],因爲每個整數需要4個字節,因此增加0至$ S0將導致A的地址[0]和將4 $ S0將導致A [1]的地址,等等...

的代碼下聯:

0($ T0)被引用在$ T0的第一個元素(這我不知道那是什麼),並將其加載到寄存器$ T1。的代碼

第三行:

的$ T1的地址被存儲在存儲器中爲$ T0的第一個元素,這是由圖4($ T0)表示。

再次,上面是我的思維過程,這是最有可能錯

回答

1

你的思維過程是正確的,這就是爲什麼答案C)是正確的原因之一。第一行addi $t0, $s0, 32分配$ t0 = $ s0 + 32。作爲$ S0包含陣列A的第一個元素的地址,知道該數組的每個元素佔用4個字節,$ T0現在將保持陣列的第九元素的地址A,A [8] (從0開始的索引)。所以* $ T0 = address_of(A [8])*

這樣,第二行,lw $t1, 0($t0),將加載字存儲在地址$ 0 + 0,這是在A [8],並存儲該字註冊$ t1。因此,$ t1 = 8

第三行,sw $t1, 4($t0),將包含在$ T1字存儲在地址$ T0 + 4,這是address_of(A [9])。因此,A [9] = 8