, поэтому мне было дано задание, в котором я должен найти индекс значений max и min в созданном пользователем 10-значном массиве на ассемблере MIPS.Я смог найти максимальное значение, но у меня возникли проблемы с поиском минимального значения.Я подумал, что это должно быть простое решение, когда я найду максимальное значение, но я ошибся.
Вот то, что я должен найти максимальное значение:
deleteMax:
# $s7 is the register where the address of the array is stored
# $s0 is the register where the array size is stored
# Clear out unimportant registers
addi $s1, $zero, 0
addi $t0, $zero, 0
addi $s3, $zero, 0
addi $s4, $zero, 0
addi $t6, $zero, 0
addi $t7, $zero, 0
addi $t0, $zero, 0 # Address of first element in bytes
li $t3, -1 # Max index
li $s2, 0 # Max value
li $t1, 0 # Counter
loop:
sll $s1, $t1, 2
add $s1, $s1, $s7
lw $s3, 0($s1) # Load the first element into $s3
li $v0, 1
move $a0, $s3
syscall
slt $t2, $s3, $s2 # If $s3 < $s2, $t2 = 1, if $s3 >= $s2, $t2 = 0
bne $t2, $zero, find_max
ori $s2, $s3, 0 # Updates the maximum value
ori $t3, $t1, 0 # Updates the maximum value index
find_max:
addi $t1, $t1,1 # Increase the counter
bne $t1, $s0, loop # if the counter hasn't reached the end, go
back to the loop
j print_max
Это делает то, что я хочу: Найти максимум и его индекс.Однако, когда я пытаюсь переключить эти две строки кодов:
slt $t2, $s3, $s2 # If $s3 < $s2, $t2 = 1, if $s3 >= $s2, $t2 = 0
bne $t2, $zero, find_max
, скажем:
slt $t2, $s3, $s2 # If $s3 < $s2, $t2 = 1, if $s3 >= $s2, $t2 = 0
bne $t2, 1, find_max
Минимальное значение равно 0?
Я не уверен, почему это происходит, и не уверен, что я могу сделать для моей текущей ситуации, чтобы найти минимальное значение.
Я надеюсь, что объяснил сам, и мой код + комментарии имеютобъяснил ситуацию достаточно.Я более чем рад ответить на еще большее замешательство, которое вы, ребята, можете испытать.