次の命令の絶対アドレスが 50000 (16 進数) であることはわかっており、IP レジスタにあるべき 16 進数値は 4000 (16 進数) であることもわかっています。私の質問は...なぜこのように機能するのですか?
必要に応じて、他のレジストリ値を利用できます。
何か案が?
8086 アドレッシング (後のすべての Intel チップに継承されます) の奇妙さはセグメンテーションです。レジスタはすべて 16 ビットですが、アドレス可能なメモリは 1 メガ = 2 乗 20 です。つまり、アドレスには 20 ビットが必要です。
Intel の天才たちは、完全なアドレスを形成するために 2 つのレジスタを使用することを決定しました。セグメント レジスタ(CS、DS、SS、ES) は 4 ビット左にシフトされ、オフセット レジスタが追加されて完全な 20 ビット アドレスを形成します。
したがって、IP の値は、CS (コード セグメント) の値からのオフセットです。あなたが言ったことから、CSの値は(0x50000 - 0x4000) >> 4 = 0x4c00
.