Я пишу простой фрагмент кода для задания, и мне нужно преобразовать десятичное число в двоичный, восьмеричный и шестнадцатеричный. Я работаю, но потом понял, что из-за алгоритма, который я использую, я печатаю двоичный номер назад. Стратегия, которую я использовал, заключалась в том, чтобы печатать по одной цифре за раз. Я все еще новичок, поэтому я решил, что это будет простой способ избежать более сложных проблем. К сожалению, я не думал об этом полностью.Преобразование десятичного разряда в двоичное и печать в MIPS
binary: la $a0, bType #binary function selected, notify user
li $v0, 4 #print notification
syscall
la $a0, in_val #ask user for input decimal number
li $v0, 4 #print
syscall
li $v0, 5 #syscall read int
syscall
move $t0, $v0 #save input value to $t0
li $t1, 2 #load 2 into $t1 to divide by 2
li $v0, 4
la $a0, bRes
syscall #print result tag
binLoop: divu $t0, $t1 #LO = $t0/2, HI = $t0 % 2
mfhi $t2 #$t2 = HI (remainder)
mflo $t0 #$t0 = $t0/2 (quotient)
move $a0, $t2 #store digit to print
li $v0, 1 #Print digit
syscall
bgtz $t0, binLoop #if input != 0, keep dividing
j main
Есть ли способ, что я могу, может хранить каждую цифру в строку с меткой и сцепить каждую цифру на после этого, а затем прочитать строку назад или что-то? Может быть, есть лучшее предложение, на которое вы могли бы указать мне.
Обратите внимание, что код работает в этот момент, печатая одну двоичную цифру за раз, но в обратном порядке, который мы хотим. Предполагается, что программа может обрабатывать большие числа (например, 20 двоичных цифр), поэтому я не могу хранить каждую цифру в своем собственном регистре. Спасибо всем!
нет ли какой-либо вид стека? – ruslik