Открыл я /proc/ioports, и хотел прочитать содержимое 60 и 64 портов у клавиатуры.
На NASM написал так:
in al, 0x60
На что получил ошибку сегментирования.
После чего скачал учебник Д. Бовет, М. Чезати «Ядро Linux» и нашел там что надо пользоваться командами inb, inw, inl, outb, outw, outl.
Зашел я в asm/io.h и увидел:
static __inline unsigned char inb (unsigned short int __port)
{
unsigned char _v;
__asm__ __volatile__ («inb %w1,%0»:«=a» (_v):«Nd» (__port));
return _v;
}
На линуксе я недавно и с подобным синтаксисом не знаком.
Погулил, нашел, что асм строка передается gas в виде:
asm [volatile] («команды и директивы ассемблера» : выходные параметры : входные параметры : изменяемые параметры);
Отсюда возник вопрос: что такое «inb %w1,%0» ? Ведь нет такой команды в x86 как inb.
Если есть какая-нибудь книжка/статья, где можно об этом почитать, буду очень благодарен.
Спасибо.