中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » Dos如何能让程序使用到xms的内存
作者:
标题: Dos如何能让程序使用到xms的内存 上一主题 | 下一主题
liyangwyh
初级用户





积分 72
发帖 24
注册 2006-11-2
状态 离线
『楼 主』:  Dos如何能让程序使用到xms的内存

请问各位,我一个程序有3百多K了,再调用别的程序就出现内存不足的问题,请Dos如何能让程序使用到xms的内存

2007-6-12 17:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
firstsail
高级用户





积分 668
发帖 295
注册 2005-7-26
来自 广东深圳
状态 离线
『第 2 楼』:  

关于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 ]

2007-6-12 17:50
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
firstsail
高级用户





积分 668
发帖 295
注册 2005-7-26
来自 广东深圳
状态 离线
『第 3 楼』:  

我有一个工程,多个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 ]

2007-6-12 21:44
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: