计算绝对地址/注册表值汇编(8086英特尔)
题
我知道下一个指令的绝对地址位于50000(十六进制),并且我知道应该是在IP注册的十六进制值是4000(十六进制)。我的问题是...为什么会喜欢这个工作?
我有其他可用的注册表值,如果在需要它们。
任何想法?
解决方案
8086寻址古怪(由所有后来英特尔芯片继承)是分割 。这些寄存器都是16位,但可寻址存储器是1兆欧= 2功率20,即需要20个比特的地址。
在英特尔的天才决定使用两个寄存器,以形成完整的地址 - 一段寄存器(CS,DS,SS,ES),其被左移4位,然后用偏移加注册以形成完整的20位地址。
因此,在IP值中CS从偏移值(代码段)。从你说的话在CS的值应为(0x50000 - 0x4000) >> 4 = 0x4c00
。
不隶属于 StackOverflow