0

シンプルな(仮想)ALUと他のチップ(加算器、乗算器など)を実装しています。

数値には 2 の補数表現を使用しています。

x と y の 2 つの 16 ビット数の乗算では、これらの行に沿って左シフトを使用すると考えました (もちろん、これは実際のループなしで実行されます)。

  • 合計[0..15]=0を設定

  • x'=x を設定

  • for i=0...15 //(y[0] は LSB、y[15] は MSB)

    • y[i]=1 の場合は合計に x' を追加し、x' を左にシフトします。

(これが標準的な方法ですか?)

私の問題は左シフトにあります:

i st x[i]=1 がある場合、ある時点で x' の MSB が 1 になり、それが無効になります。

たとえば、上記の方法を使用した 2*2 は "-4" を返すため、これは問題です。

だから、私の実際の質問は、左にシフトするとき、符号ビットも考慮する必要がありますか?

4

1 に答える 1

0

そうです。

簡単なアプローチは、符号をどこかに保存し、符号なしに変換し、計算を実行してから、負の場合は元に戻すことです。

于 2014-02-21T11:06:22.047 に答える