ADC
たとえば、次のように使用します。
AL = 01 and BL = 02, and CF = 1
私がこれを作るとき:
ADC AL,BL
または?AL
_ _ (添加の有無は?)3
4
CF
ADC
たとえば、次のように使用します。
AL = 01 and BL = 02, and CF = 1
私がこれを作るとき:
ADC AL,BL
または?AL
_ _ (添加の有無は?)3
4
CF
8086
ADC
命令に関するいくつかのこと:
Syntax: adc dest, src
dest: memory or register
src: memory, register, or immediate
Action: dest = dest + src + CF
明らかに、アクションは、Carry Flag( CF
) が加算に含まれることを示しているため、結果は含まれ4
ません3
。
10進数で追加するのと同じです。
99 +11 9+1はゼロです1を運ぶ 9 +1+キャリーは1キャリー1
上記の10進数の計算の結果は、キャリーが1の10であり、そのように考えたい場合は110です。
1ビット加算器を使用したバイナリスタートの場合、真理値表は次のとおりです。
000 0 0 001 0 1 010 0 1 011 1 0 100 0 1 101 1 0 110 1 0 111 1 1
3ビットの左側の列は入力の組み合わせ、2つのオペランドとキャリーイン、2番目の列は実行され、3番目の列は結果です。
したがって、キャリーなしの1 + 1は左の列で110であり、結果は0キャリー1です。
上記の10進数の計算と何ら変わりはなく、10進数の列を合計すると、オペランドa、オペランドb、キャリーがはるかに簡単になります。結果は10を法とする答えであり、キャリーは結果/10です。キャリーを次の列の一番上にコピーして、永遠に繰り返します。99+11または999+111などで示されているように。
キャリーのない単純な2ビット加算の場合、結果は入力のxorになり、キャリーは2つの入力のandになります。キャリー加算器をチェーンせずに2つの加算を使用して、キャリー付き加算を実装することも、直接実行することもできます。結果は、奇数の1回または奇数のパリティ(2つのxors r = a xor b xorキャリーイン)がある場合に設定されます。私が現在苦労している実行は、おそらく誰かが助けることができます。
したがって、キャリーセット付きの8ビット0xFF+0xFFは次のようになります。
1 11111111 +11111111
これは、開始する前に「キャリー・ザ・ワン」が入ってくる0xff+0xffを示しています。
小数の数学のように、右から一度に1列ずつ見てください。
1 + 1 + 1=1キャリー1 次の列 1 + 1 + 1=1キャリー1 ..。
これは続き、キャリービットが設定された0xFFになります
したがって、キャリー付きの8ビットの加算しかない場合は、メモリの幅と同じ幅の2つの数値を加算できます。
16ビットの追加を見てみましょう。
0x1234 + 0xABCD
16ビットの加算0xBE01で計算を行うことができます。
または8ビット加算器を使用:
キャリービットをクリアする キャリー0x34+0xCD結果0x01キャリーセットで追加 キャリー0x12+0xAB結果0xBEキャリークリアで追加
答えは0xBE01です
または、4ビットのアルミしか持っていない場合は4ビットの加算器を使用します
キャリービットをクリアする キャリー0x4+0xD=0x1キャリービットセットで追加 キャリー0x3+0xC=0x0キャリービットセットで追加 キャリー0x2+0xB=0xEキャリービットクリアで追加 キャリー0x1+0xA=0xBキャリービットクリアで追加
再び結果0xBE01キャリービットクリア
バイナリである限り、シングルビットまたは3ビット加算器でこれを行うことができます。
すべての有用なプロセッサには、aluを広げることができるように、キャリービットを追加する何らかの方法が必要です。個別のaddとadcがある場合もあれば、adcが余分なステップである場合や、最も苦痛なのはキャリーなしのaddであり、キャリーがクリアでそのすぐ下にaddがある場合はブランチを使用します。
これは、シフトまたは回転がキャリービットを介して回転する理由でもあるため、レジスタ/メモリ位置の幅よりも広いビットシフトを実行できます。
2進数の乗算は、10進数に比べて非常に単純ですが、それを割愛して考えさせます。
はい、これを試すためのプログラムを作成することもできますし、作成する必要があります。そして、それでも可能ですが、私は意図的にあなたを誤った情報の道に導く可能性があります。
AL
は を ADC
意味するadd with carry
ので、もちろんキャリーは合計されます。 CF
は 0 に戻されます。これは、問題の加算のキャリー アウトがないためです。
4 になります。ADC (キャリー付き加算) は、キャリー フラグ (CF) が 1 の場合、さらに 1 を加算します。オペコードの完全な説明については、こちらを参照してください。