Board logo

标题: 求助,如何在dos下访问32位io端口? [打印本页]

作者: 紫雪     时间: 2003-7-29 00:00    标题: 求助,如何在dos下访问32位io端口?

我要配置pci的寄存器,可对0xcfc和0xcf8的读写要求32操作。
我用的事bc3.1,没有这样的函数,直接写汇编如
      out dx,eax
编译无法通过,各位大侠有什么经验和方法么?
作者: ATLaS     时间: 2003-7-30 00:00
在watcom c下有outpd()和inpd()来读写32位io,djgpp下是outpl()和inpl()。
bc下可以:
1. 调用int1A的pci bios extension中断对pci设备的寄存器进行32位读写操作;
2. 写一个自己的oupd()和inpd() for bc,sample如下:
static ULONG inpd(int portnum)
{
    static ULONG value ;
    asm mov dx,portnum ;
    asm lea bx,value ;
    __emit__(0x66,0x50,            // push EAX
    0x66,0xED,                          // in EAX,DX
    0x66,0x89,0x07,                   // mov [BX],EAX
    0x66,0x58) ;                        // pop EAX
    return value ;
}

static void outpd(int portnum, ULONG val)
{
    static ULONG value = 0 ;
    value = val ;
    asm mov dx,portnum ;
    asm lea bx,value ;
    __emit__(0x66,0x50,              // push EAX
    0x66,0x8B,0x07,                     // mov EAX,[BX]
    0x66,0xEF,                             // out DX,EAX
    0x66,0x58) ;                          // pop EAX
    return ;
}
作者: wangnan16     时间: 2003-8-22 00:00
高人。