有以下代码,如何在Delphi及Win2000中实现。给些思路也好。谢谢!unsigned x_pt[4]={0,0,0,0};unsigned cd_chk(short unsigned i,short unsigned p)
{
 union REGS regs; regs.x.bx = i;
 regs.x.ax = 0xb109;
 regs.x.di = p;
 int86(0x1a, ®s, ®s);
 return(regs.x.cx);
}char sw_light(char number, char on_off, char card)
{
 char n;
 unsigned i,a,k=0,*xpt;
 union REGS regs; if (number==0) {
   if (on_off==1)
     n=0xff;
   else
     n=0;
 }
 else {
   if (on_off==1)
     n=0x7f&number;
   else
     n=0x80|number;
 } xpt=&x_pt[card]; if ((*xpt)==0) {
   (*xpt)=0xffff;
   for (i=0; i<0x800; i+=0x8) {
     if (cd_chk(i,0x06)!=0x400) continue;
     a=cd_chk(i,0x40);
     if (cd_chk(i,0x44)!=a) continue;
     a/=0x100;
     if (k==card) {
       (*xpt)=(cd_chk(i,0x10)&0xfff0)+0x84;
       break;
     }
     k++;
   }
 }
 if ((*xpt)&&((*xpt)!=0xffff)) outportb((*xpt),n); return(n);
}
  

解决方案 »

  1.   

    没啥好看的
    NT下非Ring0无法访问中断的
    写成驱动程序才行的
      

  2.   

    跟语言无关,用delphi嵌入asm可以做到,就是一个int1a而已
    普通程序是无法调用中断的.
      

  3.   

    这是一段在DOS及98下可以实现的PCI卡控制编程的例子,在Win2000下面无法这样做。显然,内嵌汇编是不可以的,因为Win2000不支持这样的操作。经过自己的仔细研究,发现在Win2000里面已经不需要使用类似的中断编程技术。直接读写操作PCI卡即可。问题已经解决,路过的朋友虽然对我解决问题没有什么帮助,还是谢谢你们的关注,散分。