MIPS: определение минимального значения трех целых чисел. Неправильный вывод. Почему?

.data
prompt: .asciiz "Enter in 3 integers, one per line, last one being a negative number: "
sum:    .asciiz "The sum is: "
min:    .asciiz "The minimum is: "
max:    .asciiz "The maximum is: "
mean:   .asciiz "The mean is: "
variance:   .asciiz "The variance is: "
newline:    .asciiz "\n"
count:    .word 3
array:    .space 12
.text
main:
    #prints prompt msg
    li    $v0, 4
    la    $a0, prompt
    syscall

    #takes first integer from user and stores into $t1
    li    $v0, 5
    syscall
    move     $t1, $v0


    #takes second integer from user and stores into $t2
    li    $v0, 5
    syscall
    move     $t2, $v0


    #takes third integer from user and stores into $t3
    li    $v0, 5
    syscall
    move    $t3, $v0


    #min/max utilizing array
    la    $t0, array        #initializing array at a[0]
    li    $t4, 0            #min
    li    $t5, 0            #max
    li    $t6, 0            #i
    li    $t7, 0
    sw    $t1, 4($t0)        #user first input stored in a[1]
    sw    $t2, 8($t0)        #user second input stored in a[2]
    sw    $t3, 12($t0)        #user third input stored in a[3]


blt $t1, $t2, Else
ble $t1, $t3, Else2
j T1P

Else:
    blt $t2, $t3, Else2
    j T2P

Else2:
    blt $t3, $t2, T3P

T1P:
    move $a0, $t1
    li   $v0, 1
    syscall

T2P:
    move $a0, $t2
    li   $v0, 1
    syscall

T3P:
    move $a0, $t3
    li   $v0, 1
    syscall

Хорошо, я пытаюсь найти минимальное значение из трех введенных пользователем целых чисел.

Программа запустится и позволит пользователю ввести свои три целых числа.

Что происходит, так это то, что вместо печати минимального значения распечатываются все три значения.

blt $t1, $t2, Else
    ble $t1, $t3, Else2
    j T1P

    Else:
        blt $t2, $t3, Else2
        j T2P

    Else2:
        blt $t3, $t2, T3P

    T1P:
        move $a0, $t1
        li   $v0, 1
        syscall

    T2P:
        move $a0, $t2
        li   $v0, 1
        syscall

    T3P:
        move $a0, $t3
        li   $v0, 1
        syscall

Это часть кода, которая должна проверять, какое значение наименьшее, но это не так.

Я не понимаю, почему печатаются все три целых числа. Я думал, что мои проверки ошибок предотвратят печать всех трех целых чисел. Я запускаю эту программу в QTSPIM.

Пример: пользователь вводит 4, 3 и 2 как свои три целых числа. Консоль показывает 4, 3 и 2 вместо того, чтобы просто печатать наименьшее целое.


person MipsMoreLikeWhips    schedule 12.02.2014    source источник
comment
Нет ничего, что препятствовало бы выполнению кода после T2P и T3P, если вы перешли на T1P. Метка - это просто имя, которое вы можете использовать для удобной ссылки на определенное место в вашей программе; это не какой-то магический барьер. Используйте инструкцию ветвления всякий раз, когда вы хотите изменить поток выполнения.   -  person Michael    schedule 12.02.2014


Ответы (1)


Вам нужно будет выйти из разделов условного выполнения после их выполнения. Другими словами:

    blt $t1, $t2, Else
    ble $t1, $t3, Else2
    j T1P

Else:
    blt $t2, $t3, Else2
    j T2P

Else2:
    blt $t3, $t2, T3P

T1P:
    move $a0, $t1
    li   $v0, 1
    syscall
    j END

T2P:
    move $a0, $t2
    li   $v0, 1
    syscall
    j END

T3P:
    move $a0, $t3
    li   $v0, 1
    syscall

END:
person aqua    schedule 12.02.2014