9

私は読んでいて、8086命令セットでは、CMP(比較)がキャリーフラグを設定できると言っています。比較によって 2 つのオペランドが減算されることは理解していますが、そのような場合に誰かが例を提供できるかどうか疑問に思っていました。

数値を追加するという考えを理解できず、負の数値はキャリーフラグを設定します。ボローフラグを読みましたが、比較命令の理解を明確にするために例が必要でした。

また、3 - 5 = -2 が負のフラグを設定する場合...キャリーが設定されるのはいつですか?

4

4 に答える 4

7
  • 桁上げフラグは、アンダーフローまたはオーバーフローが発生した演算の後に設定されます。たとえば、6 から 10 を引くとアンダーフローになり、キャリー フラグがセットされます。同様に、レジスタの最大値に 1 を追加すると、オーバーフローが発生し、キャリー フラグが設定されます。
  • キャリーフラグもシフト操作中に変更され、デスティネーションレジスタからシフトアウトされた最後のビットの値に設定されます。
  • ビット テストは、テストされたビットの値をキャリー フラグに配置します。これを行うオペコード: BT、BTC、BTR、および BTS。
  • キャリー フラグに直接影響する命令: CLC、CMC、および STC。
  • 比較中、あたかも 2 つのオペランドが減算されたかのようにキャリー フラグが設定されます。
  • 否定 (NEG) 中は、オペランドがゼロでない限りキャリー フラグがセットされ、ゼロの場合はクリアされます。
于 2011-11-07T16:55:26.020 に答える
2

キャリー フラグは通常、符号なし演算を使用するときに設定されます。たとえば、2 つの符号なし (結果がレジスタに収まらない) の数値を加算すると、オーバーフロー フラグは発生せず、キャリー フラグのみが発生します。ただし、符号付き演算を使用する場合、このような場合にオーバーフロー フラグが設定されます。

于 2011-11-08T21:23:14.897 に答える
1

関連する質問へのこの回答では、整数の加算または減算に続いて、キャリー フラグとオーバーフロー フラグが 0 と 1 に設定される例を見つけることができます。
また、8 ビット数値のキャリー付き加算命令とボロー付き減算命令をエミュレートするサンプル C コードも見つけることができます。

出力形式は次のようになります。
127( 127) - 255( -1) - 1 = 127( 127) CY=1 OV=0
各数値は、符号なしと括弧付きの符号付き (2 の補数) の両方で表されます。前の数字=は ADC/SBB の前のキャリー フラグです。ADC/SBB の後のキャリー フラグとオーバーフロー フラグを表示しますCY=OV=

比較は、レジスタ/メモリ内の数値を変更せずにキャリー、オーバーフロー、符号、およびゼロフラグ (およびパリティと補助キャリーですが、ここでは重要ではありません) にのみ影響することを除いて、ボローなしの減算とほとんど同じことを行います。

于 2011-11-08T22:42:02.617 に答える