Нахождение самого маленького и самого большого в массиве в MIPS? - PullRequest
0 голосов
/ 24 февраля 2019

Мне нужно создать программу для моего курса, которая будет искать в массиве целых чисел и выводить самые маленькие и самые большие целые числа в массиве в MIPS.

Для вывода я просто получаю 0 для обоихмаксимум и минимум.

Почему это происходит?

    .data
    intArray: .word 3, 53, -76, 34, 643, -234, 143, 2, -33, 64
    floatArray: .float 43.53, 45.2244, 25, 64.035, 328, 23.85, 23.86544, 93.4, 46.6543256, 0.00345
    intMinOut: .asciiz "The smallest number in the integer array is: "
    intMaxOut: .asciiz "The largest number in the integer array is: "
.text

main:
    la $t0, intArray
    addi $t1, $zero, 9 
    addi $t2, $zero, 0
    sw $t3, intArray($zero)
    sw $t5, intArray($zero)

    findSmallest:
        beqz $t1, findLargest
        sub $t1, $t1, 1
        blt $t5, $t3, intSmaller 
        addi $t2, $t2, 1
        j findSmallest

    intSmaller:
        lw $t4, intArray($t2) 
        move $t3, $t4 
        addi $t2, $t2, 1 
        j findSmallest 

    findLargest:
        addi $t1, $zero, 9
        addi $t2, $zero, 0
        intLgLoop:
            beqz $t1, print 
            sub $t1, $t1, 1
            bgt $t3, $t5, intLarger
            addi $t2, $t2, 1
            j intLgLoop

    intLarger:
        lw $t4, intArray($t2)
        move $t5, $t4
        addi $t2, $t2, 1
        j intLgLoop

    print:
        la $a0, intMinOut
        li $v0, 4
        syscall
        move $a0, $t3
        li $v0, 1
        syscall
        la $a0, intMaxOut
        li $v0, 4
        syscall
        move $a0, $t5
        li $v0, 1
        syscall
        b end

end:
    .macro done
    li $v0, 10
    syscall
    .end_macro
    done
...