X86 如何获得物理内存的实际大小?

X86 如何获得物理内存的实际大小?,x86,operating-system,cpu,X86,Operating System,Cpu,我正在尝试为x86体系结构创建一个小型操作系统。 在问题中由于内存管理我现在有物理内存的大小? 在保护模式下,我如何使用汇编或其他方式获得它?您使用的是与多引导兼容的引导加载程序(如GRUB)?@harold no,我已经创建了自己的简单引导加载程序,只需将内核加载到内存中,切换到32位模式并跳转到内核位置。获取内存映射的正常方法是通过带e820的BIOS。确切答案取决于您是使用传统BIOS、UEFI还是多引导引导加载程序;但在所有情况下,您都会得到一个地址空间所有区域的列表,并指示每个区域是保

我正在尝试为x86体系结构创建一个小型操作系统。 在问题中由于内存管理我现在有物理内存的大小?
在保护模式下,我如何使用汇编或其他方式获得它?

您使用的是与多引导兼容的引导加载程序(如GRUB)?@harold no,我已经创建了自己的简单引导加载程序,只需将内核加载到内存中,切换到32位模式并跳转到内核位置。获取内存映射的正常方法是通过带e820的BIOS。确切答案取决于您是使用传统BIOS、UEFI还是多引导引导加载程序;但在所有情况下,您都会得到一个地址空间所有区域的列表,并指示每个区域是保留的还是包含可用内存。要得到总数,你必须把它们加起来。无法仅获取总大小。在切换到保护模式之前,您必须从BIOS获取内存映射。您是否使用与多引导兼容的引导加载程序(如GRUB)?@harold no,我创建了自己的简单引导加载程序,只需将内核加载到内存中,切换到32位模式并跳转到内核位置。获取内存映射的正常方法是通过带e820的BIOS。确切答案取决于您是使用传统BIOS、UEFI还是多引导引导加载程序;但在所有情况下,您都会得到一个地址空间所有区域的列表,并指示每个区域是保留的还是包含可用内存。要得到总数,你必须把它们加起来。无法仅获取总大小。在切换到保护模式之前,必须从BIOS获取内存映射。