0

したがって、私の 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

問題は、プログラムが最初に入力した数字だけを出力することです。たとえば、3 つの入力として 60,50,70 を入力すると、60 が 3 回出力されます。なぜこれがこれをしているのかわかりません。私のorder3関数またはこれらの値を出力する方法に関係があると思います。どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

0

syscall を介して整数を出力するには、常にレジスタ $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
于 2014-10-24T05:43:40.717 に答える