シンプルな(仮想)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" を返すため、これは問題です。
だから、私の実際の質問は、左にシフトするとき、符号ビットも考慮する必要がありますか?