ФЭНДОМ


PCI-устройство всегда имеет номер шины и номер слота, может иметь одну или несколько функций. У функции есть отдельное конфигурационное пространство состоящее из регистров (см. Конфигурирование устройств PCI). Следующий код есть метод считывания одного регистра конфигурационного пространства.

;---------------------------------------------------------
; Метод: ushort(AX) Config.ReadWord(byte Bus(BL), byte Slot(BH), byte Func(CL), byte Register(CH));
; Описание: Прочитать содержимое конфигурационного регистра (16 бит) функции PCI-устройства.
;	Bus – номер шины PCI [0..255].
;	Slot – номер слота (устройства) [0…31].
;	Func – номер функции [0..7].
;	Register – номер конфигурационного регистра.
;---------------------------------------------------------
BeginMethod: ;EAX = bus << 16 movzx eax,bl shl eax,16
;EAX |= slot << 11 movzx esi,bh shl esi,11 or eax,esi
;EAX |= func << 8 movzx esi,cl shl esi,8 or eax,esi
;EAX |= Register << 0 movzx esi,ch or eax,esi
;EAX |= 0x80000000 or eax,0x80000000
;записываем EAX в CONFIG_ADDRESS mov dx,0xCF8 out dx,eax
;читаем из CONFIG_DATA в AX mov dx,0xCFC in ax,dx  ;in eax,dx ret
Материалы сообщества доступны в соответствии с условиями лицензии CC-BY-SA , если не указано иное.