读取PCI,BUS 0,DEV 0,FUN 0配置空间中完整的256字节的数据:

#include <stdio.h>  
#include <dos.h>  
#include <conio.h>  
#include <bios.h>  
  
  
int a[16][16];  
void output()/*矩阵输出*/  
{  
  
    int i,j,h;  
    clrscr();  
    printf("  ");  
    for(i = 1;i<17;i++)  
    {  
        a[0][i] = i-1;  
        printf(" %02x",a[0][i]);  
    }  
    printf("\n");  
    for(j = 0;j<16;j++)  
    {  
        a[j+1][0] = j;  
        printf("%02x",a[j+1][0]);  
        for(h = 1;h<17;h++)  
        {  
            printf(" %02x",a[j+1][h]);  
        }  
        printf("\n");  
    }     
  
}  
unsigned long int get(unsigned long int Addr)/*寻址读取数据*/  
{  
    unsigned long int data;  
    asm mov dx,0xcf8     
    asm db 0x66     
    asm mov ax, Addr  
    asm db 0x66     
    asm out dx,ax     
    asm mov dx,0xcfc     
    asm db 0x66     
    asm in ax,dx     
    asm db 0x66     
    asm mov data,ax  
    return data;  
}  
  
void main()  
{  
    int n,m,k,l;  
    int offset;  
    unsigned long int Addr,Bus,Dev,Fun,data,ll,lh,hl,hh;  
    unsigned long int Baseaddress;  
    offset = 0;  
    Baseaddress = 0x80000000;  
    Bus = 0;  
    Dev = 0;  
    Fun = 0;  
    l = 0;  
    m = 1;  
    for(n = 0;n<64;n++)  
    {  
        Addr = Baseaddress+(Bus<<16)+(Dev<<11)+(Fun<<8)+offset;  
        data = get(Addr);  
        offset = offset+4;  
        ll = data&0x000000ff;/*将32位数据拆减成8位输出*/  
        lh = (data>>8)&0x0000ff;  
        hl = (data>>16)&0x00ff;  
        hh = (data>>24)&0xff;  
        a[m][l*4+1] = ll;  
        a[m][l*4+2] = lh;  
        a[m][l*4+3] = hl;  
        a[m][l*4+4] = hh;  
        l++;  
        if(0 == n%4&& 0 != n)  
        {  
            m++;  
            l = l-4;  
        }  
    }  
   output();  
   getch();  
}  

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-19
  • 2021-06-18
  • 2021-05-25
  • 2021-12-19
  • 2021-08-16
  • 2022-12-23
猜你喜欢
  • 2022-02-25
  • 2021-11-14
  • 2021-12-28
  • 2022-12-23
  • 2021-10-23
  • 2022-01-05
相关资源
相似解决方案