質問: ### 前提・実現したいこと MIPSを使って、ユーザーが入力した十進法の整数を、二進法に変換して表示するという課題です。 入力された値は最大で127、最小で−128でなくてはいけません。 これ以上または以下が入力された場合エラーを出さなくてはいけないので、設定したいのですが、あっているのかわかりません。 十進法から二進法に変換させるやりかたはsyscalls の35番、36番を使用することを禁止されているので、一番ベーシックな 1)元の数字を二で割っていく 2)でてくるあまりを記録する 3)そのあまりを反対側から表示させていく というやり方を使おうと思っています。 ### 該当のソースコード ``` #入力された数字を読み込む add $v0, $zero, 5 # 5=read the integer syscall add $t0, $zero, $v0 #v0に値が保存される add $t1, $zero, 127 add $t2, $zero, -128 ble $t0, $t1, next #値が127以下であること確認する else: next: bgt $t0, $t2, loop #値が−128以上であること確認する-->二進法へ変換させるループ loop: #method for changing decimal to binary div $t0, 2 #値を二で割っていく mfhi $a2 # reminder to $a2 ``` ### 試したこと 十進法から二進法に変換させるやりかたはsyscalls の35番、36番を使用することを禁止されているので、一番ベーシックな 1)元の数字を二で割っていく 2)でてくるあまりを記録する 3)そのあまりを反対側から表示させていく というやり方を使おうと思っています。 しかしここから先に進めません 解決法お待ちしております!! お願いいたします! 。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: 1. 入力された数をレジスタに格納 2. レジスタが0ならば、0を出力して終了 3. 別のレジスタをループカウンタとして使用、32を入れる 4. レジスタを左シフト 5. キャリーフラグが0ならば4にループ(ループカウンタ-1) 6. キャリーフラグが1ならば1,0ならば0を出力 7. レジスタを左シフト 8. 6にループ(ループカウンタ-1) 9. おしまい ゼロサプレスしない(32桁の2進数を出したい)、という向きには2と5を抜けばよろしい