2012-04-26 8 views
2

테스트를 수행하기 위해 작은 프로그램에 샘플 ASM 코드를 포함 시켰습니다.C 프로그램의 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

어떤 컴파일러입니까? – Ben

+0

리눅스에서 gcc를 사용하고 있습니다. – mike

답변

2

OS가 Windows 또는 Linux 인 경우 OS가 일반 응용 프로그램이 I/O 포트에 액세스하는 것을 허용하지 않기 때문에 프로그램이 종료되었을 가능성이 높습니다.

+0

예, 액세스 권한이 문제입니다. – mike

7

포트 I/O를 사용하려면 먼저 ioperm을 사용해야합니다. 또한 커널은 이미 inb and outb functions을 제공합니다.

사용의 ioperm (2) 또는 대안 IOPL (2) 사용자 공간 응용 프로그램이 문제의 I/O 포트에 액세스 할 수 있도록 커널을 알 수 있습니다. 을 실행하면 응용 프로그램이 세그먼트 오류를 ​​수신하게됩니다.

+0

고마워요. – mike

+1

@mike [답변을 수락하십시오] (http://meta.stackexchange.com/questions/5234/how -does-accepting-an-answer-work)이 도움이된다면. – philipvr

0

구문은 틀린 내용입니다. 시스템에서 유효하거나 사용되지 않는 포트를 찾아 사용하십시오.

관련 문제