簡體   English   中英

MIPS匯編程序無法輸出正確的整數

[英]MIPS Assembly program not outputting the correct integers

因此,我的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM