我对 FreeDOS 上的 C 语言编程很感兴趣,同时在这个过程中学习了一些基本的 ASM,使用 FreeDOS 会让我的程序访问超过标准 640K 的内存吗?
其次,关于 ASM,我知道由于 CPU 架构的复杂性,在现代处理器上很难进行汇编编程,但是使用 FreeDOS 是否会限制我使用可能更简单的 16 位指令集?
最佳答案
MS-DOS 和 FreeDOS 使用“HIMEM”区域:这些是:
- 0xA000:0x0000以上的一些内存区域保留给包含RAM而不是扩展卡的扩展卡
- 从 0xFFFF:0x0010 到 0xFFFF:0xFFFF 之间的内存,位于 1MB 以上,但可以使用 16 位实模式代码访问(如果所谓的 A20 线处于事件状态)。
通过这种方式可以归档的最大内存大小约为 800K。
使用XMS和EMS您最多可以使用64M:
- XMS 将在可通过 16 位实模式代码访问的区域之上分配内存块。有一些特殊的函数可以将数据从该内存复制到低 640K 内存,反之亦然
- EMS类似;然而,使用 EMS 可以将高位内存“映射”到低位地址(32 位 CPU 的一项功能),这意味着您可以访问 1MB 区域以上的某些内存,就像它位于 1MB 以下的地址一样。里>
关于c - 使用 FreeDOS 是否允许我的程序访问超过 64 K 的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20343282/