在 MIPS 汇编中验证用户整数输入

Validating User Integer Input in MIPS Assembly

我有一个作业要求我制作一个基本计算器,该计算器可以在 MIPS 汇编中对整数执行四种基本运算(加、减、乘、除)。部分赋值需要用户​​输入验证,以确保用户输入了整数和正确的操作数。我完成了基本的计算器和操作数输入验证。我想知道完成整数输入验证的最佳或好方法是什么。

目前,我正在使用系统调用读取整数。当用户输入除整数以外的任何内容时,零将存储在 $v0 寄存器(系统调用函数的 return 寄存器)中。起初我只是简单地使用一个分支如果等于零命令分支到一个子程序,该子程序要求用户输入一个有效的整数并跳回到读取和存储整数的子程序。唯一的问题是,用户不能输入 0,这是一个有效的整数。

有什么好的方法可以让我着手做这件事?我是否应该将输入作为字符串而不是整数读取,然后解析该字符串以确保每个字符的 ASCII 值都对应于一个整数 ASCII 值?如果需要更多信息,请告诉我。我无法 post 代码,因为这是我 class.

中当前有效的作业

给定 MARS/SPIM 的 limited set of toy "system calls",是的,如果您想验证输入,您需要自己读取一个字符串并将其解析为一个整数。 (total = total*10 + (c - '0') 以 10 为基数)

很遗憾,没有其他 return 值表明转换成功与否,就像您从 C strtol 中获得的那样。他们本可以在 $v1 中设计对 returns 0 或 1 的读取编号调用来指示失败/成功,但他们没有。

出于某些疯狂的原因,读取字符串系统调用 ($v0=8) 显然不会 return 读取的字节数。它只在缓冲区输入的末尾存储一个 0 终止符。所以你不能只计算一个循环的终点指针。但是,您仍然可以明确地遍历您读取的字节。所以这是您首先了解要查看哪些字节的起点。

MARS 允许您 read() (v0=14) 而不是来自标准输入的 fgets(),这将 return 一个字节计数。