1

NEG 命令がオーバーフロー フラグにも影響するかどうかを知りたいです。変数の値を無効にすることは知っていますが、Overflow フラグに影響するかどうかはわかりませんでした。

4

2 に答える 2

5

命令が何をするかを知りたい場合は、リファレンス マニュアルを参照してください。

重要なリファレンス、つまり Intel 命令セットのマニュアルには、NEG 命令について次のように書かれています。

Flags Affected
The CF flag set to 0 if the source operand is 0; otherwise it is set to 1.
The OF, SF, ZF, AF, and PF flags are set according to the result. 

したがって、NEG 命令が O フラグを設定することは明らかです。したがって、OPの元の質問であるOフラグに影響します。そして、実行されるたびにそうします。(「変更されていない」と「設定されていない」を混同しないでください)。

その特定のリファレンス マニュアルでは、O がいつゼロまたは 1 に設定されるかを示す特定のアルゴリズムを提供していません。ただし、Intel CPU は 2 の補数のマシンです。Subtract 命令の言い回しはまったく同じです。NEG X は (0 SUBTRACT X) と同等です。したがって、NEG は (0 SUBTRACT X) の「オーバーフロー」に従って O ビットを設定する必要があります。これにより、X が 0x8000000 の場合に O が設定されます。

Intel Basic Archiecture Manualを調べると、OF ビットの説明が次のように見つかります。

OF (bit 11) Overflow flag
— Set if the integer result is too large a positive number or too small a
  negative number (excluding the sign-bit) to fit in the destination operand;
  cleared otherwise. This flag indicates an overflow condition for signed-integer
 (two’s complement) arithmetic

私たちの理解を確認します。

于 2014-10-18T14:35:52.307 に答える