Целое число в строку для 64-битных чисел в десятичной системе счисления - PullRequest
0 голосов
/ 28 мая 2020

Я работаю над заданием, в котором мне нужно ввести два 64-битных числа без знака в десятичном виде, а затем выполнить над ними сложение и умножение и вывести результаты в десятичном формате.

Результат сложения сохраняется в $ s4 для младшей половины числа и $ s5 для старшей половины. У меня проблема с преобразованием этих двух значений в одну строку, содержащую результат в десятичном формате.

После некоторого исследования я обнаружил, что Метод:

Вы должны генерировать строку справа налево, каждый раз деля число из 2 слов на 10, вычисляя остаток и частное. Остаток преобразуется в следующий символ и сохраняется в строке для последующей печати. Частное переписывается в два слова и используется в следующей итерации.

Как выполнить деление 64-битного числа на 10 Пусть A (64 бит) состоит из B и C, где B содержит старшие 32 бита и C младшие 32 бита. То есть A = B (2 ^ 32) + C. Используйте инструкции divu и remu для B и C, чтобы определить общее частное и остаток для 64-битного числа A, разделенного на 10.

Вот процедура, которую я придумал:

itoa:   
li $t0, 0
li $t3, 0
li $t2, 0
li $t1, 0
li $t5, 0   
li $t6, 0
li $t8, 0   

addiu $t5, $zero, 6 # 2%32%10
addiu $t0,$zero,10 # t0=10
lw $t1, exponent #2^32/10
addu $t2,$t2, $a0 #low half of addition
addu $t3,$t3, $a1 #high half of addition

itoa_loop:      
#B/10
beqz $t3, skip_high
divu $t3, $t0
mflo $t3 #quotient of B
mfhi $t4 #remainder of B
multu $t4, $t5 #multiplying remainders of B/10 and 2^32/10
mflo $t6       

skip_high:
#C/10
divu $t2, $t0
mflo $t2 #quotient of C
mfhi $t4 #remainder of C

addu $t8, $t4, $t6 #summing up remainders
addi $t8, $t8, 48 #convert to ascii
sb $t8, ($t9) #t9 is the output string
addi $t9, $t9, 1

#2^32/10
divu $t1, $t0
mflo $t1 #2^32/10 quotient
mfhi $t5 #2^32%10 remainder

bne $t2, $zero, itoa_loop

sb $zero, ($t9)
jr $ra

К сожалению, работает только с 32-битными числами.

...