2

次のテーブルがある場合:

Case 1:    x: 42           y: -15           (y-x) = -57 
Case 2:    x: -17          y: -17           (y-x) = 0
Case 3:    x: 0x7ffffffd   y: -67           (y-x) = 2147483584
Case 4:    x: 67           y: -0x7fffffffd  (y-x) = 2147483584

条件コード フラグが設定するもの (フラグごとに 0 または 1)ZF SF OFCF

命令を検討するとき: cmp1 %eax %ecx if %eaxcontainsxおよび%ecxcontains y?

私はそれが以下によって実行されることを理解していcmp1 ...,...ます:cmp1 SRC2,SRC1

つまり、「条件コードをSRC1–に設定しますSRC2

フラグが次のことを表していることを理解しています。

OF = overflow (?)
ZF = zero flag i.e. zero...
CF = carry out from msb
SF - sign flag i.e. negative

表の 4 つのケースでは、フラグは次のようになると思います。

1) ZF = 0 SF = 1 CF = 0 OF = ?
2) ZF = 1 SF = 0 CF = 0 OF = ?
3) ZF = 0 SF = 0 CF = 1 OF = ?
4) ZF = 0 SF = 0 CF = 1 OF = ?

私は正しいですか?CF どちらがTRUEに設定されるかを判断する方法と、何が何であるかを説明しOF、私の誤解を修正してください。ありがとうございました。

4

1 に答える 1

1

桁上げオーバーフローは、算術演算によって生成された桁上げがレジスタに収まらない場合に発生します。したがって、8 ビットのレジスタがあり、10000000 と 10000000 (符号なし) を加算したい場合:

 10000000
 10000000
 --------
100000000

この 1 は最上位ビットからのキャリーであるため、CF = 1 に設定されます。

この他の回答も確認してください。

于 2013-11-04T22:08:36.530 に答える