2013-05-29 57 views
0

我對MIPS相對較新,並且一直在找到示例問題來擴展我的技能。我正面臨着這個問題:MIPS - 使用循環麻煩將值存儲到數組中

減去另一個從另一個arrary的元素並替換 第一個數組中的值。給定數組a和b,每個長度爲10個字,對於每個數值i,其中設置c = A [i] -B [i]。那麼,如果設置A [i] = 0。 否則,設置A [i] = c。

完成代碼,使數據值正確加載, 計算和存儲。您必須使用循環通過負載 並存儲

這裏是我的編碼的嘗試,但是我發現我的$12$13ab的第一個值不加載分別,因爲我將他們喜歡迭代。任何幫助將非常感謝!

.data 0x10010000 
.word 23  # a[0] 
.word 6 
.word 11 
.word 7 
.word 44 
.word 32 
.word 9 
.word 16 
.word 29 
.word 13 

.data 0x10010040 
.word 6 # b[0] 
.word 22 
.word 9 
.word 1 
.word 3 
.word 15 
.word 10 
.word 4 
.word 30 
.word 8 


.text 
.globl main 



main: 

lui $16, 0x1001 # $16 contains the address of a[0] 

add $17, $16, 0 
ori $17, $17, 0x0040  # $17 contains the address of b[0] 
li $9, 0    #initiate iterator value 
loop: 
lw $12, 0($16)  #load register with value of a 
nop 
lw $13, 0($17)  #load register with value of b 
nop 

li $8, 0    #set c to 0 
sub $8, $12, $13  # c = A(i) - B(i) 
blt $8, 0, negative  # if c is negative branch 
nop 
li $12, 0 
add $12, $12, $8  #else A(i) = c 
addi $9, $9, 1   #add 1 to iteration value 
sw $12, 0($16)   #store value back into a 
nop 
bne $9, 10, update  #check that we have not the last array 
nop 
b exit     #if so finish program 
nop 
negative: 
li $12, 0 
sw $12, 0($16)   #store value back into a 
addi $9, $9, 1   #add 1 to iteration value 
beq $9, 10, exit 
nop 
b loop 
nop 
update: 
add $16, $16, 4   #move to the next value in a 
add $17, $17, 4   #move to next value in b 
b loop 
nop 
exit: 
b exit 
nop 

回答

0

您沒有更新您的指針($16$17)在減法的結果是否定的。 您應該刪除線

nop 
    b loop 
    nop 

位於negative標籤後beq $9, 10, exit後。

我在你的代碼中注意到的其他東西是你在lwsw之後加上nop,這是不需要的。

+0

謝謝,我完全錯過了。不過,我仍然有這樣的問題:在執行這行代碼時:lw $ 12,0($ 16)和lw $ 13,0($ 17)我期望在第一次迭代中將23和6的值存儲在這些寄存器中,而不是I得到兩個值爲0,因此我的程序從來沒有真正進入'否定:'爲什麼它不加載我的數組的第一個字節?再次感謝! @gusbro – user2421360

+0

我在MARS 4.2中試過你的代碼,它工作正常(在刪除這個答案中提到的行後)。嘗試一步一步地運行你的代碼,你應該看到寄存器$ 12獲得值0x17,寄存器$ 13獲得值0x6。也許你沒有運行你發佈的代碼... – gusbro