我知道下一个指令的绝对地址位于50000(十六进制),并且我知道应该是在IP注册的十六进制值是4000(十六进制)。我的问题是...为什么会喜欢这个工作?

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

任何想法?

有帮助吗?

解决方案

8086寻址古怪(由所有后来英特尔芯片继承)是分割 。这些寄存器都是16位,但可寻址存储器是1兆欧= 2功率20,即需要20个比特的地址。

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

因此,在IP值中CS从偏移值(代码段)。从你说的话在CS的值应为(0x50000 - 0x4000) >> 4 = 0x4c00

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top