Assembly 处理MARS read integer系统调用的非数字用户输入?

Assembly 处理MARS read integer系统调用的非数字用户输入?,assembly,mips,mars-simulator,spim,Assembly,Mips,Mars Simulator,Spim,我正在做一个简单的停车场程序,它接受用户的输入,并根据输入分支到标签 问题是,如果用户输入的数据类型与整数(如a或任何字母)不同,则程序总是突然结束 以下是我与输入部分相关的代码: li $v0,5 #system call to get input from user syscall li $t1,2 beq $v0,1,park # go to "park" section of codes if input is 1 beq $v0,2,exit #

我正在做一个简单的停车场程序,它接受用户的输入,并根据输入分支到标签

问题是,如果用户输入的数据类型与整数(如a或任何字母)不同,则程序总是突然结束

以下是我与输入部分相关的代码:

    li $v0,5 #system call to get input from user
    syscall
    li $t1,2
    beq $v0,1,park # go to "park" section of codes if input is 1
    beq $v0,2,exit # go to "exit" section of codes if input is 2
    beq $v0,0,end # go to "end" section of codes if input is 0
    la $a0,statement6 #load statement6 into $a0
    li $v0,4 #call code for print statement2
    syscall
    j start
如何在汇编语言中处理错误的数据类型,以便在用户输入错误的数据类型或int以外的输入时程序不会结束


有什么想法吗?

使用读取文本而不是特定数据类型的系统调用,然后在将文本转换为值时检查文本的格式和字符是否正确。

读取整数系统调用的文档是否说明了它在非数字输入时返回的内容?它只是返回0,而无法将其与用户键入的0区分开来吗?它会弹出以下内容:Carrpark.asm第21行:0x00400028处的运行时异常:无效整数输入syscall 5 Go:执行因错误而终止。确定。因此,MARS/SPIM整数输入系统调用是为用户合作的玩具程序而设计的,而不是为编写健壮的软件而设计的。当然,像@prl建议的那样,将输入读取为ASCII字节将起作用。如果有另一个系统调用可以通过某种错误报告机制读取整数,或者有一个scanf,那就太好了。但是编写自己的string->int函数并不难。