2017-05-08 14 views
1

一部のチュートリアルでは、EFLAGSレジスタは汎用レジスタであるとしていますが、他のチュートリアルでは汎用レジスタではないと言われています。EFLAGSは汎用レジスタですか?

これはどちらですか?

+5

汎用レジスタではありません。事実上ステータスレジスタです。 –

+0

https://en.wikipedia.org/wiki/FLAGS_register –

答えて

1

これらは汎用レジスタではありません。むしろ、 "プログラムステータスおよび制御レジスタ" Intel's Documentation用として、ボリュームA:enter image description here

+1

私は「ESP」はスタックを指し示す必要があるので「汎用レジスタ」ではないと言っています。 –

+3

@MartinRosenau、いいえ、RSPは何かを指すことができません。アプリケーションはスタックの使用を諦めることを選択できます。もしそうなら、好きな目的にRSPを使うことができます。 – Johan

+0

@Johan "汎用"という言葉は、何かを何らかの目的のために使用できることを意味します。実際には、CPL = 3のとき、ESPレジスタは任意の値を持つことができますが、 'call'命令や' push'命令を使用しない限りです。しかし、CPL = 0のとき、ESPは確実にスタックを指し示す必要があります。ESPレジスタの無効な値(例えば、マップされていないアドレスを指す)は、割り込みが発生した場合に "トリプルフォルト" (NMIのように)そういうわけで、私はESPが「汎用目的の」レジスタではないと言います。 –

3

いいえ、

It is not because

  • あなたが直接それに対処することはできません。 MOV EFLAGS, Value命令はありません。
  • EFLAGSを使用して計算を実行することはできません。
  • EFLAGSを任意の命令の明示的な送信元または宛先として指定することはできません。唯一のレジスタ内のビットの限定セットに作用PUSHFPOPFSAHF、およびLAHF とにも、これらの命令:

は実際には、唯一の4あなたは、全体としてeflagsレジスタに対処できるようにする指示があります。

実際には、eflagsは一般的な目的のレジスタから遠く離れています。これは特別な目的のステータスレジスタです。

関連する問題