2ビットまたは3ビットの観点から考えてから、これらが32ビットまたは64ビット、あるいは多くのビットにスケールアップすることを理解してください。
まず、10進数から始めましょう
99
+22
===
これを行うために、いくつかの「キャリー・ザ・ワンズ」を実行します。
11
99
+22
===
121
9プラス2は1キャリー1、1プラス9プラス2は2キャリー1 ...
ただし、2つの数値を追加するには、実際には3つの行が必要でしたが、少なくともその一部では、3つの数値を追加できる必要がある場合があります。aluの加算器の場合と同じように、各列またはビットレーン、シングルビット加算器は、2つの入力とキャリーインビットを加算できる必要があり、出力は1ビットの結果と1ビットのキャリーです。
5と2を使用したので、4ビットの2進演算を実行しましょう
0101
+0010
=====
0111
これを続ける必要はありませんでしたが、5 + 2=7の計算が機能したことがわかります。
そして、5と-2を追加したい場合
11
0101
+1110
=====
0011
そして、答えは予想通り3で、それほど驚くことではありませんが、実行しました。これは2の補数のマイナス数の加算であり、すべて機能しました。その場合、符号ビットはありませんでした。2の補数を使用すると、加算器に2つのオペランドをフィードするだけで済みます。
ここで、微妙な違いを作りたい場合、5から2を減算したい場合は、加算ではなく減算命令を選択します。2の補数で否定すると、1を反転して加算することを意味することを私たちは皆学びました。また、2入力加算器は、加算器が必要とする幅にカスケードできるように、キャリーイン用に3番目の入力が実際に必要であることを上で見ました。したがって、2つの追加操作を実行する代わりに、最初に1を追加して反転し、実際の追加を追加するだけで、反転してキャリーインを設定できます。
減算ロジックがないことを理解してください、それはあなたがそれを供給するもののネガを追加します。
v this bit is normally zero, for a subtract we set this carry in bit
11 11
0101 five
+1101 ones complement of 2
=====
0011
そして、私たちが同じ答えを得るのを知っていますか...どちらのオペランドの実際の値が何であるかは関係ありません。加算演算の場合は、キャリーインビットにゼロを設定して加算器にフィードします。減算演算の場合は、2番目のオペランドを反転し、1をキャリーインに入れて、同じ加算器にフィードします。落ちるものは何でも落ちる。ロジックに結果を保持するのに十分なビットがある場合はすべて機能し、十分なスペースがない場合はオーバーフローします。
オーバーフローには、符号なしと符号付きの2種類があります。符号なしは単純で、キャリービットです。符号付きオーバーフローは、msbit列のキャリーインビットをその列のキャリーアウトビットと比較することと関係があります。上記の計算では、そのmsbit列のキャリーとキャリーは同じであり、どちらも1つであることがわかります。そして、検査によって、4ビットシステムには+ 5、-2、および+3の数値を適切に表すのに十分な余地があることがわかりました。4ビットシステムは、+7から-8までの数値を表すことができます。したがって、5と5、または-6と-3を追加すると、署名されたオーバーフローが発生します。
01 1
0101
+0101
=====
1010
同じ加算ロジックが符号付きおよび符号なしの計算に使用されることを理解してください。これらのビットが2の補数の符号付きまたは符号なしと見なされるかどうかを仮想的に定義するのは、ロジックではなくコード次第です。
上記の5+5の場合、msbit列のキャリーインは1ですが、キャリーアウトは0です。これは、符号付きオーバーフローフラグであるVフラグがロジックによって設定されることを意味します。同時に、キャリーフラグであるCフラグであるそのビットのキャリーアウトは設定されません。符号なしの場合、4ビットは0から15までの数値を保持できるため、5 + 5=10はオーバーフローしません。しかし、符号付き4ビットを考えると+7から-8を保持でき、5 + 5 = 10は符号付きオーバーフローであるため、Vフラグが設定されます。
キャリー命令付きの加算がある場合、それらは同じ加算回路を取り、ゼロでキャリーを供給する代わりに、キャリーフラグを与えられます。同様に、借用による減算では、キャリーインを1にフィードする代わりに、キャリーインはステータスレジスタのキャリーフラグの状態に基づいて1または0のいずれかになります。
乗算はまったく別の話です。バイナリを使用すると、10進数の数学を使用する場合よりも乗算がはるかに簡単になりますが、符号なしと符号付きの乗算命令を変える必要があります。また、除算は独自の独立した獣であるため、ほとんどの命令セットには除算がありません。多くは、それが燃やすゲートまたはクロックの数のために乗算を持っていません。