Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly MIPS汇编程序未输出正确的整数_Assembly_Mips_Qtspim - Fatal编程技术网

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

Assembly MIPS汇编程序未输出正确的整数,assembly,mips,qtspim,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 or

所以,我的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函数或者我输出这些值的方式有关。任何帮助都将不胜感激


谢谢。

您应该始终使用寄存器$a0通过syscall打印整数

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

QtSpim有一个单步按钮和一个寄存器查看器。我建议你用它们来发现问题。提示:您在几个地方使用了错误的寄存器,
swap
子例程将不会返回到
order3
子例程。