28

アセンブリのキャリー フラグ、補助フラグ、オーバーフロー フラグの違いがわかりません。私は現在学校でそれを勉強していますが、先生は詳細には触れませんでした. 理解するのを手伝ってください。試験で必要になります。本当に感謝します!! 私が今知っているように見えることは、データ用に8ビットしかないときに255 + 9を試してみると、キャリーフラグが使用されるということです。補助フラグは同じですが、最後の4ビットのみ?? また、オーバーフローは、2 進数に 7 ビットがあり、8 (左端) が符号に使用される場合に使用されますか???

4

2 に答える 2

50

キャリーフラグ

2 進数/整数演算でキャリー フラグをオンにする規則は 2 つあります。

  1. キャリー フラグは、2 つの数値の加算によって、加算された最上位 (左端) ビットのキャリー アウトが発生した場合に設定されます。1111 + 0001 = 0000 (キャリーフラグがオン)

  2. キャリー (ボロー) フラグは、2 つの数値の減算で、減算される最上位 (左端) ビットへのボローが必要な場合にも設定されます。0000 - 0001 = 1111 (キャリー フラグがオン) それ以外の場合、キャリー フラグはオフ (ゼロ) になります。

    • 0111 + 0001 = 1000 (キャリーフラグがオフ [ゼロ])
    • 1000 - 0001 = 0111 (キャリーフラグはオフ [ゼロ])

符号なし演算では、キャリー フラグを監視してエラーを検出します。

符号付き演算では、キャリー フラグは何も意味を持ちません。

オーバーフロー フラグ

2 進数/整数演算でオーバーフロー フラグをオンにする規則は 2 つあります。

  1. 符号ビットがオフの 2 つの数値の合計が、符号ビットがオンの結果の数値を生成する場合、「オーバーフロー」フラグがオンになります。0100 + 0100 = 1000 (オーバーフローフラグがオン)

  2. 符号ビットがオンの 2 つの数値の合計が、符号ビットがオフの結果の数値を生成する場合、「オーバーフロー」フラグがオンになります。1000 + 1000 = 0000 (オーバーフロー フラグがオン)

それ以外の場合、「オーバーフロー」フラグはオフになります

  • 0100 + 0001 = 0101 (オーバーフローフラグはオフ)
  • 0110 + 1001 = 1111 (オーバーフロー フラグがオフ)
  • 1000 + 0001 = 1001 (オーバーフロー フラグがオフ)
  • 1100 + 1100 = 1000 (オーバーフロー フラグはオフ)

オーバーフロー フラグがオンかオフかを判断するには、3 つの数値の符号ビット (一番左) を確認するだけでよいことに注意してください。

2 の補数 (符号付き) 演算を行っている場合、オーバーフロー フラグがオンになっている場合は、答えが間違っていることを意味します - 2 つの正の数を加算して負の数を取得したか、2 つの負の数を加算して正の値を取得しました。

符号なしの算術演算を行っている場合、オーバーフロー フラグは意味がないため、無視する必要があります。

詳細については、http: //teaching.idallen.com/dat2343/10f/notes/040_overflow.txtを参照してください。

于 2014-09-19T04:51:04.120 に答える
41

キャリー フラグは、次の場合に設定されるフラグです。

a) 2 つの符号なし数値が加算され、結果が保存先のレジスターの「容量」よりも大きい。例: 2 つの 8 ビット数を加算し、結果を 8 ビット レジスタに保存します。あなたの例では: 255 + 9 = 264 で、これは 8 ビット以上のレジスタが格納できます。したがって、値「8」がそこに保存され (264 & 255 = 8)、CF フラグが設定されます。

b) 2 つの符号なし数値が減算され、小さい数値から大きい数値が減算されました。例: 1-2 の場合、結果は 255 になり、CF フラグが設定されます。

補助フラグは CF として使用されますが、BCD を使用する場合に使用されます。したがって、BCD 計算でオーバーフローまたはアンダーフローが発生すると、AF が設定されます。例: 8 ビット ALU ユニットを考えると、3 番目のビットから 4 番目のビットへのキャリー、つまり下位ニブルから上位ニブルへのキャリーがある場合、補助フラグが設定されます。(ウィキリンク)

オーバーフロー フラグは CF として使用されますが、符号付きの数値を処理する場合に使用されます。例: 2 つの 8 ビット符号付き数値を加算したい: 127 + 2. 結果は 129 ですが、8 ビット符号付き数値には多すぎるため、OF が設定されます。-128 - 1 = -129 のように結果が小さすぎる場合も同様で、これは 8 ビットの符号付き数値の範囲外です。

ウィキペディアでフラグの詳細を読むことができます

于 2013-10-10T16:50:57.100 に答える