![]() |
中国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 |