繁体   English   中英

在 MIPS 程序集中验证用户整数输入

[英]Validating User Integer Input in MIPS Assembly

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

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

我可以这样做的好方法是什么? 我应该将输入作为字符串而不是整数读入,然后解析字符串以确保每个字符的 ASCII 值与整数 ASCII 值对应吗? 如果需要更多信息,请告诉我。 我无法发布代码,因为这是我班级中当前正在进行的作业。

鉴于 MARS/SPIM 有限的玩具“系统调用”集,是的,如果您想验证输入,您需要读取一个字符串并将其解析为一个整数。 total = total*10 + (c - '0')为基数 10)

不幸的是,没有其他返回值表明转换成功与否,就像您从 C strtol获得的那样。 他们本可以将 read-number 调用设计为在$v1返回 0 或 1 以指示失败/成功,但他们没有。

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

MARS 确实允许您从 stdin read() (v0=14) 而不是fgets() ,后者将返回字节数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM