2016-11-08 9 views
0

MULU命令に関する質問があります。私が気づいたことの1つは、データレジスタに値000FFFFFがあるとします。そして00FFFFFFを含むように別のFを入れたいとします。68000アセンブリ:奇妙な結果をもたらす乗算

MULU #16, D4 

そして、私は(私は00FFFFFFを取得する)命令を追加することによって、別のFを追加します。私は通常、やっていることはそうのように16でデータレジスタを掛けています。しかし、000FFFFFで再び乗算すると、データレジスタ内のすべてのビットがゼロになります(00000000)。それが乗算された後、私は000FFFF0を持ち、残りはそれに続くでしょう。私はまだこれの理由を理解していない。私はthis exampleを探して、それがうまくいくと思う。私はまた、000FFFFFに1を単に追加すると、Extend、Carry、およびZeroビットがすべてtrueになることに気づいた。

+2

何_「しかし、私は000FFFFFに再び掛けたときに、」記号を維持するために算術論理ものではなく、シフトを使用するようにしてください_意味する?指示の正確な順序を私たちに教えてください。また、16を乗ずるのではなく、4だけ左にシフトするのはなぜですか? – Michael

+0

あなたはそうです。私は乗算を使ってはいけません。代わりに左に4をシフトすることは素晴らしい解決策です。問題が解決しました。 –

答えて

1

乗算を使用しないでください。その代わりに、LSL.L#4(レジスタ)を使用すれば、より良い結果が得られます。

0

私はこの結果が68000の乗算器の制限に起因すると考えています。IIRCでは16ビットの値しか扱えないので、それ以上の値を扱うときはこのような結果が得られます。

他の人が述べたことは、2の累乗(左シフト)の値を乗算する最も効率的な方法です。右シフトが効果的に値を分割する点で、除算にも同じことが当てはまります。あなたが署名した値を使用している場合

また、(特に:)部門用)

+0

それは本当です。このような乗算を行うと、32ビットの結果が得られます。 –