1

据我所知,物理地址是通过将段地址(16位)左移4次并将其与16位偏移地址相加来计算的。我的问题是,如果两组不同的段:偏移地址值给出相同的结果,例如。对于 200A:B608 和 2138:A328

200A0

+B608


2B6A8


21380

+A328


2B6A8


两者都给出相同的结果!

现在,这是否意味着它们指向相同的物理地址(如果是,如何?),

或者物理地址是否不应该以上述方式计算?

或者,如果它有效,那么我怎样才能从物理地址中获取段:偏移地址(这可能吗?)

4

1 回答 1

3

在实地址模式下,段寄存器的值确实被左移 4 位,然后添加到偏移量以形成 20 位线性地址(在这种模式下与物理地址相同)。

显然,这意味着不同的段:偏移量对可以转换为相同的物理地址(就像启用分页的保护模式中的不同线性地址可以转换为相同的物理地址一样)。由于逻辑地址和线性地址之间没有 1:1 映射,因此您可以从线性地址获得的唯一东西是一组转换为它的段:偏移量对。

您可以在英特尔手册第 3B 卷第 20.1.1 节中找到更详细的说明。

于 2013-05-07T19:50:08.910 回答