プロが教える店舗&オフィスのセキュリティ対策術

アセンブリ言語にて、
「乗算Z←X×Yを、
ビットシフト(ROT命令ほか)で用いた計算手順と、
加算(ADD命令)の各長所、短所を比較しなさい」
という問題の答えがわかりません・・・
教えていただけませんか?

A 回答 (2件)

それぞれフローチャートを書いてみれば一目瞭然ですが、



ビットシフトの場合、乗数が2のn乗であることが前提となり、例えば64倍(2の8乗)するのであれば、被乗数を8回左シフト(ローテートの場合キャリービットはクリアする)すれば答えが出ます。CPUにもよりますが、シフト量に関わらず1ステートで答えが出るものもあります。即ち、実行速度が速い、もしくは64倍だろうが128倍だろうが速度の差が出ない(もしくは差が少ない)、という点が長所です。

加算を使う場合は、被乗数を乗数分ループして加算を繰り返すことになりますので、乗数が大きくなると、その分処理に時間がかかります。乗数が大きくなる従い処理速度が増えます。



逆に、ビットシフトは2のn乗が前提なので、2のn乗で端数が出た場合は、その分条件式を入れて、分解してビットシフトによる乗算を組み合わせたり、場合によっては加算のループ組み合わせたり、処理が複雑になります。

例えば、67倍する場合は、64倍のビットシフト演算と3回の加算に分解するとか、
192倍する時などは、128倍のビットシフトと64倍のビットシフトを組み合わせるとか、いずれにしても条件が複雑になります。

これに比べて加算の方は被乗数、乗数(0以外であれば)の条件に関わらず、ループの形だけで表現出来るので、とてもシンプルに記述出来ます。

長所、短所についてはこんなところかと思います。ご参考に。
    • good
    • 0

乗算を足し算の繰り返しでするかビットの回転でするかの違いでしょう


これを筆算にお置き換えて考えれば分かるはずです
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!