Алгоритм нахождения индекса 2D-массива в цикле в MIPS? - PullRequest
0 голосов
/ 08 марта 2019

Мне дали следующую программу в качестве мини-задания для моего кода MIPS, и мы просто должны заполнить оставшиеся 4 первые строки в sumLoop, чтобы найти индекс текущего элемента в 2D-массиве. Я пробовал несколько вещей, но я не думаю, что алгоритм, который я использую, является правильным. Каков будет правильный способ сделать это? (P.S. Я вынул то, что я пытался вызвать меньше путаницы, то есть я должен использовать все, что в настоящее время в этом коде). Спасибо.

.data 
# the next two lines define an array (mdArray as a 2x2 multidimensional 
array)
mdArray:    .word 2,5  
        .word 3,7


size: .word 2  #dimension of the array (2x2 in this case, note this is only 
for square matrices)
.eqv DATA_SIZE 4 # number of bytes per element, 4 for ints, 1 for chars, 8 
for doubles

.text
main:
la $a0, mdArray # base address
lw $a1, size # size
jal sumDiagonal  #sum of diagonals, in our starting example, this is 9.  
move $a0, $v0 # this is because sumDiagonal will return it's last value in 
$v0
li $v0, 1
syscall

#and done
li $v0, 10
syscall

sumDiagonal:

li $v0,0 #sum =0
li $t0,0 #t0 as the index

    sumLoop: 
        #The next 4 lines are the bit you need to derive and fill in yourself
        mul 
        add
        mul 
        add

        lw $t2, ($t1)  #getting element 
        add $v0, $v0, $t2 # sum = sum + mdArray[i][i]

        addi $t0, $t0, 1 # i = i+1
        blt $t0, $a1, sumLoop  #if i < size, loop again

jr $ra  #ends sum diagonal
...