【发布时间】:2013-05-01 10:34:50
【问题描述】:
据我所知,物理地址是通过将段地址(16 位)左移 4 次并加上 16 位偏移地址来计算的。 我的问题是,如果 2 组不同的段:偏移地址值给出相同的结果怎么办? 例如。对于 200A:B608 和 2138:A328
200A0
+B608
2B6A8
和
21380
+A328
2B6A8
两者的结果相同!!
现在,这是否意味着它们指向相同的物理地址(如果是,如何?),
或者物理地址是否不应该以上述方式计算?
或者,如果它有效,那么我怎样才能从物理地址中获取段:偏移地址(这可能吗?)
【问题讨论】:
-
我认为任何现代操作系统都不再使用分段内存模型,尽管大多数 x86 芯片仍然包含启用该功能的电路。甚至 DOS 通常大部分时间都是在虚拟环境中运行...
-
@twalberg 实际上,操作系统使用分段内存,但仅用于保护地址空间(环或特权级别,链接到段 IIRC)。在 x86 上,NT 系列(包括 7 个)至少使用 4 个段,还有 IIRC(可能更多)
-
关于这个问题..我发现这里使用物理地址和逻辑地址有点令人困惑(可能,从操作系统的角度来看,它们对我有不同的含义。无论如何,我相信段选择器是 16 位长,但在 8086 上只有 4 位有意义?这就是可寻址内存为 1 MB(20 位)的原因,这就是为什么您只需要移动 4 位。(作为评论发布,因为我不太确定,会需要检查但我现在没有材料)
标签: x86 computer-architecture x86-16 16-bit