1

私はこの単純なプログラムをMIPSアセンブリで作成しました。

.data
.text
main:
li $v0, 12 # read_char
syscall
move $a0, $v0
li $v0, 11 # print_char
syscall
j main # repeat forever

QtSpimで実行すると、正しく機能します。コンソールから文字を取得し、入力するとすぐに印刷して、繰り返します。ただし、QtSpimのコンソールでは、プログラムの入力を貼り付けることができません(できますが、読み取られません)。そこで、spim for Linux(コマンドライン)バージョン9.1.8で実行してみました。動作しますが、文字が入力されてもすぐには反応しません。カットアンドペーストせずに文字を入力する場合でも、常に改行を待ちます。だから私はこの振る舞いを期待しています:

(spim) load "echo.asm"
(spim) run
hheelllloo

しかし、私は代わりにこれを手に入れます:

(spim) load "echo.asm"
(spim) run
hello [I press Enter here]
hello

何か案は?前もって感謝します。

4

1 に答える 1

5

これは、端末がデフォルトでラインバッファリングされているためです。端末からの読み取りは、行全体が読み取られるまで戻りません。これは、バックスペースなどが、専用の端末処理ライブラリ(ncurses、readlineなど)を使用しないプログラムで動作できるようにするためです。コマンドを実行すると、このバッファリングを無効にできます

stty -icanon

次にspimを実行すると、プログラムは入力された文字をエコーし​​ます。完了したら、バッファリングされた入力を次のように再度有効にする必要があります

stty icanon

バッファなしモードは他のプログラムで問題を引き起こす可能性があるためです。

于 2013-02-08T17:36:55.607 に答える