中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-10-31 19:45
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行
DOS开发编程 & 发展交流 (开发室) » Dos如何能让程序使用到xms的内存
可打印版本  1,359 / 2
第1楼 liyangwyh 发表于 2007-06-12 17:21
初级用户 发帖 24 积分 72
Dos如何能让程序使用到xms的内存
请问各位,我一个程序有3百多K了,再调用别的程序就出现内存不足的问题,请Dos如何能让程序使用到xms的内存
第2楼 firstsail 发表于 2007-06-12 17:50
高级用户 发帖 295 积分 668 来自 广东深圳
关于XMS内存,可以这样获得
(1)通过使用WinSail V2.0的XMS管理模块,类名为CXmsMemroy获得
(2)直接访问XMS,参照XMS扩展内存规范!

void far *pXmsVector = NULL; //XMS管理程序入口地址

//......

union REGS mRegs;
struct SREGS mRegSegs;
mRegs.x.ax = 0x4310;
int86x(0x2F, &mRegs, &mRegs, &mRegSegs);

//注意int 是16位整数
*(((unsigned int far *)&pXmsVector) + 0) = mRegs.x.bx;
*(((unsigned int far *)&pXmsVector) + 1) = mRegSegs.es;


if (pXmsVector == NULL)
{
//你没有安装Xms扩展内存管理程序,请加载Himem.Sys文件
}

[ Last edited by firstsail on 2007-6-12 at 06:41 PM ]
第3楼 firstsail 发表于 2007-06-12 21:44
高级用户 发帖 295 积分 668 来自 广东深圳
我有一个工程,多个Exe文件加起来有8M字节多,整个工程14M多,如果编译成一个Exe文件是不实现的,我作了功能分解

“主程序 + 子程序1 + 子程序2 + 子程序3 + 子程序4 ... + 子程序N ”

为了运行“子程序”,将“子程序文件名 + 识别标志 + 回车换行”写入键盘缓冲区,并将“主程序”主动退出,这时会自动运行“子程序”。

子程序退出到DOS之前,将“主程序文件名 + 识别标志 + 回车换行”写入键盘缓冲区,“子程序”退出后,会自动运行“主程序”。


(1)子程序读到“识别标志”,表示是主程序调用,退出时必须实现调回主程序的代码。

(2)主程序读到“识别标志”,表示是子程序返回,必须实现子程序退出前的状态代码。


由于键盘缓冲区只有32字节,除去回车换行后,只剩下14个有效字符,所以不要写入程序名所在的目录,也不要写入文件后缀。

由于写入键盘缓冲区的每一个字符,必须写入“高字节扫描码 + 低字节ASCII码”,这样太繁,可以来一个偷梁换柱,写入的是“高字节永为0”,低字节ASCII码”。经测试,在“纯DOS”或Win9X下能正确运行。而在WinXP或Win2000下只需人工补一个回车换行即可。

[ Last edited by firstsail on 2007-6-12 at 10:11 PM ]
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023