Я понял это!Причина, по которой печатались все случаи, была в том, что мой синтаксис был неверным!Я перевел мою условную ошибку.
Если вы заметили, все 3 моих печатных заявления следуют одно за другим.Первоначально я форматировал их таким образом, потому что думал, что программный элемент управления переключится на правильный оператор печати после нахождения меньшего числа в сравнении.Но это не работает таким образом.Все, что видит ассемблер, это три последовательных оператора печати, поэтому он их печатает.
Если я хотел, чтобы выполнялся только один оператор печати, я должен был сделать какое-то изменение программы, которое будет либо переходить, либо переходить к другому коду, либо выходить из программы.Каждый оператор печати должен заканчиваться примерно так:
# print $s0 as lowest
print_lowest_s0:
li $v0, 1
la $a0, ($s0) # loads low number from comparison from $s0
syscall # prints low number
j hi_int_message # changes program control to another label
С тех пор я изменил свою условную логику, поэтому я не могу быть на 100% уверен, что то, что указано в моем вопросе выше, является правильной логикой,Вот как выглядит моя логика сейчас:
# compare $s0 < $s1
slt $t0, $s0, $s1 # if $s0 < $s1
beq $t0, 0, compare_s1_s2 # else: $t0 == 0, branch to compare $s1 < $s2 label
slt $t1, $s0, $s2 # true: compare if $s0 < $s2
beq $t1, 0, print_lowest_s2 # else: $t1 == 0, $s2 == lowest; branch to label
j print_lowest_s0 # true: $s0 == lowest; jump to $s0 print label
Тем не менее, основная задача этого вопроса заключалась в том, чтобы перестать печатать все.Надеюсь, что это может помочь кому-то позже!