首页 > 解决方案 > 如何遍历 MIPS 中数字的位数?

问题描述

我有一项任务需要获取一个数字,例如 13002,然后使用 UART 逐位打印(包括非前导 0)。UART 期望它打印的任何内容都会进入$s0寄存器,但我可以在需要时调用它jal

这意味着我需要输入一个数字$s0并跳转(UART代码中有一个jr $ra,所以一旦完成它就会正确返回。

我的问题是我不知道如何迭代数字中的数字。到目前为止,我的方法是将数字修改为 10(因为它是以二进制表示的十进制数),但这给了我相反的数字。

例如 13002 % 10 = 2(然后将 13002 除以 10,整数除法将截断小数),1300 % 10 = 0,再除以 10、130 ...等等。

然而,如上所述,这给了我相反的数字。我将如何正确迭代数字?

我在 python 中编写了一些伪代码,但是对于其中包含 0 的数字有问题:

def iterateOverDigits(n):
    while (n >= 10):
        x = n
        i = 0
        while (x >= 10):
            x = x // 10
            i += 1
        print(x)
        x = n
        x = x % (10 ** i)
        n = x

iterateOverDigits(1302) # This prints 132

标签: algorithmmathassemblymipslow-level

解决方案


In [1]: def by_digit(n):
   ...:     for char in str(n):
   ...:         print(char)
   ...:         

In [2]: by_digit(120405)
1
2
0
4
0
5

In [3]: 

将打印语句更改为以下内容以删除每个数字之间的换行符:

print(char, end="")

推荐阅读