1

QTSpim を MIPS シミュレーターとして使用していますが、ユーザーが入力した整数を出力する方法を理解するのに苦労しています。これまでのところ、私のコードは次のとおりです。

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

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

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

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

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

jal order3

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

li $v0, 10
syscall


swap:
move $t0, $a0
move $a0, $a1
move $a1, $t0
jr $ra

swap1:
move $t0, $a1
move $a1, $a2
move $a2, $t0
jr $ra

order3:
bgt $a0, $a1, swap
bgt $a1, $a2, swap1
bgt $a0, $a1, swap
jr $ra

最初の整数を出力しようとするたびに、5 が出力されますが、出力されるべきではありません。なぜこれが起こっているのかわかりません。誰かが私のコードの欠陥を指摘できれば、それは素晴らしいことです。

ありがとう。

4

1 に答える 1

1

syscallが実行される前に、の結果を使用しようとしsyscallています:

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

それは次のようになります。

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

他の 2 つのread_intsyscall についても同様です。

次に、数値が にあるときに、order3ルーチンが をチェック/変更しているという事実もあります。$a0..$a2$s0..$s2

于 2014-10-08T17:18:48.613 に答える