1

次の命令の絶対アドレスが 50000 (16 進数) であることはわかっており、IP レジスタにあるべき 16 進数値は 4000 (16 進数) であることもわかっています。私の質問は...なぜこのように機能するのですか?

必要に応じて、他のレジストリ値を利用できます。

何か案が?

4

1 に答える 1

2

8086 アドレッシング (後のすべての Intel チップに継承されます) の奇妙さはセグメンテーションです。レジスタはすべて 16 ビットですが、アドレス可能なメモリは 1 メガ = 2 乗 20 です。つまり、アドレスには 20 ビットが必要です。

Intel の天才たちは、完全なアドレスを形成するために 2 つのレジスタを使用することを決定しました。セグメント レジスタ(CS、DS、SS、ES) は 4 ビット左にシフトされ、オフセット レジスタが追加されて完全な 20 ビット アドレスを形成します。

したがって、IP の値は、CS (コード セグメント) の値からのオフセットです。あなたが言ったことから、CSの値は(0x50000 - 0x4000) >> 4 = 0x4c00.

于 2010-06-15T14:58:20.153 に答える