首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FreeDOS是否允许我的程序访问超过64K的内存?

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

Stack Overflow用户
提问于 2013-12-03 05:04:43
回答 2查看 1.9K关注 0票数 2

我对在FreeDOS上使用C语言编程感兴趣,同时学习了一些基本的FreeDOS,使用FreeDOS是否允许我的程序访问超过标准内存640 K的内存?

其次,关于FreeDOS,我知道在现代处理器上,由于CPU体系结构的复杂性,很难在汇编上编程,但是使用是否将我限制在大概更简单的16位指令集上呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-03 08:17:07

没有任何扩展程序,程序可以使用最大640 in的低内存在DOS。但每种结构都将限制在一个段的大小,即64 or。这意味着您可以有10个大小为64 10的大数组。当然,在一个段中可以有多个数组,但是它们的总大小不能超过段大小。一些编译器还会自动处理跨越多个段的地址,这样就可以无缝地使用大于64 if的对象,或者在程序集中编写时也可以这样做。

要访问更多内存,您需要像环管XMS这样的扩展程序。但请注意,地址空间仍然是20位宽。扩展程序只将高内存区域映射到可寻址空间中的某些段中,这样每次只能看到数据的一个小窗口。

关于程序集,您可以在16位模式下使用32位寄存器.有66h和67h前缀来更改操作数大小。然而,这并不意味着编写16位代码更容易。事实上,它有很多需要记住的特性,比如内存寻址中有限的寄存器使用。32位x86指令集更干净,有更清晰的寻址模式,也有一个平坦的地址空间,使用起来更容易。

票数 1
EN

Stack Overflow用户

发布于 2013-12-03 16:07:36

MS和FreeDOS使用"HIMEM“区域:

  • 在0xA 000:0x0000以上的一些内存区域保留给包含RAM的扩展卡,而不是扩展卡。
  • 从0xFFFF:0x0010开始到0xFFFF:0xFFFF :0xFFFF的内存位于1MB以上,但可以使用16位真实模式代码访问(如果所谓的A20行是活动的)。

以这种方式存档的最大内存大小约为800 K。

使用XMS和EMS,您最多可以使用64米:

  • XMS将在可以通过16位真实模式代码访问的区域之上分配内存块。有一些特殊的函数可以将数据从该内存复制到内存的低640 K,反之亦然。
  • EMS类似;但是,使用EMS可以将高内存“映射”到低地址(32位CPU的特性),这意味着您可以访问1MB区域以上的一些内存,就好像它位于1MB以下的地址一样。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20343282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档