MARS MIPS CLI调用读字符系统调用时不接受换行符报错问题
MARS CLI中syscall 12报错的原因及解决方法
问题根源
MARS的GUI IDE和命令行(CLI)版本对syscall 12(单字符读取系统调用)的行为存在差异:
- 在GUI环境下,
syscall 12会捕获所有输入字符,包括换行符(Enter键对应的ASCII值0x0A),所以你按下Enter时程序能正常读取并打印换行。 - 但在CLI模式下,
syscall 12的逻辑是仅读取非空白字符,并且会自动跳过开头的空白字符(如空格、换行)。如果你的输入只有空白字符(比如直接按Enter),它找不到符合要求的有效字符,就会抛出invalid char input (syscall 12)错误。
解决办法
如果需要在CLI中处理换行或空白字符,可以改用syscall 8(字符串读取)来替代syscall 12,因为它能读取包括换行在内的任意字符。修改你的宏如下:
.macro read_char li $v0, 8 la $a0, ($s0) li $a1, 2 # 最多读取1个字符+字符串终止符 syscall .end_macro
这个修改后,即使在CLI中直接按Enter,程序也能正确读取换行符并完成打印。
内容的提问来源于stack exchange,提问作者akzxtuallyyy
相关产品推荐
相关产品推荐

