C程序中的ASM代码导致分段错误

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

我的程序是:

#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代码时会出现分段错误。 有人能告诉我这个小程序有什么问题吗? 非常感谢。

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

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

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

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