Memory 如何在启动后计算内核中可能的最低和最高mem地址?

Memory 如何在启动后计算内核中可能的最低和最高mem地址?,memory,assembly,kernel,ram,Memory,Assembly,Kernel,Ram,在真实模式下启动后,我想计算出最低和最高值 我可以使用的可能内存地址。我想我需要弄清楚 安装在机器上的ram的实际尺寸,然后进行计算 地址应该很简单(但只是为了好玩,我该怎么做:))。 然后我就可以把这些地址用作 我的gdt权利的基础和限制?这样在加载gdt之后, 进入保护模式,并设置我的段。我会记住的 可用于播放。根据定义,实模式无法处理所有内存。您必须首先切换到保护模式,使用安全GDT限制,扫描内存,然后相应地调整描述符限制 至于检测内存,只需尝试从不断增加的物理地址读取,直到出现异常为止。

在真实模式下启动后,我想计算出最低和最高值 我可以使用的可能内存地址。我想我需要弄清楚 安装在机器上的ram的实际尺寸,然后进行计算 地址应该很简单(但只是为了好玩,我该怎么做:))。 然后我就可以把这些地址用作 我的gdt权利的基础和限制?这样在加载gdt之后, 进入保护模式,并设置我的段。我会记住的
可用于播放。

根据定义,实模式无法处理所有内存。您必须首先切换到保护模式,使用安全GDT限制,扫描内存,然后相应地调整描述符限制


至于检测内存,只需尝试从不断增加的物理地址读取,直到出现异常为止。为此指定一个选择器,在循环中重置描述符,然后继续操作。

您可能不知道如何判断特定异常何时发生,以及如何处理它,您会知道吗?何时-何时从不可用的物理地址读取。如何处理它-得出没有更多内存的结论并停止循环:)但不确定会出现哪种异常。随便看看。@SevaAlekseyev:当你读到frmo“不可用的物理地址”时,你会得到什么样的“例外”?(参考?)另请参见此处: