私は10個の数字の配列をループするプログラムに取り組んでいます。最初の9つの要素の値は0より大きく、10番目の要素の値は0です。0に遭遇するとループが中断するはずです。
i=0;
while(A[i]!=0)
{
A[i]=A[i]+1;
i++;
}
レジスタの値が0に等しい場合、「beq」を使用してループを中断できることはわかっています。ただし、メモリ内の値の操作については十分にわかりません。
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