1

我知道下一条指令的绝对地址位于 50000(十六进制),并且我知道应该在 IP 寄存器中的十六进制值是 4000(十六进制)。我的问题是......为什么它会这样工作?

如果需要,我还有其他可用的注册表值。

任何的想法?

4

1 回答 1

2

8086 寻址(由所有后来的英特尔芯片继承)的怪异之处在于分段。寄存器都是 16 位的,但可寻址内存是 1 Meg = 2 power 20,即一个地址需要 20 位。

英特尔的天才们决定使用两个寄存器来形成完整地址——一个向左移动 4 位的段寄存器(CS、DS、SS、ES),然后添加偏移寄存器以形成完整的 20 位地址。

所以 IP 中的值是与 CS(代码段)中的值的偏移量。从您所说的 CS 中的值应该是(0x50000 - 0x4000) >> 4 = 0x4c00.

于 2010-06-15T14:58:20.153 回答