标题: [公告]c编程使用xms起步:问题已经解决
[打印本页]
作者: wwgfree
时间: 2004-3-25 00:00
标题: [公告]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
[此贴子已经被作者于2004-3-26 16:31:17编辑过]