2

我在一个小程序中包含了一些示例 ASM 代码来进行测试。

我的程序是:

#include <stdio.h>

static inline
unsigned char inb (int port) {
    unsigned char data;
    asm volatile("inb %w1,%0" : "=a" (data) : "d" (port));
    return data;
}

int main()
{
    printf("hello world %d\n", inb(22));
    return 0;
}

当我运行该程序时,它在执行 ASM 代码时因分段错误而崩溃。有人能告诉我这个小程序有什么问题吗?非常感谢。

4

3 回答 3

7

ioperm在允许使用端口 I/O 之前,您需要使用。另外,请注意内核已经提供了inboutb函数

使用 ioperm(2) 或 iopl(2) 来告诉内核允许用户空间应用程序访问有问题的 I/O 端口。不这样做将导致应用程序收到分段错误。

于 2012-04-26T09:52:37.243 回答
2

如果您的操作系统是 Windows 或 Linux,您的程序很可能被终止,因为操作系统不允许常规应用程序访问 I/O 端口。

于 2012-04-26T09:49:26.383 回答
0

你的语法是绝对正确的。只需在系统上找到并使用有效或未使用的端口即可。

于 2012-04-26T10:04:45.797 回答