⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcis_int.cpp

📁 dos下分别用汇编指令和c语言实现pci设备的访问。
💻 CPP
字号:
#include <stdio.h>
#include <conio.h>
#include <dos.h>

void main(void)
{
    int bus, device, func, regindex;
    union REGS regs, outregs;
    unsigned long lo, hi, ovalue;
    unsigned long BaseAddr;

    clrscr();
    func = 0;
    regindex = 0;
    for(bus=0; bus<5; bus++)
    {
	for(device=0; device<32; device++)
	{
	     regs.h.bh = bus;
	     regs.h.bl = (device<<3) | (func & 0x07);
	     regindex = 0;
	     regs.x.di = regindex;
	     regs.x.ax = 0xB109;
	     int86(0x1A,&regs,&outregs);
	     lo = outregs.x.cx;
	     regs.x.di = regindex + 2;
	     int86(0x1A,&regs,&outregs);
	     hi = outregs.x.cx;
	     ovalue = hi*65536l+lo;
	     if (lo != 0xffff)
	     {
		 printf("\nBus = 0x%x\n", bus);
		 printf("Device = 0x%x\n", device);
		 printf("ID = %lx\n", ovalue);

		 for(BaseAddr=0; BaseAddr<=5; BaseAddr++)
		 {
		     regindex = 0x10 + BaseAddr*4;
		     regs.x.di = regindex;
		     int86(0x1A,&regs,&outregs);
		     lo = outregs.x.cx;
		     regs.x.di = regindex + 2;
		     int86(0x1A,&regs,&outregs);
		     hi = outregs.x.cx;
		     ovalue = hi*65536l+lo;
		     printf("Base%d: Low = 0x%x\tHi = 0x%x\n", BaseAddr, lo, hi);
		 }
		 regindex = 0x3c;
		 regs.x.di = regindex;
		 int86(0x1A,&regs,&outregs);
		 lo = outregs.x.cx;
		 printf("IRQ# = %d\n", lo & 0xff);
		 getch();
	     }
	}
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -