我在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的控制台不允许我粘贴程序的输入(我可以这样做,但不会被读取)。因此,我尝试在(命令行) 9.1.8版中运行它。它可以工作,但是当输入一个字符时它不会立即做出反应;它总是等待换行符,即使在没有剪切和粘贴的情况下输入字符也是如此。所以我希望这种行为:
(spim) load "echo.asm"
(spim) run
hheelllloo但我却得到了这个:
(spim) load "echo.asm"
(spim) run
hello [I press Enter here]
hello有什么想法吗?提前谢谢。
发布于 2013-02-08 17:36:55
这是因为终端在默认情况下是行缓冲的。在读取完整行后,从终端读取的数据才会返回。这是为了允许像backspace这样的程序与不使用专用终端处理库(例如ncurses、readline)的程序一起工作。可以通过运行命令禁用此缓冲。
stty -icanon然后运行spim,程序将在输入字符时回显字符。完成后,应该重新启用缓冲输入
stty icanon因为非缓冲模式可能会导致其他程序出现问题。
https://stackoverflow.com/questions/14777879
复制相似问题