近くのポインターの暗黙的なセグメントレジスタはどのように決定されますか?

StackOverflow https://stackoverflow.com/questions/2877900

質問

のセクション4.3で Intel64®およびIA-32アーキテクチャソフトウェア開発者のマニュアル。ボリューム1:基本アーキテクチャ, 、それは言う:

近くのポインターは、セグメント内の32ビットのオフセットです。近くのポインターは、フラットメモリモデルのすべてのメモリ参照、またはアクセスされるセグメントのアイデンティティが暗示されるセグメント化されたモデルの参照に使用されます。

これにより、私は不思議に思うことにつながります:暗黙のセグメントレジスタはどのように決定されますか?

そんなこと知ってる (%eip) そして変位しました (%eip) (例えば -4(%eip))使用のアドレス %cs デフォルトでは、そしてそれ (%esp) そして変位しました (%esp) アドレスの使用 %ss, 、しかし、どうですか (%eax), (%edx), (%edi), (%ebp) など、暗黙のセグメントレジスタは、メモリアドレスオペランドが表示される命令にも依存できますか?

役に立ちましたか?

解決

以外 CSSS あなたが言及した登録アクセス、他のほとんどのアクセスは DS セグメントレジスタ。思い出すことができるいくつかの例外:

  • 文字列指向の命令は、を使用します ES 「目的地」の場合(暗黙的に対処されています EDI 登録)セグメントレジスタ
  • を使用してメモリアクセス EBP 「ベースアドレス」レジスタとして登録すると、 SS セグメントレジスタ。ただし、 EBP レジスタはスケーリングされたインデックスレジスタとして使用され、使用されるセグメントは DS (ベースアドレス登録がない限り ESP)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top