![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-14 23:22 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 请问DOS下怎样访问32位的地址空间? |
| 可打印版本 1,471 / 2 |
| 第1楼 superham | 发表于 2002-12-17 00:00 |
| 初级用户 发帖 2 积分 112 | |
|
请问DOS下怎样访问32位的地址空间? 菜鸟我最近做一个PCI卡,上面有512K的RAM。
BIOS把它映射到Baseaddress为D8000000的空间(3G以上) 请问我怎样才能访问到这块内存啊(DOS下),大侠救命! WatcomC, DJGPP这类的32位编译器可以做到吗,怎么做,谢谢! |
|
| 第2楼 雨飞 | 发表于 2003-01-11 00:00 |
| 初级用户 发帖 25 积分 151 | |
|
delphi for dos 下面可以用:mem来访问。
|
|
| 第3楼 szxxbb | 发表于 2003-02-04 00:00 |
| 初级用户 发帖 8 积分 133 | |
|
1:use watcom in 32bit
char *buf=(char*)0xd800000; i=*buf 2:use dos typedef struct { char gdt0; char gdt1; 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; char biosss; }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; 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); 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=0xff; For2_gdt.bioscs=0xff; For2_gdt.bioscs=0; For2_gdt.bioscs=0; For2_gdt.bioscs=0x0f; For2_gdt.bioscs=0x9b; For2_gdt.bioscs=0; For2_gdt.bioscs=0; For2_gdt.biosss=0xff; For2_gdt.biosss=0xff; For2_gdt.biosss=0; For2_gdt.biosss=3; For2_gdt.biosss=0; For2_gdt.biosss=0x93; For2_gdt.biosss=0; For2_gdt.biosss=0; } |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |