フラグについて

ステータスレジスタのフラグについておさらい。代表的なものにキャリーフラグ(C)、オーバーフローフラグ(V)、ゼロフラグ(Z)、ネガティブフラグ(N)がある。ちょっと混乱するCとVについては、


C:符号なし整数の範囲を超えて、繰り上がり/繰り下がり
V:符号つき整数の範囲を超えて、符号ビットが破壊(あふれ)


言い換えるなら、


C:最上位ビットで繰り上がり/繰り下がりが生じた場合
V:最上位ビット(符号ビット)の一つ下のビットで繰り上がり/繰り下がりが生じた場合


【4ビットでの例】


A = 0100
B = 0011
A+B = 0111, C = 0, V = 0
符号なし: 4 + 3 = 7 繰り上がり無し
符号つき: 4 + 3 = 7 あふれ無し

A = 0101
B = 0110
A+B = 1011, C = 0, V = 1
符号なし: 5 + 6 = 11 繰り上がり無し
符号つき: 5 + 6 ≠ -5 あふれ有り

A = 0101
B = 1101
A+B = 0010, C = 1, V = 0
符号なし: 5 + 13 = 16 + 2 繰り上がり有り
符号つき: 5 + (-3) = 2  あふれ無し

A = 1101
B = 1010
A+B = 0111, C = 1, V = 1
符号なし: 13 + 10 = 16 + 7 繰り上がり有り
符号つき: (-3) + (-6) ≠ 7 あふれ有り



【H8の条件分岐命令との関係】
X-Y を計算した結果に基づき、

BHS 符号なし X≧Y C = 0
BLO 符号なし X<Y C = 1
BHI 符号なし X>Y C|Z = 0
BLS 符号なし X≦Y C|Z = 1

BGE 符号つき X≧Y N^V = 0
BLT 符号つき X<Y N^V = 1
BGT 符号つき X>Y (N^V)|Z = 0
BLE 符号つき X≦Y (N^V)|Z = 1

符号なしではCを、符号ありではVをチェックしている。