-2

これらのフラグ、特にキャリーとオーバーフロー フラグを使って多くの練習をしているサイトを誰か教えてもらえないかと思っていました。

とにかく私の質問はこれです。

講義ノートを見ていると、5ビットの比較が表示されます

Cmp $12、$6 になる

00110 ~ 01100 に変更可能

 00110
+10100
-------
 11010

キャリー フラグ CF = 1 およびオーバーフロー フラグ OF = 0

Cmp $-6, $-12 は 10100 - 11010 となり、

 10100
+00110
-------
 11010

CF =1 、オーバーフローフラグ OF = 0

オーバーフロー フラグが 0 に設定されていることを理解していると思います。これは、これらの小さな数の減算 (または見方によっては加算) により、2 ^ 5 の範囲の数値を超えることのない小さな数値が得られるためです。

キャリーはどうですか?最後のビットが最後の列/ビットから1を持ち越されたことを意味すると思いましたが、それはキャリーフラグですよね?

私が意味するのは、それが次のようなものだった場合です

  1 (carried over from last column) 
  1100......(random binary for the rest ...) 
+ 0100......
-------------

それはキャリーフラグが正しく設定される方法ですか?1 は左から 2 番目の 1+1 から来ました。

私の 2 つの例では、これらは一番左の列の上にある 1 ではありません。

どうしたの?

ありがとう。

4

1 に答える 1

0

減算が内部でどのように実行されるかは問題ではありませんが、一部のプロセッサには実際の減算ハードウェアが含まれていることに注意してください。問題は、減算は 2 番目の数値を否定して加算するのではなく、単に減算することを意味することです。X86 の場合、キャリー フラグは「借用」インジケータであり、数値を符号なしの数値として扱うため、6 ~ 12 は「借用」になります。オーバーフロー フラグは数値を符号付きとして扱い、6 - 12 = -6 であるため、オーバーフローは発生しませんでした。

于 2014-09-17T18:10:58.547 に答える