【发布时间】:2018-05-08 19:05:57
【问题描述】:
例如。对于分段,0000:FFFF 等价于 0001:FFEF (只是假设情况,不知道我们在编程中是否真的使用这些,或者这些是保留空间)
(我是汇编编程的新手。特别是 x86。)
【问题讨论】:
标签: pointers assembly x86 memory-address microprocessors
例如。对于分段,0000:FFFF 等价于 0001:FFEF (只是假设情况,不知道我们在编程中是否真的使用这些,或者这些是保留空间)
(我是汇编编程的新手。特别是 x86。)
【问题讨论】:
标签: pointers assembly x86 memory-address microprocessors
是的,这是允许的。事实上,这不仅是合法的,它还经常用于称为共享内存的功能。
【讨论】:
0000:FFFF 仅在实模式、VM86 模式或 SMM 模式下等效于 0001:FFEF。在这些模式下,根据定义,不启用分页。在没有分页的保护模式下1,由于段偏移量不同(FFFF 与FFEF)但段基地址相同2,因此它们必然被转换为不同的物理地址。对于分页,当段偏移量被添加到段基地址(可能为零)时,它们可能指向相同的虚拟页面或不同的虚拟页面,但无论哪种方式,页面偏移量的最低 12 位有效位将是不同的(因为段偏移的最低 12 位有效位不同),因此无论页表如何设置,它们都不能相等。
通常,不同的地址可以转换为相同的物理地址。当页面偏移量不同但最低有效 12 位仍然相同时,当逻辑地址指向不同大小的页面时,它们可能会转换为相同的物理地址。否则,如果虚拟地址中至少有一个最低有效位 12 位不同,则它们在物理地址空间中不能相等。
在保护模式下,段选择器 0000'0000'0000'00XXb 用作空段选择器,无法访问。但是我们假设它是可访问的(或者考虑 0000'0000'0000'0100b 与 0000'0000'0000'0101b 代替)。
它们引用相同的段,因为段选择器索引(每个选择器的最高有效 13 位)和表指示符(第三最低有效位)相等
【讨论】: