1

我试图理解以下代码:

#include<stdio.h>
#include<stdlib.h>
#include<sys/io.h>

#define baseport 0x378

int main()
{
    int b;
    if(ioperm(baseport,3,1))
    {
        perror("ioperm");
        exit(1);
    }
    outb(0,baseport);

    usleep(1000000);
    printf("\n the status: %x,\n",inb(baseport));

    if (ioperm(baseport,3,0)) {perror("ioperm"); exit(1);}

    exit(0);
}

输出是 0xff,十进制的 255,无论我是在端口 1 还是端口 0 上写(使用outb())。当我写 0 时,我不明白为什么它是 255。

4

2 回答 2

5

执行 inb(0x378) 的结果取决于硬件。一些芯片返回你之前用 outb 写入的值,而另一些芯片只是返回垃圾。在任何情况下,它都不是从可能连接的设备中读取字节的端口。

于 2012-03-17T15:40:09.213 回答
-1

首先看看端口如何表现,作为输入或输出或两者兼而有之!!!..如果可以将其配置为两者..您必须设置为各自的模式,那么只有您才能期望正确的行为..

于 2012-03-19T11:45:53.583 回答