Итак, у меня есть массив размером 10, и я хочу создать разреженный массив (что означает, что каждый раз, когда элемент массива имеет ненулевое значение, сохраняйте свою позицию и значение в разреженном массиве, пример: массив= {0,0,1,0,5}, sparseArray = {2,1,4,5}), проблема в том, что по какой-то причине значение $ t4 (а также ($ t2)) меняется, и яЯ не могу понять, почему, например, когда я пытаюсь напечатать массив после вызова подпрограммы createSparse, он полностью изменяется.
createSparse:
li $t0, 0 #t0: counter for iteration in the for loop for checking all the array elements
li $t1, 0 #t1: counter for the length of the sparse array
move $t2, $a1 #t2: contains the address for the first element of the array
move $t3, $a2 #t3: contains the address for the first element of the sparse array
loop2:
beq $t0, 10, return2 #start of the for iteration.
lw $t4, ($t2) #load the value of the array temporarily in $t4
beq $t4, 0, continue #check if $t4 == 0
sw $t0, ($t3) #if it is not zero store the position it had in the array in the sparseArray
addi $t3, $t3, 4 #go to the next element of the sparseArray
sw $t4, ($t3) #store the value
addi $t3, $t3, 4 #go to the next element of the sparse array
addi $t1, $t1, 2 #length of the sparse array increased by 2
addi $t0, $t0, 1 #t0 += 1;
addi $t2, $t2, 4 #t2 += 4;
j loop2
continue: #if the value of the element of the array we checked equals zero then we go to check the next element of the array
addi $t0, $t0, 1
addi $t2, $t2, 4
j loop2
return2:
move $v0, $a2
move $v1, $t1
jr $ra