7

システムコール機能を備えたSPIMSやMARSのようなものを使用しています。

私は次のように文字列を読んでいます(そしてそれを印刷できるので機能します):

li $v0, 8
la $a0, string
li $a1, 256
syscall

ただし、文字列の1文字にアクセスする際に問題が発生します。したがって、最初の文字にアクセスしてそれを印刷したい場合は、これを試しています。

la $t0, string
lb $a0, ($t0)
li $v0, 4
sys call

私がこのようなことをしようとすると:

la $a0, string
li $v0, 4
syscall

これにより、文字列が文字列全体を指すため、文字列全体が出力されます。

私が次のようなことを試みた場合:

la $a0, string
lb $a0, ($t0)
li $v0, 4
syscall

それは私に範囲外のエラーを与えます。理由はわかりませんが、文字は1バイトの長さではなく、文字列の最初のバイトを$ a0にロードするだけですか?

ありがとうございました

4

1 に答える 1

12

MARS syscall関数のドキュメントを見ると、使用しているサービス4$a0が「印刷するnullで終了する文字列のアドレス」であると想定していることがわかります。これは、表示されている動作を説明しています。

必要なのは、下位バイトを文字として出力する関数11「printcharacter」です。言い換えれば、以下が機能するはずです(テストされていません):

la $t0, string
lb $a0, ($t0)
li $v0, 11
syscall
于 2011-09-28T22:42:39.313 に答える