我正在編寫循環訪問10個數字的程序。前9個元素的值大於0,第10個元素的值爲0.當遇到0時,循環應該中斷。通過陣列循環MIPS彙編
i=0;
while(A[i]!=0)
{
A[i]=A[i]+1;
i++;
}
我知道我可以使用「BEQ」打破循環,如果該寄存器的值等於0。不過,我不知道有足夠的瞭解在內存中操縱值。
這是我第一次使用MIPS,你會發現它是一團糟。如果你不能爲我解決這個問題,你能給我一些建議嗎?
.data #by default, the "data segment" starts at address 0x10010000
.word 1
.word 2
.word 3
.word 4
.word 5
.word 6
.word 7
.word 8
.word 9
.word 0
.text #instructions start below
# MIPS assembly code
lui $a0, 0x1001 # $a0 = 0x10010000
addi $a1, $zero, 0 # i = 0
jal increment # call the procedure
這裏就是我最迷失:
increment:
lui $a0, 0x1001 # $a0 = 0x10010000
beq $a0, $zero, else # if $a0 holds 0 goto 'else'
addi $a0, $a0, 2 # +2
addi $a1, $zero, 1 # i = i + 1
jr $ra #jump to caller
$ V0應保存所有增加值的總和。
else:
add $a0, $v0, $zero #copy result as input to syscall
addi $v0,$zero,1 #service 1 for syscall is print integer
syscall
以無限循環結束。
infinite: j infinite
你說$ V0應保存所有增加值的總和,但這並不是C代碼做什麼。它增加數組中的所有值都是1.你想要哪一個? – Gene 2013-02-17 00:35:25
他們兩個都是真的,循環將值增加1,$ v0存儲所有遞增值的總和,所以如果它能工作,也許我可以添加1後,將新值添加到循環中的$ v0 – user2079483 2013-02-17 00:40:06