MIPS汇编程序不输出正确的整数

时间:2014-10-09 04:00:50

标签: assembly mips qtspim

因此,我的MIPS程序让用户输入3个整数并从最小到最大排序并打印出来。我的代码如下:

.data
prompt: .asciiz "Please enter an integer: "

.text
main:
li $v0, 4
la $a0, prompt
syscall

li $v0, 5
syscall
move $s0, $v0


li $v0, 5
syscall
move $s1, $v0


li $v0, 5
syscall
move $s2, $v0


jal order3


li $v0, 1
move $a0, $s0
syscall

li $v0, 1
move $a1, $s1
syscall

li $v0, 1
move $a2, $s2
syscall

li $v0, 10
syscall

swap:
move $t0, $s0
move $s0, $s1
move $s1, $t0
jr $ra

swap1:
move $t0, $s1
move $s1, $s2
move $s2, $t0
jr $ra

order3:
bgt $s0, $s1, swap
bgt $s1, $s2, swap1
bgt $s0, $s1, swap
jr $ra

问题是程序只打印出我输入的第一个号码。例如,如果我输入60,50,70作为我的3个输入,它输出60三次。我不知道为什么这样做。我猜测它与我的order3功能或我输出这些值的方式有关。任何帮助将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:0)

您应该始终使用寄存器$ a0通过系统调用打印整数。

li $v0, 1
move $a0, $s0
syscall

li $v0, 1
move $a0, $s1
syscall

li $v0, 1
move $a0, $s2
syscall

似乎早午餐(bgt)不保存指针返回。因此,最好使用这种类型的跳跃。

order3:
blt $s0, $s1, next
move $t0, $s0
move $s0, $s1
move $s1, $t0

next:
blt $s1, $s2, next2
move $t0, $s1
move $s1, $s2
move $s2, $t0

next2:
blt $s0, $s1, fin
move $t0, $s0
move $s0, $s1
move $s1, $t0

fin:
jr $ra