2017-01-28 6 views
0

来週の学校のアセンブリ/プロセッサーアーキテクチャー試験を準備しているので、私は何か混乱してしまいました。ネガティブ条件フラグNにもオーバーフローが設定されていますか?

2進加算を行う場合、我々は約4条件フラグを学んだ:

N =結果負

Z =結果がゼロ

C =操作がキャリー

が生成されます

V =演算でオーバーフローが発生する

しかし、オーバーフローが発生したときにNフラグを設定する必要があるかどうかについては混乱しています。

だが、一例として6 + 7の2の補数におけるこの4ビットの加算を考える:2の補数の数を有する4ビットで計算するとき

0110 
0111+ 
----- 
1101 = result 

さて、これは明らかにオーバーフローが生じます。結果は13ビット(01101は5ビット)になりますが、結果は-3ビットになります。これは4ビットでしか表示できないためです。 私の質問は、ネガティブフラグNもこの場合に設定されていますか?結果は負の数であるためです。

+1

はい、設定されています。 Nフラグは単なる最上位ビットのコピーです。もちろん、あまりにもオーバーフローなしに設定することができます。 – Jester

答えて

2

私はあなたが使用しているプロセッサを正確に知らなくても、一定のため、この質問に答えることはできませんが、は通常 Nは、他のすべてのフラグの独立した結果の高い(符号)ビット、に等しく設定されます。したがって、あなたの例では、NとVの両方が設定されます。

(N、Z、およびCはほとんど常にALUから出てくるビットの単純な関数です.Cは加算器からのキャリーアウトです.Nは結果の上位ビットに等しく、ZはちょうどですNOT(OR(レジスタのすべてのビット))それは、その定義がプロセッサにプロセッサによって異なる可能性が最も高いVです)

1

あなたの4ビットの例の場合では、以下の例で考えると進みます。

== 1111
  • 0001 + 1110(小数:1 +( - 2)== -1)

ネガティブですが、オーバーフローはありません。

  • 1100 + 1001 == 0101(小数点以下:(-4)+(-7)== 5; -11オーバーフローせずになるであろう)

ていない負の、しかしoveflowed。

これは、負のフラグがオーバーフローファクトに直接関係しないことを示しています。通常は説明されていないもの:オーバーフローフラグがサインが間違っている意味とすぐとしては、1が負フラグとオーバーフローフラグのXORとして真の結果の符号を検出することができます。

S = N xor V 

しかし

ここでSは 真のサインフラグです(NZVCスキームには直接存在しません)。このフラグは、分岐操作で仮想的に使用されます。たとえば、BGTの条件が ((N xor V) or Z) == 0の場合、これは実際には S or Z == 0、つまり S == 0 and Z == 0を意味します。

一部の命令セットアーキテクチャ。 AVRは、負のフラグの代わりに真のサインフラグを持っています。

関連する問題