Assembly 从控制台读取时,SPIM如何处理不正确的类型?

Assembly 从控制台读取时,SPIM如何处理不正确的类型?,assembly,mips,simulator,system-calls,spim,Assembly,Mips,Simulator,System Calls,Spim,我正在创建一个MIPS模拟器,遇到了一个我认为有多种解决方案的问题。SPIM使用syscall操作模拟从控制台进行的读取。我以前使用过SPIM,但目前无法访问它。从控制台读取时,它如何处理不正确的类型?例如,如果对read_int进行系统调用,输入“asdf”,然后按enter键,会发生什么情况?该怎么办?SPIM引用建议它从行中读取一个整数,并忽略整数后面的任何内容,这只是第一个数字序列的正则表达式匹配。当先有非数字,然后是数字,然后是更多的非数字时会发生什么?没有数字怎么办 我不想重新创建S

我正在创建一个MIPS模拟器,遇到了一个我认为有多种解决方案的问题。SPIM使用syscall操作模拟从控制台进行的读取。我以前使用过SPIM,但目前无法访问它。从控制台读取时,它如何处理不正确的类型?例如,如果对read_int进行系统调用,输入“asdf”,然后按enter键,会发生什么情况?该怎么办?SPIM引用建议它从行中读取一个整数,并忽略整数后面的任何内容,这只是第一个数字序列的正则表达式匹配。当先有非数字,然后是数字,然后是更多的非数字时会发生什么?没有数字怎么办

我不想重新创建SPIM,我想我会得到社区的建议,他们希望MIPS模拟器在输入类型错误时如何运行

需要考虑的一些可能输入:
1234(正确)
a1234(该怎么办?
a1234b(该怎么办?
ab(该怎么办?
(只需按enter键可以做什么?


谢谢

为了回答这个问题,我检查了
spim
。它并没有那么大,所以很容易找到表示
READ\u INT\u SYSCALL
是使用
atol
实现的

有关atol的文档可以在系统手册中找到,但为了完整起见:

描述

函数的作用是:将nptr指向的字符串的初始部分转换为int

strtol(nptr,NULL,10); 除了atoi()不检测错误

atol()和atol()函数的行为与atoi()相同,只是它们将字符串的初始部分转换为其返回类型long或long。atoq()是Atol()的过时名称

返回值

转换后的值

我意识到这并不能真正回答你的问题,因为事实证明atoi的行为或多或少是未定义的。您可以看到POSIX标准,其中规定“如果无法表示值,则行为未定义”,或者可以看到这一点