2013-02-08 76 views
1

我在MIPS彙編寫了這個簡單的程序:read_char系統調用不是在命令行SPIM工作正常

.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

這是因爲終端在默認情況下是行緩衝的。直到讀完整行後才從終端讀取數據。這是爲了允許像退格這樣的事情與不使用專門的終端處理庫的程序一起工作(例如,ncurses,readline)。您可以通過運行命令

stty -icanon 

禁用該緩衝,然後運行SPIM並且當它們被輸入的程序將回顯字符。當你完成後,你應該重新啓用緩衝輸入與

stty icanon 

作爲非緩衝模式可能會導致與其他程序的問題。

+0

謝謝!非常有用的答案。 – Numbers 2013-02-08 17:54:41