3

私はシステム アーキテクチャの初心者レベルの学生で、正確には intel x86 です。現在、インテルのマニュアル (1,3a,3b,3c) を読んでいて、セグメンテーションの部分で行き詰まっています。

私の知る限り、保護モードでは、システムは論理メモリを線形メモリ(または物理メモリ)に変換しており、「ファーポインタ」は2つの異なる部分、セグメントを持つ実際の線形(または物理)メモリアドレスを指していますセレクターとオフセット。

大学で学んだように、各セグメント レジスタにはデータの 16 ビット部分があります。Intel のマニュアルによると、16 ビットはセグメント レジスタの目に見える部分だけですが、ユーザーがプログラムしたりアクセスしたりできないセグメント レジスタの隠れた部分がもっとあります。セグメントレジスタの実際のサイズを知ることができる可能性はありますか?

2番目の質問は、保護モードの LDT 、 GDT 、 IDT レジスタについてです。それらのレジスタ (LDTr、GDTr、IDTr) は CPU チップセットの実際のレジスタですか? そうである場合、ブート シーケンス (prevelige ring 3、ユーザー モード) の後にそれらのテーブルにアクセスする機会はありますか?

私の質問を読んでくれてありがとう。

PS。グーグルで検索してみましたが、答えが見つかりませんでした。だからこそ、私はこの質問を書くのに時間を費やしています。

4

2 に答える 2

3

x86 セグメント レジスタはすべて 16 ビットです。「隠された」セグメントレジスタ部分については知りません。Google 検索で何も見つからなかった場合、その存在は疑わしいと思います。

Local Descriptor Table (LDT)、Global Descriptor Table (GDT)、および Interrupt Descriptor Table (IDT) の適切な説明については、Wikipedia に適切な説明があります: http://en.wikipedia.org/wiki/ Intel_8086 .

于 2014-01-15T17:10:21.410 に答える
3

セグメントレジスタは 16 ビットです。セグメント レジスタが参照するセグメント記述子は、より大きくなります紛らわしいのは、すべての i386 以降のプロセッサには、セグメント レジスタに対応するセグメント記述子の小さな非コヒーレント キャッシュ (セグメント レジスタごとに 1 つのキャッシュされた記述子) があることです。これは、隠し部分と呼ばれることもあります。セグメントレジスタの。キャッシュ内の各エントリは特定のセグメント レジスタに密接に関連付けられていますが、実際にはレジスタの一部ではありません。キャッシュは、セグメント レジスタに書き込まれるたびに、対応するキャッシュ要素が更新 (メモリから再読み取り) され、セグメント レジスタを使用する命令は、そのレジスタではなく、そのレジスタに対応するキャッシュされた記述子を使用するという点で、セグメント レジスタに密接に結び付けられています。メモリから記述子を読み取るよりも。

于 2014-01-15T17:48:05.317 に答える