近くのポインターの暗黙的なセグメントレジスタはどのように決定されますか?
-
04-10-2019 - |
質問
のセクション4.3で Intel64®およびIA-32アーキテクチャソフトウェア開発者のマニュアル。ボリューム1:基本アーキテクチャ, 、それは言う:
近くのポインターは、セグメント内の32ビットのオフセットです。近くのポインターは、フラットメモリモデルのすべてのメモリ参照、またはアクセスされるセグメントのアイデンティティが暗示されるセグメント化されたモデルの参照に使用されます。
これにより、私は不思議に思うことにつながります:暗黙のセグメントレジスタはどのように決定されますか?
そんなこと知ってる (%eip)
そして変位しました (%eip)
(例えば -4(%eip)
)使用のアドレス %cs
デフォルトでは、そしてそれ (%esp)
そして変位しました (%esp)
アドレスの使用 %ss
, 、しかし、どうですか (%eax)
, (%edx)
, (%edi)
, (%ebp)
など、暗黙のセグメントレジスタは、メモリアドレスオペランドが表示される命令にも依存できますか?
解決
以外 CS
と SS
あなたが言及した登録アクセス、他のほとんどのアクセスは DS
セグメントレジスタ。思い出すことができるいくつかの例外:
- 文字列指向の命令は、を使用します
ES
「目的地」の場合(暗黙的に対処されていますEDI
登録)セグメントレジスタ - を使用してメモリアクセス
EBP
「ベースアドレス」レジスタとして登録すると、SS
セグメントレジスタ。ただし、EBP
レジスタはスケーリングされたインデックスレジスタとして使用され、使用されるセグメントはDS
(ベースアドレス登録がない限りESP
)
所属していません StackOverflow