Board logo

标题: [公告]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编辑过]