10

私は Linux のアセンブリを行っていますが、フラット メモリ モデルであることを理解しています。私が混乱しているのは、NEAR JMP と FAR JMP です。

NEAR は同じセグメントにあり、FAR は別のセグメントです。私が理解していることから、Linux仮想メモリにはセグメントがありませんか? また、プログラムのコードが複数のセグメントに配置されているかどうかは、どうすればわかりますか?

4

5 に答える 5

11

それは長い間セグメントではありませんでした。プロテクトモードx86の正しい用語はセレクターです。

そうは言っても、ニアジャンプとファージャンプの違いは、前者は同じコードセレクターcsを維持し、後者は(通常は)それを変更することです。

フラットメモリモデルでは、ほとんどの場合、前者の場合がその方法です。

フラットメモリモデルが複数のセレクターによって提供されるオペレーティングシステムを使用することもできますが、その有用な使用例はわかりません。少なくともx86ではLinuxの動作方法ではありません。

于 2013-02-11T12:49:48.753 に答える
6

NEAR は同じセグメントにあり、FAR は別のセグメントです。

ニア ジャンプは、現在のコード セグメント内の場所 ( で示されるcs) にジャンプします。far jump は通常、別のコード セグメント内の場所にジャンプするために使用されますが、far アドレスのセグメント セレクターが の値と一致する場合は、現在のセグメント内の場所にもジャンプできますcs

私が理解していることから、Linux仮想メモリにはセグメントがありませんか?

ある種のセグメント化されたメモリを使用する Linux の CPU への移植を見つけても、私は驚かないでしょう。だから、私はそれが依存していると思います。ただし、Linux が x86 プラットフォームでセグメントを使用することはほとんどありません。しかし、繰り返しになりますが、あなたや他の誰かが、リアル モードで動作し、セグメントを使用する小さな Linux を作成することができます。

また、プログラムのコードが複数のセグメントに配置されているかどうかは、どうすればわかりますか?

CPU と OS を確認します。当然、移植可能な C コードを作成する場合、これは問題になりません。

于 2013-02-11T12:51:31.810 に答える
2

私が理解していることから、Linux仮想メモリにはセグメントがありませんか?

それは十分に正確です。セグメントbaseが指す位置を持つスレッド固有のデータはありますが、far jump に適したセグメントはありません。%fs

また、プログラムのコードが複数のセグメントに配置されているかどうかは、どうすればわかりますか?

ターゲット プラットフォームが Linux の場合、そうでないことはすでにわかっています。(現代のOSがまだセグメントを意味のある方法で使用しているとしたら、私は驚くでしょうjump far .

于 2013-02-11T12:49:26.323 に答える