割り当て用の簡単なコードスニペットを書いていますが、10進数を2進数、8進数、16進数に変換する必要があります。私はそれを機能させていますが、使用しているアルゴリズムのために、2進数を逆方向に出力していることに後で気付きました。私が使用していた戦略は、一度に1桁ずつ印刷することでした。私はまだ初心者なので、これがより中間的な問題を回避する簡単な方法になると思いました。残念ながら、私はそれをずっと考えていませんでした。
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
各桁をラベル付きの文字列に格納し、その後各桁を連結してから、文字列を逆方向に読み取る方法はありますか?たぶん、あなたが私に指摘できるかもしれないより良い提案があるかもしれません。
この時点で、コードは一度に1桁の2進数を出力することで機能しますが、必要な順序とは逆であることに注意してください。このプログラムは大きな数(20桁の2進数など)を処理できるはずなので、各桁を独自のレジスタに格納することはできません。皆さんありがとう!