经过一天的研究,找到了解决方法,现在贴出来,其实该程序就是根据
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));
}