2013-04-17 33 views
7

私はMIPSで電卓プログラムを構築していますが、乗算と除算の関数を記述しようとしています。MIPS:整数の乗算と除算

li $v0, 5 
syscall 

して、最終的にはユーザーが何をしたいアクションに応じて、私の機能multidiviを呼び出す:

現在、私はそうのようなループ内の整数で読み取ります。

ので$a1$a0を掛け、および/または$a1$a0を分割するきれいな方法であるもの、私は$a0$a1の整数を持っていると仮定すると?私はオンラインの周りを探してきたが、私は、符号なし乗算に符号付き乗算のためのmultmultuを使用し、$v0

+1

'MULT'命令に何か問題はありますか? – paxdiablo

+0

なぜそれが乗算であるか分裂であるのか分からないのはなぜですか? – rmmh

答えて

16

が増殖に戻った解答を送信する必要があるため、私は、これを行うには、清潔で簡単な方法を見つけることができません。 2つの32ビット数を乗算した結果、64の数値が得られることに注意してください。結果を$ v0に戻したい場合は、結果が32ビットに収まると仮定します。

32個の最上位ビットは、HI特殊レジスタ(mfhi命令によってアクセス可能)に保持され、32個の最下位ビット(mflo命令によってアクセス可能)LO特殊レジスタに保持されます

例:

li $a0, 5 
    li $a1, 3 
    mult $a0, $a1 
    mfhi $a2 # 32 most significant bits of multiplication to $a2 
    mflo $v0 # 32 least significant bits of multiplication to $v0 

分割するには、符号付き除算ではdiv、符号なし除算ではdivuを使用します。この場合、HI特別登録はリマインダーを保持し、LO特別登録は部門の商を保持します。

例えば:

div $a0, $a1 
    mfhi $a2 # reminder to $a2 
    mflo $v0 # quotient to $v0 
+0

マルチ後。どのように2つの(ハイとロー)を1つの結果にマージしますか?私は結果が32ビットレジスタに収まることを知っている場合は? –

+4

@JohnDemetriou:32ビットで結果が一致することが既にわかっている場合は、 'mflo'を使用して下位ビットを取り出すことができます – gusbro

+1

ありがとう –