Запись в порт 0cf8h завершается неудачно с segfault

У меня процессор AMD модели e2-2000. Это семья 0fh. Согласно семейству 0fh BKDG у меня есть этот код для чтения устройства и идентификатора поставщика:

ReadPCIConfiguration:
movq    $0x80000100, %rax
movq    $0x0cf8, %rdx
outl    %eax, %dx          # sigsegv caught here
movq    $0x0cfc, %rdx
inl     %dx, %eax
ret

Насколько я знаю, алгоритм чтения / записи конфигурации PCI выглядит следующим образом:

записать номер целевой шины, номер функции, номер функции и смещение или номер регистра в порт адреса конфигурациивыполнить 1-, 2- или 4-байтовую операцию чтения / записи из / в порт данных конфигурации

Порты 0xcf8..0xcfb - адрес конфигурации порта (двойное слово)

Биты, означающие:

31 - EnReg - включить транзакцию (R / W)24..31 - зарезервировано (R / O)16..23 - BusNum (R / W)11..15 - DevNum (R / W)8..10 - FuncNum (R / W)2..7 - RegNum (R / W)0..1 - Зарезервировано (R / O)

Итак, я пишу в шину - 0, dev - 0, func - 1, reg - 00

Я делаю что-то неправильно?

(Я запускаю скомпилированное и связанное приложение из пользовательского пространства, GNU / Debian "Wheezy" Linux 3.11.6)

Ответы на вопрос(1)

Ваш ответ на вопрос