assembly - 在 MIPS 中类型转换

标签 assembly casting mips mips32

我有一个有趣的问题!

我在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/

相关文章:

c - 预计 GCC ARM 寄存器

c - 1k 的程序空间,64 字节的 RAM。是否可以进行 1 线通信?

assembly - 从头开始编写 ELF64 时执行错误

java - 在 SpannableStringBuilder 和 CharSequence 之间进行转换

c# - 使用 LINQ 将 List<U> 转换为 List<T>

assembly - 将 float 移动到 mips 中的新寄存器的最佳方法?

c - gcc 分支预测

c++ - 将 char 转换为 unsigned char

将 C 转换为 MIPS

将 C 语言转换为 MIPS 汇编语言