DOS中使用扩展内存与XMS操作库设计
作者:彭学周(Favory.Peng)
DOS系统常规内存指的是0-640K的内存区。在DOS下,一般的应用程序只能使用系统的常规内存,因而都要受到640KB内存的限制。而且由于DOS本身和config.sys文件中的安装的设备驱动程序和autoexec.bat文件中执行的内存驻留程序都要占用一些常规内存,所以应用程序能使用的常规内存是不到640K的。为了解决应用程序的内存需求问题最常用的方法就是使用扩展内存(XMS),扩展内存只能用在80286或更高档次的机器上,目前几乎所有使用DOS的机器上超过1M的内存都是扩展内存。扩展内存同样不能被DOS直接使用,DOS5.0以后提供了Himem.sys这个扩展内存管理程序,我们可以通过它来管理扩展内存。
加载方法:在config.sys文件中要加上一句话:DEVICE=C:/DOS/HIMEM.SYS,然后就能在程序中访问扩展内存了。利用mem.exe查看内存情况就可以看到你的物理内存1M以上的内存都被列为XMS扩展内存部分啦,我们就可以利用HIMEM.SYS提供的内存管理功能接口来使用XMS啦;
XMS的使用步骤如下:
1、加载驱动,在Config中加入DEVICE=C:/DOS/HIMEM.SYS;
2、获取驱动入口地址;
3、申请XMS内存获取句柄;
4、使用XMS内存(写入,读取);
5、根据句柄释放XMS内存;
XMS操作库:
DM&P DOS XMS Library 下载地址:http://www.dmp.com.tw/tech/dmp-lib/xms/
具体的C语言版本的XMS操作函数可以在网上直接搜索到,参考:http://www.blogjava.net/wudiasm/archive/2008/11/09/195680.html
本人用Pascal在TP7.0下面重新实现了这套函数库,希望对你有所帮助;
- {uxms.pas}
- {
- DOS XMS library is a DOS real mode and large memory model Pascal library.
- Because DOS is ran under real mode, programmer only can access RAM under 1MB.
- The memory user can use are 640 KB, Other 384 KB are reserved for ROM BIOS and other cards.
- XMS library provides DOS programmer a easy way to access RAM above 1 MB under DOS via XMS driver.
- For MS-DOS, add "DOS=HIGH" to you CONFIG.SYS will force MS-DOS to active XMS driver.
- ================================================================================
- 3F Medical Pascal XMS Library.
- Copyright (C) 2008 by Favory.Peng.
- This library is for 3F Medical product user only.
- }
- unit UXMS;
- interface
- uses DOS,CRT;
- type
- XMMS = record
- byte_count:LongInt; {bytes count}
- source_handle:word; {source handle}
- source_offset:Pointer;{source offset}
- dest_handle:word; {destination handle}
- dest_offset:Pointer; {destination offset}