0
我對MIPS相對較新,並且一直在找到示例問題來擴展我的技能。我正面臨着這個問題:MIPS - 使用循環麻煩將值存儲到數組中
減去另一個從另一個arrary的元素並替換 第一個數組中的值。給定數組a和b,每個長度爲10個字,對於每個數值i,其中設置c = A [i] -B [i]。那麼,如果設置A [i] = 0。 否則,設置A [i] = c。
完成代碼,使數據值正確加載, 計算和存儲。您必須使用循環通過負載 並存儲
這裏是我的編碼的嘗試,但是我發現我的$12
和$13
在a
和b
的第一個值不加載分別,因爲我將他們喜歡迭代。任何幫助將非常感謝!
.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
謝謝,我完全錯過了。不過,我仍然有這樣的問題:在執行這行代碼時:lw $ 12,0($ 16)和lw $ 13,0($ 17)我期望在第一次迭代中將23和6的值存儲在這些寄存器中,而不是I得到兩個值爲0,因此我的程序從來沒有真正進入'否定:'爲什麼它不加載我的數組的第一個字節?再次感謝! @gusbro – user2421360
我在MARS 4.2中試過你的代碼,它工作正常(在刪除這個答案中提到的行後)。嘗試一步一步地運行你的代碼,你應該看到寄存器$ 12獲得值0x17,寄存器$ 13獲得值0x6。也許你沒有運行你發佈的代碼... – gusbro