中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-15 07:24
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行
DOS开发编程 & 发展交流 (开发室) » [公告]c编程使用xms起步:问题已经解决
可打印版本  1,149 / 0
第1楼 wwgfree 发表于 2004-03-25 00:00
初级用户 发帖 1 积分 105
[公告]c编程使用xms起步:问题已经解决
我用msc6.0编程,应用在pc104嵌入式系统中,使用的是DOC磁盘,系统是win98带的Dos,采样LARGE模式。需要用到xms(通过HIMEM.SYS的功能调用),找了个例子,改完后分配内存都没有问题,就是一交换数据就死机,这是交换数据的代码,请大家帮忙看看,或再给些例子看看也行。另外希望请教的是:使用xms有没有版本的问题,和dos版本有没有关系? 多谢!

typedef struct EMB_struct
{
unsigned long len; /*--需传输的数据字节数(32位)--*/
unsigned sour_han; /*源数据块句柄*/
unsigned long sour_off; /*源数据块偏移量(32位)*/
unsigned dest_han; /*目标数据块句柄*/
unsigned long dest_off; /*目标数据块偏移量*/
}EMB,*PEMB;

//功能: 扩充内存和常规内存中的数据交换
//参数:
//返回: void
//_FunctionXMS:扩展内存管理函数指针
//_emb:EMB全局变量
//_ErrorNo:错误标号全局变量
void movedataXMS(void)
{
UINT _ax;
UINT _seg;
UINT _off;
char far * pEMB;

if(_FunctionXMS)
{
pEMB = (char far *)(&_emb);
//不知道会不会影响就都给保存了
_asm push ds
_asm push es
_asm push si

_asm push ds
_asm pop es
_asm lds si, pEMB
_asm ah, 0x0b

(* _FunctionXMS)();

_asm pop si
_asm pop es
_asm pop ds

_asm mov _ax, ax
_ErrorNo = 0;
if(_ax)
_ErrorNo=0;
else
{
_asm mov _ErrorNo, bl
}
}
}
是函数调用的问题,由于本人汇编很菜,犯了不该犯的错误,此时功能调用函数需要使用es






















[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023