0

プログラムを再起動するには「Y」(メインに戻る分岐) または「N」(プログラムを終了する分岐) のいずれかをユーザーに入力させようとしています。syscall opcode 12 を使用して単一の文字を読み取っています

endCheck:
la $a0, newLine             # Print the newLine
li $v0, 4
syscall

la $a0, endPrompt           # print the Start over message
li $v0, 4
syscall

li $v0, 12              # take in char input
syscall
move $t0, $v0

lb $t1, ($t0)               # Load the char byte into t1

beq $t1, 89, main           # Go back to start if they entered 'Y'
bne $t1, 78, endCheck           # Ask the user again because input was not 'N' or 'Y'

li $v0, 10              
syscall

lb 行でエラーが発生しています。また、データ セグメントに 1 バイトのスペースを割り当て、入力を 1 文字の文字列として読み取った場合でも、無限ループが発生します (コンパイルが正しく行われると、常に endCheck に分岐します)。

4

2 に答える 2

1

これは、この古い投稿を見ている人にとって役立つかもしれません。syscall 12 は、spim を使用してこの無限ループに入りますが、qtspim を使用すると適切に動作します。spim は 2010 年から開発されていませんが、emacs が統合されていたので、ある程度は利用していました。

于 2019-12-02T18:29:40.620 に答える
1

を使用するsyscall 12と、文字自体が に返され$v0ます。文字を読み取るためのアドレスは提供しません。lbを完全に省略できます。

したがって、 を使用$t1する必要がある場合は、比較に を使用してい$t0ます。

于 2012-11-09T06:56:21.667 に答える