在Assembler(Intel 8086)中计算ABSOLUTE ADDRESS / Registry值

时间:2010-06-15 14:46:40

标签: assembly intel x86-16

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

如果需要,我可以使用其他注册表值。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

8086寻址(由所有后来的英特尔芯片继承)的奇怪之处是segmentation。寄存器都是16位,但可寻址存储器是1 Meg = 2电源20,即地址需要20位。

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

因此,IP中的值是与CS(代码段)中的值的偏移量。根据你的说法,CS中的值应为(0x50000 - 0x4000) >> 4 = 0x4c00