如何使用两个16位寄存器制作20位地址?

时间:2010-03-20 18:31:41

标签: assembly

IAPX88可以处理1兆字节存储器(20位寻址),现在我的问题是我们如何通过使用两个16位寄存器来产生20位地址。请举例说明。

2 个答案:

答案 0 :(得分:3)

IAPX88物理地址是通过获取段寄存器,将其移位到右4位并添加偏移寄存器来计算的。

例如,代码执行的内存中的物理地址为CS<<4+IP,其中CS是代码段,IP是指令指针。

您可以详细了解Intel 8086 wikipedia page

答案 1 :(得分:1)

我们可以使用移位加法来做到这一点。我们处理2个地址:逻辑地址表示为两个16位地址,物理地址表示实际的20位地址。

请记住,由于我们正在处理十六进制,因此每个数字代表4位。

例如我们要使用两个16位地址来表示地址:7 2 3 A 5,我们可以使用两个地址:7 2 3 A0 0 0 5

首先,我们将第一个地址向左移动四位:7 2 3 A 0,称为 base

然后,我们添加第二个地址:0 0 0 5,称为偏移量

此操作的结果是一个新的20位地址:7 2 3 A 5

如果我们的基址是CS,它是代码段的开始,而偏移量是指令指针IP,那么我们可以如下描述前一个操作:(CS << 4) + IP < / p>

注意:我们可以使用许多16:16位逻辑地址来描述任何20位物理地址,但是每个2位逻辑地址将只有一个物理地址。
enter image description here