2013-10-24 79 views
0

我有一些代碼來總結數組50次。現在我被要求至少減少1條指令。我所能想到的只是將此循環增加到100次,然後在每個循環中添加一個元素。但是這會增加指令數量。MIPS和數組的優化

 addi $t1, $0, 50 
LOOP: lw $s1, 0($s0) 
     add $s2, $s2, $s1 
     lw $s1, 4($s0) 
     add $s2, $s2, $s1 
     addi $s0, $s0, 8 
     subi $t1, $t1, 1 
     bne $t1, $0, LOOP 

請注意,您只能重寫這段代碼,不會寫另一sumArray算法

回答

1

這是一個指令少,通過「組合」的地址和循環計數器,從而總結數組向後:

 addi $t1, $s0, 400 # $t1 = $s0 + 50*2*sizeof(word) 
LOOP: lw $s1, -4($t1) 
     add $s2, $s2, $s1 
     lw $s1, -8($t1) 
     add $s2, $s2, $s1 
     sub $t1, $t1, 8 
     bne $t1, $s0, LOOP 
+0

我明白了你的觀點,但是這不會減少很多指導嗎?你的代碼將運行25次循環加1 = 151條指令,而原始指令有351條指令? – Casper

+0

糟糕。開頭的200應該是400.它應該和原始代碼做同樣數量的迭代,每次迭代只需要一個指令。 – Michael

+0

爲最後一行,爲什麼你與$ s0比較,我認爲它只是$ 0? – Casper