C语言:编写访问PCI的小工具(六)

2013-11-20 14:17:57 · 作者: · 浏览: 770

 

  下面是我写的一段小程序事例,读取bus 0, device 0, function 0上面的所有64个寄存器的内容。

  [cpp]

  int main()

  {

  void iowrite(short int port1,unsigned long value);

  unsigned long int ioread(short int port);

  short int Config_Add=0xcf8;

  short int Config_Dat=0xcfc;

  int bus=0x00,dev=0x00,fun=0x00,reg=0x00;

  unsigned long dat;

  for(reg=0;reg<0x40;reg++){

  iowrite(Config_Add,(0x80000000 |(bus《16) |(dev《11) |(fun《8) |(reg《2)));

  dat=ioread(Config_Dat);

  printf("%8.8lx",dat);

  printf(" ");

  if((reg+1)%4==0){printf("\n");}

  }

  return 0;

  }

  unsigned long ioread(short int port)

  {

  unsigned long valueRet;

  asm mov dx, port;

  asm lea bx, valueRet;

  __emit__(

  0x66,0x50,

  0x66,0xED,

  0x66,0x89,0x07,

  0x66,0x58);

  return valueRet;

  }

  void iowrite(short int port1, unsigned long value)

  {

  asm mov dx, port1;

  asm lea bx, value;

  __emit__(

  0x66,0x50,

  0x66,0x8B,0x07,

  0x66,0xEF,

  0x66,0x58);

  return;

  }

  运行的结果和下图类似,我是在我的windows环境下运行的,所以数据内容肯定不对,大致的看一下就ok了。