首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >read_char系统调用在命令行spim中不能正常工作

read_char系统调用在命令行spim中不能正常工作
EN

Stack Overflow用户
提问于 2013-02-08 17:16:34
回答 1查看 1.1K关注 0票数 1

我在MIPS程序集中编写了这个简单的程序:

代码语言:javascript
复制
.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版中运行它。它可以工作,但是当输入一个字符时它不会立即做出反应;它总是等待换行符,即使在没有剪切和粘贴的情况下输入字符也是如此。所以我希望这种行为:

代码语言:javascript
复制
(spim) load "echo.asm"
(spim) run
hheelllloo

但我却得到了这个:

代码语言:javascript
复制
(spim) load "echo.asm"
(spim) run
hello [I press Enter here]
hello

有什么想法吗?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-08 17:36:55

这是因为终端在默认情况下是行缓冲的。在读取完整行后,从终端读取的数据才会返回。这是为了允许像backspace这样的程序与不使用专用终端处理库(例如ncurses、readline)的程序一起工作。可以通过运行命令禁用此缓冲。

代码语言:javascript
复制
stty -icanon

然后运行spim,程序将在输入字符时回显字符。完成后,应该重新启用缓冲输入

代码语言:javascript
复制
stty icanon

因为非缓冲模式可能会导致其他程序出现问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14777879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档