2013-04-09 2 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

неподписанный символ __inbyte (неподписанный короткий порт);

Производит команду в инструкции, возвращая один байт, считанный из порта, указанного портом.

ответ

6

Инструкция IN пытается напрямую прочитать байт из порта ввода-вывода процессора. Это привилегированная операция и будет (почти) всегда терпеть неудачу, если вы не находитесь в режиме супервизора (например, в ядре).

Если вы планируете писать драйверы ядра, вы можете смело забыть, что вы когда-либо видели это внутреннее.

+0

И даже если вы пишете драйвер, обычно существуют подпрограммы ОС для выполнения такого рода операций независимо от архитектуры. –

+0

Справа - за пределами нескольких платформных устройств, у которых уже есть драйверы, большинство устройств, с которыми вы, вероятно, будете писать драйвер, получают доступ через PCI/PCIe/USB, а не прямые порты ввода-вывода. – duskwuff

Смежные вопросы