中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-22 07:29
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » Dos如何能让程序使用到xms的内存 查看 1,120 回复 2
楼 主 Dos如何能让程序使用到xms的内存 发表于 2007-06-12 17:21 ·  中国 广东 深圳 福田区 电信
初级用户
积分 72
发帖 24
注册 2006-11-02 10:44
19年会员
UID 69292
性别 男
状态 离线
请问各位,我一个程序有3百多K了,再调用别的程序就出现内存不足的问题,请Dos如何能让程序使用到xms的内存
2 发表于 2007-06-12 17:50 ·  中国 广东 深圳 宝安区 电信
高级用户
★★
积分 668
发帖 295
注册 2005-07-26 00:00
20年会员
UID 41110
性别 男
来自 广东深圳
状态 离线
关于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 发表于 2007-06-12 21:44 ·  中国 广东 深圳 宝安区 电信
高级用户
★★
积分 668
发帖 295
注册 2005-07-26 00:00
20年会员
UID 41110
性别 男
来自 广东深圳
状态 离线
我有一个工程,多个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 ]
论坛跳转: