0

保護されたフラット モデルの特定のプロセスの CS および DS セグメント レジスタは同じ値を保持しますか?
つまり、同じプログラム内で次のコード シーケンスを実行し
mov dword ptr [0x7fffffff], ebx

org 0x7fffffff
...some instruction ...

同じ場所を指しますか?(もしそうなら、保護されたフラット モデルで CS と DS を分離する目的は何ですか?) ありがとうございます。

4

1 に答える 1

2

セグメント レジスタの値と意味は環境 (つまり、オペレーティング システムと OS モード) によって異なりますが、現在はほとんどがフラット メモリ モデルで保護モードを使用しています。MASM 構文を使用しているため、Windows (Win32) 向けに開発していると思います。

Win32 プログラミング モデルは、ほとんどの Unix バリアントと同様に、フラットな 32 ビット アドレス空間を使用します。CS、DS、ES、および SS を介してアドレス指定されたロケーションは、同じ論理アドレスを参照します。i386 の FS レジスタは、Win32 タスク情報ブロック (TIB) を指します。

セグメント レジスタ CS、DS、ES、および SS (1 つを忘れましたか :-)?) は、8086 時代に端を発する歴史的な重要性を主に持っています。適切な x86 アセンブリ チュートリアルがあれば、それが解決されます。

org疑似オペコードは、アセンブラにロケーション カウンタを指定された値に変更するよう指示します。これは、コードがどこに配置され、どのベース相対アドレスが計算されるかに影響します。アセンブラが異なれば、このコマンドの処理も異なります (NASM/MASM)。アプリケーション プログラムについては、例のデフォルトに固執してください。システム プログラミングに興味がある場合は、Linux カーネルと Grub をダウンロードして、ブートストラップ コードを分析してください。

トピックに固執してください - あなたはあなたのマシンについて多くを学ぶでしょう!

于 2013-06-05T17:30:56.373 に答える