1

私の知る限り、物理アドレスは、セグメント アドレス (16 ビット) を左に 4 回シフトし、16 ビットのオフセット アドレスを加えることによって計算されます。私の質問は、セグメント: オフセット アドレス値の 2 つの異なるセットが同じ結果を与える場合はどうなるかということです。200A:B608 および 2138:A328 の場合

200A0

+B608


2B6A8


21380

+A328


2B6A8


どちらも同じ結果になります!!

さて、それは、それらが同じ物理アドレスを指しているということですか (そうであれば、どのように?)、

または、物理アドレスが上記の方法で計算されることを意図していないかどうか?

または、有効な場合、物理アドレスからセグメント:オフセットアドレスを取得するにはどうすればよいですか (それは可能ですか?)

4

1 に答える 1

3

実際、実アドレス モードでは、セグメント レジスタ値は左に 4 ビット シフトされ、オフセットに加算されて 20 ビットの線形アドレスになります (このモードでは物理アドレスと同じです)。

明らかに、これは異なるセグメント: オフセット ペアが同じ物理アドレスに変換される可能性があることを意味します (ページングが有効になっている保護モードで異なる線形アドレスが同じ物理アドレスに変換される可能性があるのと同じように)。論理アドレスと線形アドレスの間に 1:1 のマッピングがないため、線形アドレスから取得できる唯一のものは、それに変換されるセグメント:オフセットのペアのセットです。

詳細な説明は、インテルのマニュアル、ボリューム 3B、セクション 20.1.1 にあります。

于 2013-05-07T19:50:08.910 に答える