中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 请问DOS下怎样访问32位的地址空间? 
作者:
标题: 请问DOS下怎样访问32位的地址空间?  上一主题 | 下一主题
superham
初级用户




积分 112
发帖 2
注册 2002-12-17
状态 离线
『楼 主』:  请问DOS下怎样访问32位的地址空间? 

菜鸟我最近做一个PCI卡,上面有512K的RAM。 BIOS把它映射到Baseaddress为D8000000的空间(3G以上) 请问我怎样才能访问到这块内存啊(DOS下),大侠救命! WatcomC, DJGPP这类的32位编译器可以做到吗,怎么做,谢谢!

[此贴子已经被作者于2002-12-17 17:43:42编辑过]



2002-12-17 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
雨飞
初级用户

我帅我存在


积分 151
发帖 25
注册 2003-1-10
状态 离线
『第 2 楼』:  

delphi for dos 下面可以用:mem[d8000000]来访问。




我是一颗菠菜,菜菜,菜菜,菜菜,菜菜菜菜菜
2003-1-11 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
szxxbb
初级用户




积分 133
发帖 8
注册 2003-2-4
状态 离线
『第 3 楼』:  

1:use watcom in 32bit char *buf=(char*)0xd800000; i=*buf 2:use dos typedef struct { char gdt0[8]; char gdt1[8]; unsigned int srclimit; unsigned int srclw; unsigned char srclb; unsigned char srcrights; unsigned char srcflag; unsigned char srchb; unsigned int trglimit; unsigned int trglw; unsigned char trglb; unsigned char trgrights; unsigned char trgflag; unsigned char trghb; char bioscs[8]; char biosss[8]; }gdt; gdt For2_gdt; int For2_read(unsigned long srcaddress,char far *bufer,unsigned int lenth) { unsigned int i,j; unsigned char cc,ccl,cch; char far *fp1; int15init(); fp1=&bufer[0]; i=FP_SEG(fp1); j=FP_OFF(fp1); _asm{ mov ax,i mov dx,ax mov bx,j mov cl,04h shl dx,cl rol ax,cl and ax,0fh add bx,dx adc al,0 mov i,bx mov cc,al } For2_gdt.trglimit=0xffff; For2_gdt.trglw=i; For2_gdt.trglb=cc; For2_gdt.trghb=0; For2_gdt.trgflag=0x4; For2_gdt.srclimit=0xffff; For2_gdt.srclw=(unsigned int)(srcaddress&0xffff); For2_gdt.srclb=(unsigned char)((srcaddress>>16)&0xff); For2_gdt.srchb=(unsigned char)((srcaddress>>24)&0xff); For2_gdt.srcflag=0x4; For2_gdt.srcrights=0x92; For2_gdt.trgrights=0x92; fp1=&(For2_gdt.gdt0[0]); i=FP_SEG(fp1); j=FP_OFF(fp1); _asm{ mov ax,i mov es,ax mov si,j mov cx,lenth mov ah,87h int 15h mov i,ax } return i; } void int15init() { int i; for(i=0;i<8;i++) { // For2_gdt.bioscs=0; // For2_gdt.biosss=0; For2_gdt.gdt0=0; For2_gdt.gdt1=0; } For2_gdt.bioscs[0]=0xff; For2_gdt.bioscs[1]=0xff; For2_gdt.bioscs[2]=0; For2_gdt.bioscs[3]=0; For2_gdt.bioscs[4]=0x0f; For2_gdt.bioscs[5]=0x9b; For2_gdt.bioscs[6]=0; For2_gdt.bioscs[7]=0; For2_gdt.biosss[0]=0xff; For2_gdt.biosss[1]=0xff; For2_gdt.biosss[2]=0; For2_gdt.biosss[3]=3; For2_gdt.biosss[4]=0; For2_gdt.biosss[5]=0x93; For2_gdt.biosss[6]=0; For2_gdt.biosss[7]=0; }


2003-2-4 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: