使用FreeDOS是否允许我的程序访问超过64 k的内存?

时间:2013-12-03 05:04:44

标签: c++ c assembly dos

我感兴趣的是在FreeDOS上用C编程,同时在学习一些基本的ASM的过程中,使用FreeDOS会让我的程序访问超过标准的640k内存吗?

其次,关于ASM,我知道在现代处理器上,由于CPU架构的复杂性,很难对汇编进行编程,但使用FreeDOS是否限制了我可能更简单的16位指令集?

2 个答案:

答案 0 :(得分:1)

没有任何扩展程序,程序可以在DOS上使用最大640KB的低内存。但每个结构将限制一个段的大小,或64KB。这意味着您可以拥有10个大小为64KB的大型数组。当然,您可以通过在段中包含多个数组来使用更多数组,但它们的总大小不得超过段大小

答案 1 :(得分:1)

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以下的地址一样。 / LI>