MIPS乗算を手作業で解決する必要があり、問題が発生しています。
$8
-1073741824の2の補数表現(2 ^ 30)を保持する2つのレジスタが$9
あり、+ 3の2の補数を使用して、このMIPS命令の結果を見つける必要があります。
mult $8, $9
私はかなり迷っています。最初に値を2の補数に変換してから、2進乗算を使用する必要がありますか?
MIPS乗算を手作業で解決する必要があり、問題が発生しています。
$8
-1073741824の2の補数表現(2 ^ 30)を保持する2つのレジスタが$9
あり、+ 3の2の補数を使用して、このMIPS命令の結果を見つける必要があります。
mult $8, $9
私はかなり迷っています。最初に値を2の補数に変換してから、2進乗算を使用する必要がありますか?
mult 命令は、2 つの 32 ビット レジスタの符号付き乗算です。組み合わせた特別な(Hi、Lo)レジスタに結果を保存すると、64ビットの結果が得られます。この理由は、2 つの 32 ビット値を乗算すると、結果が大きすぎて 1 つの 32 ビット レジスタに収まらない可能性があるためです。
演習の目的が 1 と 0 を手動で処理し、自分で乗算を行うことである場合は、そうすることができます。ただし、その桁数でどこかを台無しにする可能性が高くなります。
少し演繹して、最初に結果がどのように見えるかを見てみましょう: 2 の補数では、最上位桁は符号です:
操作を見ると、結果の最上位ビットが 1 になることがすぐにわかります。これは、Hi レジスタの最上位ビットが 1 になることを意味します。
これで、乗算している値を見てみましょう(今のところ符号は省略しています)。
2 30 × 3 = 2 30 × (2 1 + 2 0 )
= 2^31 + 2^30
これで、乗算がはるかに簡単な加算に変わりました。この場合、この値のバイナリ表現は、ビット 32 および 31 で 1 または次のようになります。
1100 0000 0000 0000 0000 0000 0000 0000
ここで、この値を取得して負の数値表現に戻す必要がありますが、今度は 64 ビット レジスタを超えているため、64 ビットの正の値は次のようになります。
0000 0000 0000 0000 0000 0000 0000 0000 1100 0000 0000 0000 0000 0000 0000 0000
2 の補数は、同じビット数 (すべて 1) の最大正数から正数を減算し、結果に 1 を加算することによって機能します。
小規模な例:
3 = 0011
-3 = 1111 - 0011 + 0001
making -3 = 1101
これを 64 ビット値に適用して、最初に最大 64 ビット int 値から正の結果を減算します。
1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111
-0000 0000 0000 0000 0000 0000 0000 0000 1100 0000 0000 0000 0000 0000 0000 0000
=1111 1111 1111 1111 1111 1111 1111 1111 0011 1111 1111 1111 1111 1111 1111 1111
その値に 1 を追加すると、次のようになります。
1111 1111 1111 1111 1111 1111 1111 1111 0100 0000 0000 0000 0000 0000 0000 0000
したがって、操作後のレジスタは次のようになります。
Hi = 1111 1111 1111 1111 1111 1111 1111 1111
Lo = 0100 0000 0000 0000 0000 0000 0000 0000
乗算する数値が符号付きの場合は、次を使用します。
mult $8, $9
それらが符号なしの場合は、符号なし乗算命令を使用してください。
multu $8, $9
乗算の結果は 64 ビット整数になります。この結果には、次のように mflo および mfhi 命令を使用してアクセスできます。
MFLO $8
MFHI $9
この質問に対するいくつかのより一般的な情報:
乗算と除算のユニットは、結果を2つの追加レジスタhiとloに生成します。これらの命令は、これらのレジスタとの間で値を移動します。このユニットを汎用レジスタで動作しているように見せかける乗算、除算、および剰余の疑似命令は、計算の終了後に結果を移動します。
A-56:
mult rs、rt
レジスタrsとrtを乗算します。製品の下位ワードをレジスタloに残し、上位ワードをレジスタhiに残します。
出典:コンピューターの編成と設計:ハードウェア/ソフトウェアインターフェイス(D. Patterson、J。Hennessy)
参照: