我正在编写循环访问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