【问题标题】:accessing 4GB RAM in real mode在实模式下访问 4GB RAM
【发布时间】:2015-09-27 10:53:20
【问题描述】:

是否可以通过启用 A20 在实模式下使用 4GB 内存,无需切换到保护模式,也不会丢失 BIOS 中断?

【问题讨论】:

  • 丢失(丢失?)BIOS 中断?
  • 我认为“......不会失去调用 BIOS 功能的可能性......”的意思。

标签: assembly x86 real-mode


【解决方案1】:

您可以使用虚幻模式来做到这一点。此模式使用限制为 4 GB 的选择器加载一个或多个段寄存器。这种模式有两种形式,Big Unreal Mode 和 Huge Unreal Mode。前者允许访问 1 MB 以上的数据,后者允许访问 1 MB 以上的代码和数据。不过,巨大的虚幻模式很难设置,因为实模式中断只保留EIP 的低 16 位。请参阅this page 了解更多信息。

如果可能,您可能还想从 BIOS 获取内存映射,因为某些内存是内存映射到特定硬件的,不能用作普通内存。请参阅this page 了解更多信息。

【讨论】:

  • 感谢您的解释和链接。我还有一个问题。是否建议使用虚幻模式,或者最好尝试使用自己的中断等设置保护模式。
  • 在 16 位 Big-Real-Mode 中,可以使用大多数 bios 软件中断,并且可以寻址 4 GiB,但不是整个地址空间都可以免费使用,并且一些这些地址包含线性帧缓冲区、内存映射的 IO 设备以及带有来自主板、显示设备和其他设备的 bios 例程的只读内存。
  • @vakus - 这取决于。如果您需要使用 BIOS 功能和所有可以使用的内存,请使用虚幻模式。否则,使用保护模式可能会更好,因为您可以使用它做更多事情。 (自定义中断、任务调度等)
  • 我自己正在开发一个小操作系统(现在已经 2 年了)。我正在使用“虚拟模式”来访问 BIOS 中断。在“虚拟模式”中,大多数指令的行为类似于实模式,但是大约 30 条指令将导致必须模拟这些指令的中断。硬件中断还调用保护模式中断例程,该例程必须模拟实模式中断。所有这些都是大约 2 天的工作。优点是您可以使用真正的 32 位代码,并且可以使用分页,而在虚幻模式下,许多事情都仅限于低内存(代码、rep movsb、...)
  • @MartinRosenau - 是的,V86 模式可供使用,并且可能更容易从保护模式访问,但 OP 专门询问了实模式。而且虚模式比V86模式更容易从实模式访问。
猜你喜欢
  • 1970-01-01
  • 2013-04-27
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多