我在一个小程序中包含了一些示例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代码时因分段错误而崩溃。 有人能告诉我这个小程序有什么问题吗?非常感谢。
答案 0 :(得分:7)
在允许使用端口I / O之前,您需要使用ioperm
。另外,请注意内核已提供inb
and outb
functions。
使用ioperm(2)或iopl(2)告诉内核允许 用户空间应用程序访问有问题的I / O端口。失败 这样做会导致应用程序收到分段错误。
答案 1 :(得分:2)
如果您的操作系统是Windows或Linux,很可能您的程序已终止,因为操作系统不允许常规应用程序访问I / O端口。
答案 2 :(得分:0)
你的语法绝对正确。只需找到并使用系统上有效或未使用的端口即可。