CFは主に符号なし計算に使われるフラグで、JA・JBといった条件分岐にしようされます。
CFが立つのは次の3つの場合が存在します。
- 足し算した結果、繰上りが起こった場合
- 引き算した結果、繰下がりが起こらなかった場合
- SEC命令によって強制的に立てた場合
多くのコンピュータの内部では2の補数表現が使用されていますので、正の数同士の引き算は内部的には足し算で計算されています。
個人的にはこの部分が少し理解しにくかったです。
さて、「上記の足し算した結果、繰下がりが起こらなかった場合」という部分が理解しにくい方もいらっしゃると思います。
実は、2の補数表現では次のような法則が成り立ちます。
・「繰り下がりのない引き算は、内部的には繰り上がりのある足し算」
・「繰り下がりのある引き算は、内部的には繰り上がりのない足し算」
例として「5 - 3」と「5 - 6」を考えてみます。
「5 - 3」は2進数では「0101 + 1101」と考えることができます。
計算結果は「10010」となり、繰り上がりが発生しています。
しかし、10進数の世界では「5 - 3」では繰り下がりが発生しません。
つまり「繰り下がりのない引き算は、内部的には繰り上がりのある足し算」であると考えられます。
よって、CFは1にセットされます。
「5 - 6」は先ほどと同様に「0101 + 1010」と考えることができます。
計算結果は「1111」となり、繰り上がりは発生しません。
しかし、10進数の世界では「5 - 6 = -1」というふうに繰り下がりが発生します。
つまり、こちらも「繰り下がりのある引き算は、内部的には繰り上がりのない足し算」と考えられます。
よって、CFは0のままです。
参考「http://donkeyhacks.zouri.jp/databank/65C816/function/carry.html」「https://lipoyang.hatenablog.com/entry/20131031/p1」