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 的控制台不允许我粘贴程序的输入(我可以这样做,但不会被读取)。所以我尝试在Linux(命令行)版本 9.1.8的spim中运行它。它可以工作,但输入字符时不会立即做出反应;它总是等待换行符,即使在输入没有剪切和粘贴的字符时也是如此。所以我期望这种行为:

(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 回答