2011-07-12 7 views
3

EFLAGSレジスタの未定義の第2ビットがデフォルトで1に設定されているのはなぜかと思います。 その他の未定義/予約ビットはすべて0に設定されています。これは特別な意味を持っていますか?EFLAGSビット1が常にセットされているのはなぜですか?

+0

0には特別な意味がありますか?いいえ、歴史的な理由からちょっとしたことが起きただけの状態です。文書化されたステータスについてはhttp://en.wikipedia.org/wiki/FLAGS_registerを参照してください。 –

答えて

2

「予約済み」であり、「未定義」ではありません。おそらく、それは単に通常のアプリケーションに晒されていないいくつかの内部状態を反映します。

文書化されていない動作は、実際には「内部的にしか文書化されていない」ことを意味します。

+1

「文書化されていない」動作はどこにありますか?そして、あなたが言ったことを言うようにする「内部的にしか書かれていない」ことについて、あなたは何を特定していますか? –

+0

時々、これらは企業秘密です。例えば、GPUではそれが起こります。 – spraff

0

おそらく、このビットはデフォルト/互換性の設定が真と見なされるように予約されています。

予約ビットに割り当てられる値が重要な場合の例として、x86ページテーブルのNo-eXecuteビットを考慮してください。このビットはゼロの値で予約済みと定義されていたため、これをeXecute許可ビット(ソフトウェアの互換性を維持したまま)と呼ぶことはできませんでした。さらに、x86がページテーブルツリーをどのように使用するかによって、最後のアクセス許可はページテーブルのすべてのレベル(NXを除く)のアクセス許可設定のandによって生成されます。これにより、各パーミッションビットは、少なくとも仮想メモリの最も制限的なセクションと同じくらい制限的になります。ただし、より限定的なアクセス許可としてNXが1の場合、NXは別の方法(andの代わりにorを使用)で処理する必要があります。

一貫した概念フレームワークを提供することは、メモリをより信頼できるものにします(少数のバグが生成され、特定の種類のバグがより明白になり、ドキュメントをチェックする必要性が低くなり、学習が容易になります)。予約ビットを1ビットとして提供することにより、合理的にデフォルトになる値は、一貫性のある簡単な名前と表現を持つことができます。

関連する問題