我有一个有趣的问题!
我在MIPS中实现了一个内存游戏, 游戏开始时在屏幕上随机打印10-99之间的数字, 然后要求用户输入确切的数字。如果用户正确输入数字,游戏将继续显示第一个数字和 10-99 之间随机生成的第二个数字。两个数字必须依次显示,中间间隔 3 秒。然后,用户被要求按照屏幕上显示的正确顺序输入数字。如果用户正确输入了两个数字,则游戏将继续输入三个数字,然后是四个数字,依此类推。
这是对游戏的快速总结,但事情是这样的。
我想添加一个助手选项,如果用户输入字母“H”,程序会给他一个提示。
我用它来获取接受数字的用户的输入
li $v0,5
syscall
这个“读取一个整数”,但是一旦用户输入“H”,就会出现运行时错误,
我认为“H”的 ASCII 值是:72 我把它作为用户用作提示的数字,但不幸的是,程序可能会生成一个随机数“72”,当用户输入它时,它会给他一个提示,而他不想要提示,他只是想继续游戏
问题:
我正在寻找的是一种用高级语言进行此类转换的方法或技巧。 到目前为止我还没有找到解决这个问题的方法。
并且 有什么方法可以清除MIPS中的屏幕或控制台吗? 因为这显然是内存游戏!所以数字应该消失!
对此有任何建议或问题,我们都欢迎!
最佳答案
从键盘输入到内存时,所有字符都可以表示为 ascii,但 read_int 系统调用将尝试从该 ascii 解析整数,对于非数字字符将失败。
唯一的选择是使用字符串。创建缓冲区
buf: .byte 0,0,0 #10-99, last byte is for null
用于用户输入。读取字符串后,检查缓冲区中的第一个字符是否为“H”。
la $t1, buf
lb $t2, 0($t1)
li $t3, 72
beq $t2, $t3, help
如果没有“H”,则继续从字符串中解析整数。
i = buf.length-2;
j = 1;
k = 0;
while(i >= 0) { //go in reverse
if(buf[i] != NULL) {
k += (buf[i] - 48) * j
j *= 10;
}
i--;
}
if(k == target)print("success");
不要忘记每次提示时清除缓冲区。
关于assembly - 在 MIPS 中类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10265639/