Я пишу простой фрагмент кода для назначения, и мне нужно преобразовать десятичное число в двоичное, восьмеричное и шестнадцатеричное. У меня это работает, но потом я понял, что из-за алгоритма, который я использую, я печатаю двоичное число в обратном направлении. Стратегия, которую я использовал, состояла в том, чтобы печатать одну цифру за раз. Я все еще новичок, поэтому я подумал, что это будет простой способ избежать более промежуточных вопросов. К сожалению, я не думал об этом до конца.
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 двоичных цифр), поэтому я не могу хранить каждую цифру в своем собственном регистре. Спасибо всем!