Memory management x86虚拟地址长度

Memory management x86虚拟地址长度,memory-management,operating-system,Memory Management,Operating System,读书时 英特尔®64和IA-32体系结构软件开发人员手册 以及一些关于保护模式的相关教程。 我遇到了这个问题。 根据手册和博客 (谷歌翻译) 虚拟地址应该是16+32位,对吗? 那么,当使用一些低级汇编语言编程时,提供的地址是什么?或者,简单地说,我们在调试时看到的地址是什么? 我猜是32位。 编程或调试中的地址是线性地址吗? 非常感谢。在现代x86系统(如windows/*nix)上的用户模式下,虚拟地址为64位(尽管某些位目前未使用)或32位。x86机器上的虚拟地址始终为32位,通常在地址0

读书时

英特尔®64和IA-32体系结构软件开发人员手册

以及一些关于保护模式的相关教程。 我遇到了这个问题。 根据手册和博客 (谷歌翻译)

虚拟地址应该是16+32位,对吗? 那么,当使用一些低级汇编语言编程时,提供的地址是什么?或者,简单地说,我们在调试时看到的地址是什么? 我猜是32位。 编程或调试中的地址是线性地址吗?
非常感谢。

在现代x86系统(如windows/*nix)上的用户模式下,虚拟地址为64位(尽管某些位目前未使用)或32位。

x86机器上的虚拟地址始终为32位,通常在地址0-0x7FFFFFFF和内核地址0x8000000-0xFFFFFFFF上有用户空间(当然,地址空间如何分割也有例外)。您发布链接的页面谈到16位实模式,其中地址为16位,但实际上只能寻址1MB内存,因为还使用了分段(附加寄存器)

我不知道你为什么说16+32位-也许你混合了虚拟寻址和分段。仍然有16位分段寄存器,但是,分段在大多数操作系统上是不推荐的,它没有被使用。有关如何工作的详细信息,请参阅你提到的英特尔手册

虚拟地址的大小与低级程序集无关,在那里,您通常仍然编写32位应用程序(只要您不编写自己的操作系统,而该操作系统需要一些实模式代码才能在x86上启动)