![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-01 19:41 |
共 48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,249 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » DJGPP访问4GB内存问题? |
| 可打印版本 1,308 / 1 |
| 第1楼 miawen | 发表于 2006-10-04 09:35 |
| 初级用户 发帖 6 积分 20 | |
|
DJGPP访问4GB内存问题? 我现在要写一个程序,可以读写4GB的内存空间,用的是DJGPP的编译器!有高手能指教以下吗?
|
|
| 第2楼 miawen | 发表于 2006-10-05 10:20 |
| 初级用户 发帖 6 积分 20 | |
|
经过一天的研究,找到了解决方法,现在贴出来,其实该程序就是根据http://www.delorie.com/djgpp/dl/apps/ 里的Peritool的exsample.c改的。
#include <stdio.h> #include <stdlib.h> #include <dos.h> #include <pc.h> #include <dpmi.h> #include <sys\farptr.h> #include <go32.h> #define u_int unsigned int #define u_long unsigned long u_int map(u_int addr, u_int size); char mem_read(u_long pci_addr) { u_int slctr; char pci_data; slctr=map(pci_addr,0xff); if (slctr == -1) printf ("error selecting memory\n"); else { pci_data=(u_int)_farpeekb(slctr,0);} return pci_data; } char mem_write(u_long pci_addr,char pci_data) { u_int slctr; slctr=map(pci_addr,0xff); if (slctr == -1) printf ("error selecting memory\n"); else _farpokeb(slctr,0,pci_data); return 0; } u_int map(u_int addr, u_int size) { __dpmi_meminfo mi; int selector; /* addr &= (size - 1); */ mi.handle = 0; mi.address = addr; mi.size = size; if (__dpmi_physical_address_mapping(&mi)) { printf ("__dpmi_physical_address_mapping failed\n"); return -1; } selector = __dpmi_allocate_ldt_descriptors(1); if (selector == -1) { printf ("__dpmi_allocate_ldt_descriptors failed\n"); return -1; } if(__dpmi_set_segment_base_address(selector,mi.address)) { printf ("__dpmi_set_segment_base_address failed\n"); return -1; } if(__dpmi_set_segment_limit(selector,mi.size-1)) { printf ("__dpmi_set_segment_limit failed\n"); return -1; } return selector; } int main() { u_long address; printf("please input the address:"); scanf("%x",&address); printf("data before write=%x\n",mem_read(address)); mem_write(address,0x66); printf("data after write=%x\n",mem_read(address)); } |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |