ccrフラグを使用すると、オーバーフローとキャリーを除いてほとんどが自明ですが、このhttp://teaching.idallen.com/dat2343/10f/notes/040_overflow.txtによれば、それらを理解できるはずです
キャリーフラグ
2 進数/整数演算でキャリー フラグをオンにする規則は 2 つあります。
キャリー フラグは、2 つの数値の加算によって、加算された最上位 (左端) ビットのキャリー アウトが発生した場合に設定されます。
1111 + 0001 = 0000 (キャリーフラグがオン)
キャリー (ボロー) フラグは、2 つの数値の減算で、減算される最上位 (左端) ビットへのボローが必要な場合にも設定されます。
0000 - 0001 = 1111 (キャリーフラグがオン)
それ以外の場合、キャリー フラグはオフ (ゼロ) になります。* 0111 + 0001 = 1000 (キャリー フラグがオフ [ゼロ]) * 1000 - 0001 = 0111 (キャリー フラグがオフ [ゼロ])
符号なし演算では、キャリー フラグを監視してエラーを検出します。符号付き演算では、キャリー フラグは何も意味を持ちません。
オーバーフロー フラグ
2 進数/整数演算でオーバーフロー フラグをオンにする規則は 2 つあります。
符号ビットがオフの 2 つの数値の合計が符号ビットがオンの結果の数値を生成する場合、「オーバーフロー」フラグがオンになります。
0100 + 0100 = 1000 (オーバーフローフラグがオン)
符号ビットがオンの 2 つの数値の合計が、符号ビットがオフの結果の数値を生成する場合、「オーバーフロー」フラグがオンになります。
1000 + 1000 = 0000 (オーバーフロー フラグがオン)
それ以外の場合、オーバーフロー フラグはオフになります。* 0100 + 0001 = 0101 (オーバーフロー フラグがオフ) * 0110 + 1001 = 1111 (オーバーフロー フラグがオフ) * 1000 + 0001 = 1001 (オーバーフロー フラグがオフ) * 1100 + 1100 = 1000 (オーバーフロー フラグがオン)オフ)
オーバーフロー フラグがオンかオフかを判断するには、3 つの数値の符号ビット (一番左) を確認するだけでよいことに注意してください。
2 の補数 (符号付き) 演算を実行している場合、オーバーフロー フラグがオンになっている場合は、答えが間違っていることを意味します - 2 つの正の数を足して負になったか、2 つの負の数を足して正になったということです。
符号なしの算術演算を行っている場合、オーバーフロー フラグは意味がないため、無視する必要があります。