5
バウンティ:このサブルーチンを負の数で動作させるためのコードを提供する人の評判ポイントは+50点です。itoaは負の数ですか?
私は華氏を摂氏に変換するMIPSプログラムを作成しました。独自の出力ウィンドウ(UART)を開き、摂氏で値を正しく表示します。これは、Cからアセンブリへの呼び出しとその逆の呼び出しのすべてを行います。下に掲載された全コード。
私はそれが負の数で動作するように苦労しています。今何らかの理由で空白を描いているだけです。このチェックを書くために私のitoa
関数を変更するにはどうすればよいですか?
MIPSで負の値でこれを動作させる方法はありますか?
.ent itoa
itoa:
// putting the stack frame together
addiu sp, sp, -16
sw fp, 12(sp)
move fp, sp
sw a0, 16(fp)
sw a1, 20(fp)
sw s0, 4(fp)
sw s1, 0(sp)
// there is no divide immediate, so using s1
li s1, 10
itoa_div_begin:
divu a0, s1
mfhi s0
mflo a0
addiu s0, s0, 0x30
addiu sp, sp, -1
sb s0, 0(sp)
beq a0, zero, itoa_div_done
nop
j itoa_div_begin
nop
itoa_div_done:
itoa_copy_begin:
lb s0, 0(sp)
sb s0, 0(a1)
addiu sp, sp, 1
subu s1, sp, fp
addiu a1, a1, 1
beq s1, zero, itoa_copy_done
nop
j itoa_copy_begin
nop
itoa_copy_done:
li s0, 0
sb s0, 0(a1)
move v0, a1
lw a0, 16(fp)
lw a1, 20(fp)
lw s0, 4(fp)
lw s1, 0(fp)
// stack frame
move sp, fp
lw fp, 12(sp)
addiu sp, sp, 16
jr ra
nop
.end itoa
あなたはコードを与えられませんが、あなたは陰性のためにmsbをチェックし、次に2の補数を元に戻す必要があります。http://en.wikipedia.org/wiki/Two%負の整数の絶対値を取得します。要するに、msbが1 - > '' 'を書いて、itoaに逆の2の補数を使用すると、 – x4rf41
私は混乱しています、問題はちょうどあなたのitoa関数ですか? –
@KonradLindenbachはい。プログラム全体を投稿することについて申し訳ありません。それ以来、itoaサブルーチンのみを編集しています。 – MrPickle5