Мне дают:
$ a0 = адрес массива
$ a1 = размер этого массива
Я должен вернуться:
$ v0 = макс.
$ v1 = позиция максимума (индексирование на основе 1)
Мой код работает, как и предполагалось, для размера массива = 0, но не проходит все остальные тесты, возвращая max = {первый элемент}, позицию = 1 каждый раз.
maxAndArg:
li $v0, -2147483648 # $v0(MAX) is the smallest negative number
li $v1, 0 # $v1(POSITION) starts from zero
li $t3, 0 # $t3(i in a normal language) will be used to loop
li $t4, 0 # $t4 will be used to show the position in the array
L1:
beq $t3,$a1,EXIT # if (i = arrsize) goto EXIT
sll $t4,$t4,2 # $t4 = $t4 * 4
add $t5,$a0,$t4 # $t5 now has the ADDRESS of the $t4 element
lw $t5,0($t5) # $t5 now has the VALUE of the $t4 element
ble $v0,$t5,L2 # if (max =< a[$t4]) goto L2
srl $t4,$t4,2 # $t4 = $t4 / 4 (Original value)
addi $t4,$t4,1 # $t4 = $t4 + 1
addi $t3,$t3,1 # $t3 = $t3 + 1 ((i++))
j L1
L2:
add $v0,$t5,0 # max = $t5
add $v1,$t3,1 # position = $t3
EXIT:
jr $ra #return