Привет!
Голову ты бы себе не морочил с такими изысканиями... такие вещи надо изучить, а потом ваять, а не тыкать пальцем в небо. ТОлько в MeOS несколько кусков исходника посвящены PCI..., я уже как то говорил про кусок отвечающий за Ethernet как пример...
Ладно, держи готовую прогу COM вида под ДОС, которая выуживает PCI устройства. Все проверено, выверено и сравнено с... массой других.... по ReadPCI. Тебе осталось только проглотить
org 0x100
call cls
xor bx, bx ; BH = bus, BL = device
xor cx, cx ; CH = function, CL = register
@nextReadPCI:
call ReadPCI
cmp eax, 0xFFFFFFFF
je @nextElementPCI
call device_found
@nextElementPCI:
inc ch ; б«Ґ¤гой п дгЄжЁп нв®Ј® гбва®©бвў PCI
cmp ch, 8
jne @nextReadPCI
xor ch, ch
inc bl ; б«Ґ¤го饥 гбва®©бвў® PCI н⮬ б®ЄҐвҐ
cmp bl, 32
jne @nextReadPCI
xor bl, bl
inc bh ; б«Ґ¤гойЁ© б®ЄҐв PCI
cmp bh, 255 ;
jne @nextReadPCI
call @cls
int 0x20
device_found:
pusha
mov si, PCIbusTxt
call prtString
popa
pusha
mov al, bh
call ShowHexByte ; ЇаҐ®Ўа §гҐ¬ ў бва®Єг Ё ўлўҐ¤Ґ¬ ¤ЁбЇ«Ґ©
mov si, PCIdevTxt
call prtString
popa
pusha
mov al, bl
call ShowHexByte ; ЇаҐ®Ўа §гҐ¬ ў бва®Єг Ё ўлўҐ¤Ґ¬ ¤ЁбЇ«Ґ©
mov si, PCIfunTxt
call prtString
popa
pusha
mov al, ch
call ShowHexByte ; ЇаҐ®Ўа §гҐ¬ ў бва®Єг Ё ўлўҐ¤Ґ¬ ¤ЁбЇ«Ґ©
mov si, PCIregTxt
call prtString
popa
pusha
mov al, cl
call ShowHexByte ; ЇаҐ®Ўа §гҐ¬ ў бва®Єг Ё ўлўҐ¤Ґ¬ ¤ЁбЇ«Ґ©
inc [ScreenString]
mov [ScreenColumn], 0
mov si, PCIvendorTxt
call prtString
popa
pusha
call ShowHexWord ; ЇаҐ®Ўа §гҐ¬ ў бва®Єг Ё ўлўҐ¤Ґ¬ ¤ЁбЇ«Ґ©
inc [ScreenString]
mov [ScreenColumn], 0
mov si, PCIdeviceTxt
call prtString
popa
pusha
shr eax, 16
call ShowHexWord ; ЇаҐ®Ўа §гҐ¬ ў бва®Єг Ё ўлўҐ¤Ґ¬ ¤ЁбЇ«Ґ©
mov [ScreenColumn], 0
add [ScreenString], 2
cmp [ScreenString], 24
jc @nnn
call @cls
@nnn: popa
RET
ReadPCI:
; BH - bus, BL - device, CH - function, CL - register
xor eax, eax
mov al, bh
or ah, 0x80
shl eax, 16
mov ah, bl
shl ah, 3
or ah, ch
mov al, cl
and al, 0xFC
mov dx, 0x0CF8
out dx, eax
mov dl, 0xFC
in eax, dx
RET
PCIbusTxt DB "PCI bus: ", 0
PCIdevTxt DB " device: ", 0
PCIfunTxt DB " function: ", 0
PCIregTxt DB " register: ", 0
PCIvendorTxt DB "Vendor code: ", 0
PCIdeviceTxt DB "Device code: ", 0
INCLUDE 'CVSTRING.INC'