2013-04-09 29 views
3

我遇到了這個函數,我想知道它做了什麼,所以我寫了下面的代碼,用mingw32編譯並在Wine和Windows下執行,在這兩個程序都崩潰了。爲什麼__inbyte會使我的軟件崩潰?

#include <stdio.h> 
#include <stdlib.h> 
#include <intrin.h> 
int main() 
{ 
unsigned char j = __inbyte(0xABC); // example value 
printf("%i\n", j); 
return 0; 
} 

我在MSDN上看過它,但我發現描述是模糊的。 http://msdn.microsoft.com/en-us/library/732t2y37%28v=vs.100%29.aspx

unsigned char __inbyte(unsigned short Port);

在指令中生成指令,返回從Port指定的端口讀取的一個字節。

回答

6

IN指令嘗試從CPU I/O端口直接讀取一個字節。這是一項特權操作,並且除非您處於超級用戶模式(例如,在內核中),否則(幾乎)將總是失敗。

除非你打算編寫內核驅動程序,否則你可以放心地忘記你曾經看到過這個內在的東西。

+0

即使你正在編寫驅動程序,通常還有一些OS例程以獨立於體系結構的方式執行這種操作。 – 2013-04-09 20:11:30

+0

正確 - 在已有驅動程序的少數平臺設備之外,大多數可能要寫驅動程序的設備都是通過PCI/PCIe/USB訪問的,而不是直接的I/O端口。 – duskwuff 2013-04-09 20:48:30