我在一个小程序中包含了一些示例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
。 另外,请注意内核已经提供了outb
和outb
函数 。
使用ioperm(2)或者iopl(2)来告诉内核允许用户空间应用程序访问有问题的I / O端口。 如果不这样做将导致应用程序收到分段错误。
你的语法是绝对正确的。 只需在您的系统上找到并使用有效或未使用的端口即可。