IAPX88 可以处理 1 兆字节内存(20 位寻址),现在我的问题是我们如何通过使用两个 16 位寄存器来制作 20 位地址。请举个例子。
问问题
2295 次
2 回答
5
IAPX88 物理地址的计算方法是获取段寄存器,将其左移 4 位,然后加上偏移寄存器。
例如,代码执行的内存物理地址是 (CS<<4)+IP
其中 CS 是代码段,IP 是指令指针。
您可以在Intel 8086 维基百科页面上获得详细信息。
于 2010-03-20T18:34:44.490 回答
1
我们可以使用移位加法来做到这一点。我们处理 2 位地址:表示为两个 16 位地址的逻辑地址和实际 20 位地址的物理地址。
请记住,由于我们处理的是十六进制,每个数字代表 4 位。
例如,我们要表示地址:7 2 3 A 5
使用两个 16 位地址,我们可以使用这两个地址:7 2 3 A
和0 0 0 5
。
首先,我们将第一个地址向左移动四位:7 2 3 A 0
这称为基址。
然后,我们添加第二个地址:0 0 0 5
称为偏移量。
此操作的结果是一个新的 20 位地址:7 2 3 A 5
.
如果我们的 base 是CS
代码段的开头,我们的 offset 是指令指针IP
,我们可以将前面的操作描述如下:(CS << 4) + IP
注意:我们可以使用许多 16:16 位逻辑地址来描述任何 20 位物理地址,但每个 2 位逻辑地址将只有一个物理地址。
于 2020-10-31T12:54:49.270 回答