Konvertieren von Dezimal zu Binär und Drucken in MIPS
Ich Schreibe ein einfaches code-snippet für einen Auftrag und ich brauche, um zu konvertieren eine Dezimalzahl in binäre, oktale und hexadezimale. Ich habe es zu arbeiten, aber ich merkte danach, dass da der Algorithmus, den ich verwende, Drucke ich die binäre Zahl zurück. Die Strategie war ich mit war drucken ein Zeichen zu einem Zeitpunkt. Ich bin noch ein Anfänger, so dass ich dachte, dies wäre eine einfache Möglichkeit, um zu vermeiden, weitere fortgeschrittene Themen. Leider habe ich nicht denke, dass es den ganzen Weg durch.
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
Gibt es eine Möglichkeit, kann mir vielleicht store jede Ziffer in einer Zeichenkette mit einem label zusammen und verketten die einzelnen Ziffern auf danach, dann Lesen Sie die Zeichenfolge nach hinten oder so? Vielleicht gibt es einen besseren Vorschlag, Sie könnten in der Lage sein zu zeigen Sie mir.
Nur beachten, dass der code funktioniert an dieser Stelle durch den Druck eine einzelne binäre Ziffer, aber in umgekehrter Reihenfolge, die wir es wollen. Das Programm soll in der Lage sein zu handhaben, große zahlen(wie 20 binäre Ziffern lang), so dass ich nicht speichern kann jede Ziffer in ein eigenes register. Vielen Dank an alle!
- Gibt es nicht irgendeine Art von stack?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Möchten Sie vielleicht, um zu speichern der berechneten Werte in den Speicher, und Lesen Sie Sie dann auf der Rückseite zu drucken.
Verwenden Sie eine Ersatz-register zum halten der offset der Ziffern in Puffer (drucken), sagen, $a1, und nehmen wir an, Sie speichern werden die Ziffern beginnend bei der Speicheradresse 0x1000.
Dann, anstatt die syscall-drucken Sie die Ziffer, verstauen Sie es einfach mit etwas wie dieses:
Nun, wenn Sie fertig Verarbeitung der input-Daten, können Sie die traverse in umgekehrter Reihenfolge aus, um den Vektor, den Sie gemacht, und drucken Sie jede Stelle:
Würden Sie haben zu Durchlaufen, bis $a1 0 erreicht