应该用sys/farptr.h中的_far*系列函数来访问内存。以下函数原型来自djgpp v2.0x的libc帮助文档。
#include
unsigned char _farpeekb(unsigned short selector, unsigned long offset);
unsigned short _farpeekw(unsigned short selector, unsigned long offset);
unsigned long _farpeekl(unsigned short selector, unsigned long offset);
void _farpokeb(unsigned short sel, unsigned long off, unsigned char val);
void _farpokew(unsigned short sel, unsigned long off, unsigned short val);
void _farpokel(unsigned short sel, unsigned long off, unsigned long val);
void _farsetsel(unsigned short selector);
unsigned short _fargetsel(void);
void _farnspokeb(unsigned long offset, unsigned char value);
void _farnspokew(unsigned long offset, unsigned short value);
void _farnspokel(unsigned long offset, unsigned long value);
unsigned char _farnspeekb(unsigned long offset);
unsigned short _farnspeekw(unsigned long offset);
unsigned long _farnspeekl(unsigned long offset);
假定你要访问的内存地址为:
unsigned long ulAddr = 0x0000a000;
用_farpokeb(_dos_ds, ulAddr, byte)来写一个byte,用_farpeekb()来读一个byte。_dos_ds是系统预定义值,直接用就行了。
如果要连续访问内存地址区间, 则可以:
unsigned int i, wLen = 0x1000;
_farsetsel(_dos_ds);
for (i = 0; i < wLen; i++) {
printf("0x%02hX\t", _farnpeekb(ulAddr + i);
}
ps: 建议认真阅读djgpp faq,如果这样的问题你问在djpp的邮件列表里,他们只会回答你faq 10.2或者18.x。