質問: 8086で加算減算とキャリーフラグ adcとsbbはキャリーフラグによって1を加算減算するらしいのですが、そのキャリーフラグを参照するタイミングはadcやsbb自身の加算減算を行う前ですか? それともadcやsbb自身の加算減算によって立てられたキャリーフラグを参照して1を加算減算するのでしょうか?
回答: 直前の状態を参照します。 コンピューターなどのデジタル回路は、クロックに同期して動くようになっています。 クロックを与えた瞬間に、以前の状態を元にして、新しい状態に遷移しますが、クロックを与えた後の結果がさらにそのクロック内で波及する事はありません。 もうちょっと正確に言うと、クロックを与えるのは結果を格納するレジスターです。演算機は常に入ってきた入力に応じて演算結果を遅延を伴いながら出し、レジスターの入力に供給しています。キャリーやレジスターの値が確定し、演算機の出力が安定したところにクロックがやってきて結果を取り込みます。よって参照されるのは古いキャリーの値です。キャリーフラグにも同時にクロックが与えられますので、同時にキャリーの値も更新されます。 2進演算なので細かく見ると16bitの加算器は内部でもキャリーがありますが、それはクロックの影響を受けずに、常に下位ビットから上位ビットに流れます。キャリーフラグだけがクロックに同期して記憶します。