我知道下一条指令的ABSOLUTE ADDRESS位于50000(十六进制),我知道应该在IP寄存器中的十六进制值是4000(十六进制)。我的问题是......为什么它会像这样工作?
如果需要,我可以使用其他注册表值。
有什么想法吗?
答案 0 :(得分:2)
8086寻址(由所有后来的英特尔芯片继承)的奇怪之处是segmentation。寄存器都是16位,但可寻址存储器是1 Meg = 2电源20,即地址需要20位。
英特尔的天才决定使用两个寄存器来形成完整地址 - 一个段寄存器(CS,DS,SS,ES)向左移位4位,然后添加偏移注册以形成完整的20位地址。
因此,IP中的值是与CS(代码段)中的值的偏移量。根据你的说法,CS中的值应为(0x50000 - 0x4000) >> 4 = 0x4c00
。