![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-31 18:19 |
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 请看这段程序 |
| 可打印版本 968 / 1 |
| 第1楼 fengdou151 | 发表于 2007-10-10 11:01 |
| 初级用户 发帖 8 积分 30 | |
|
请看这段程序 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位地址呢?希望各位大侠指教,谢谢! |
|
| 第2楼 shanliang8008 | 发表于 2007-10-10 14:33 |
| 银牌会员 发帖 514 积分 1,148 来自 河北 | |
|
太深奥了 貌似有写DOS软件就是这么实现的 可以用DOS内存工具查一查
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |