Как определить наименьшее значение трех целых чисел в MIPS без использования циклов

Мне удалось получить пользовательский ввод, как показано в моем коде, но я отчаянно не в состоянии получить наименьшее число. Большое спасибо...

Вот инструкции для этого.

«Напишите программу на ассемблере, которая будет считывать от пользователя три 32-битных целых числа со знаком. Определите наименьшее из этих трех чисел и отобразите этот результат. Не используйте циклы. Запрашивайте у пользователя каждое введенное целое число».

.data
Msg1: .asciiz "Enter the first integer: "
Msg2: .asciiz "Enter the second integer: "
Msg3: .asciiz "Enter the third integer: "
Msg4: .asciiz "the the smallest numberis: "

.text
     # Print the first message
 li $v0, 4
 la $a0, Msg1
 syscall

 # Prompt the user to enter the first integer
 li $v0, 5
 syscall

 # Store the first integer in $t0
 move $t0, $v0

 # Print the second message
 li $v0, 4
 la $a0, Msg2
 syscall

 # Prompt the user to enter the second integer
 li $v0, 5
 syscall

 # Store the first integer in $t1
 move $t1, $v0

 # Print the third message
 li $v0, 4
 la $a0, Msg3
 syscall

 # Prompt the user to enter the third interger
 li $v0, 5
 syscall

 # Store the first integer in $t0
 move $t2, $v0

 # Determine the smallest Number
 slt $s0, $t1, $t0
 beq $s0, $zero, L1

person team224    schedule 12.10.2017    source источник
comment
Вам все еще разрешено ветвление? Если это так, довольно просто условно перепрыгнуть через инструкцию перемещения, чтобы получить максимум из первых двух, а затем сделать это снова. В противном случае ищите минимальные/максимальные последовательности без ответвлений. (IDK, если MIPS имеет cmov, или если вам нужно построить его из SUB/SRA/AND).   -  person Peter Cordes    schedule 12.10.2017
comment
Вы можете сделать это для двух чисел? Затем, когда у вас есть наименьшее из двух, вместо того, чтобы печатать результат, просто снова сделайте наименьшее из двух (наименьшее из предыдущего результата против третьего значения), и у вас будет наименьшее из трех. Это всего лишь несколько строк кода.   -  person Ped7g    schedule 12.10.2017
comment
мин (а, б, с) = мин (мин (а, б), с)   -  person Tommylee2k    schedule 12.10.2017
comment
Спасибо всем, что нашли время, помогая мне разобраться в этом вопросе. Наконец-то я смог получить ожидаемые результаты.   -  person team224    schedule 14.10.2017


Ответы (1)


Спасибо всем за ответы, наконец-то я смог определить наименьшее число. Код отлично работает на MARS.

.data
Msg1: .asciiz "Enter the first integer: "
Msg2: .asciiz "Enter the second integer: "
Msg3: .asciiz "Enter the third integer: "

.text
     # Print the first message
 li $v0, 4
 la $a0, Msg1
 syscall

 # Prompt the user to enter the first integer
 li $v0, 5
 syscall

 # Store the first integer in $t0
 move $t0, $v0

 # Print the second message
 li $v0, 4
 la $a0, Msg2
 syscall

 # Prompt the user to enter the second integer
 li $v0, 5
 syscall

 # Store the first integer in $t1
 move $t1, $v0

 # Print the third message
 li $v0, 4
 la $a0, Msg3
 syscall

 # Prompt the user to enter the third interger
 li $v0, 5
 syscall

 # Store the first integer in $t0
 move $t2, $v0

 # Determine the smallest Number
 blt $t0, $t1, L0
 blt $t1, $t0, L3


 li, $v0, 10
 syscall

 L0:
   blt $t0, $t2, L2
   blt $t2, $t0, L3

 L2:
   li $v0, 1
   move $a0, $t0
   syscall
   li, $v0, 10
   syscall

 L3:
   blt $t1, $t2, L4
   blt $t2, $t1, L5

 L4:
    li $v0, 1
    move $a0, $t1
    syscall
    li, $v0, 10
    syscall

 L5:
    li $v0, 1
    move $a0, $t2
    syscall
    li, $v0, 10
    syscall


 li, $v0, 10
 syscall
person team224    schedule 14.10.2017
comment
Подсказка: вместо того, чтобы дублировать весь блок из 2 системных вызовов, потребовалось бы намного меньше кода, чтобы просто разветвиться вокруг move инструкций и иметь блок li / syscall один раз в конце, как только у вас будет правильное целое число в $a0. - person Peter Cordes; 14.10.2017