3

IA-32 でアドレッシング モードを検索しましたが、アドレッシング モードについて簡単に説明している Web サイトや記事は見当たりませんでした。メモリ変更時の画像と、アドレスモードを画像で特定するだけで簡単に説明できる記事か何かが欲しいです。

IA-32 では、アドレッシングの一般的な形式は次の形式に従うことを知っています。

セグメント + ベース + (インデックス * スケール) + ディスプレイスメント

変位、スケール、インデックス、そして最後にベースの正確な意味を知りたいです。英語もわからないので、強制的に検索しましたが、この場合の単語の技術的な意味が見つかりませんでした(アセンブリプログラミング言語で意味します)。

最後に、IA-32 のアドレッシング モードについて簡単に説明したいと思います。メモリとそのオフセットについての図で説明することをお勧めします。

Linuxの本にあるアセンブリプログラミングのガイドでアセンブリプログラミング言語を学びます。

ほんとありがと。

4

1 に答える 1

3

このパワーポイントプレゼンテーションからこの画像を見つけました。

アドレッシング モード

これは、 のようなアドレスを持つことができることを意味します[eax + ecx * 2 + 100]。これらのフィールドをすべて使用する必要はありません。

メモリ位置の内容の参照も参照してください。(x86 アドレッシング モード)

スケール係数は、2 ビットのシフト カウントとしてマシン コードにエンコードされます。SIB バイトの存在を示す特殊なケースと、インデックスのない SIB バイトの特殊なケースのため、ESP をインデックスにすることはできませSIB ベースとして許可されていない rbpを参照してください。特殊なケースの概要について。


Linux などの通常の OS では、32/64 ビット モードではセグメンテーションを無視できます

セグメント レジスタは、アドレッシング モードのベース レジスタに応じて自動的に選択されるか、またはセグメント オーバーライド プレフィックス (例: ds:)を使用して選択されますcs:

ただし、Linux はフラット メモリ モデルを使用するため、セグメント ベースはすべてのセグメントで常に 0 です (スレッド ローカル ストレージに使用されるfsまたはを除く)。gsセグメント ベースは、ベース、インデックス、スケール、および変位から計算された「オフセット」に追加され、最終的な線形アドレスが取得されます。したがって、通常、「オフセット」部分は線形アドレス全体です。

その線形アドレスは仮想アドレスであり、ハードウェアがページテーブル/ TLB (カーネルによって管理される) を介して物理アドレスに変換されます。

于 2014-08-29T12:26:37.660 に答える