Как перебирать цифры числа в MIPS? - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть задача, в которой мне нужно взять число, например, 13002, и распечатать его из di git по di git, используя UART (включая не ведущие 0). UART ожидает, что все, что он печатает, будет go в регистре $s0, но я могу вызывать его всякий раз, когда мне нужно использовать jal.

Это означает, что мне нужно поместить ди git в $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

1 Ответ

0 голосов
/ 06 апреля 2020
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]: 

Измените оператор печати следующим образом, чтобы убрать символы новой строки между каждым ди git:

print(char, end="")
...