标题: 请看这段程序
[打印本页]
作者: fengdou151
时间: 2007-10-10 13:08
标题: 请看这段程序
char XMS=0,HMA=0,UMB=0;
void (far *xms)(void);
void get_driver_address()
{
if (XMS)
{
asm {
mov ax,0x4310
int 0x2f
}
xms=(void (far *)())(((long)(_ES)<<16)+_BX);
}
}
typedef struct xms_mov {
unsigned long byte_count; //移动的字节数
unsigned source_handle; //源句柄
unsigned long source_offset; //源偏移量
unsigned destination_handle; //目的句柄
unsigned long destination_offset; //目的偏移量
} xmm;
xmm xmove;
char move_xms(xmm *xmm_ptr)
{
char error_code=0xff;
if (XMS)
{
unsigned xseg=FP_SEG(xmm_ptr),xoff=FP_OFF(xmm_ptr);
asm {
mov ah,0x0b
mov si,xoff
mov ds,xseg
}
xms();//这条语句的作用是什么?
error_code=_BL;
}
return(error_code);
}
移动常规内存到扩展内存中时具体是怎么操作的,定义这个结构的作用是什么?寄存器SI和DS在这里具体的含义是什么?是指移动到扩展内存中的偏移地址和段基址吗?具体是怎样定位扩展内存的地址呢?如果到扩展内存的数据量很大,是不是通过偏移地址和段基址能够访问扩展内存的32位地址呢?希望各位大侠指教,谢谢!