Подскажите, как можно получить Mac адресс сетевой карты используя только средства низкоуровневого программирования. Программа выполняется на контроллере GEFanuc (процессор Pentium III), поэтому использовать более высокий уровень нет возможности. Сетевая карта 82551IT Fast Ethernet PCI Controller (ее описание http://download.intel.com/design/network/datashts/82551it.pdf) Конфигурационное пространство сетевой карты прочитать получается Код (Text): movl BAR0, %eax movl (%eax), %edx movl %edx, retl1 но при обращении к BAR0 программа "вешается" Возможно, я не совсем правильно понимаю механизм обращения к PCI устройствам посредством базового адреса. Поскажите, как правильно использовать BAR Если возможно, приведите код получения MAC адреса из EEPROM Код (Text): unsigned long ret, BAR0, BAR1, BAR2; int bus, device, function; unsigned int VendorID, DeviceID; unsigned long retl1, retl2, retl3, retl4; int GefMain( ) { asm(" movl $0x0CF8, %edx xorl %eax, %eax mov $0, %bl mov $11, %bh mov $0, %cl mov $0, %ch find: mov $0x0CF8, %dx xorl %eax, %eax mov %bl, %al or $0x80, %ah shll $16, %eax mov %bh, %ah shl $3, %ah or %cl, %ah mov %ch, %al and $0x0FC, %al outl %eax, %dx mov $0x0CFC, %dx inl %dx, %eax cmpl $0x12098086, %eax jz found inc %cl cmp $8, %cl jnz find mov $0, %cl inc %bh cmp $32, %bh jnz find mov $0, %bh inc %bl cmp $255, %bl jz exit jmp find found: movl %eax, ret mov %bl, bus mov %bh, device mov %cl, function exit: mov bus, %bl mov device, %bh mov function, %cl mov $0x10, %ch mov $0x0CF8, %dx xorl %eax, %eax mov %bl, %al or $0x80, %ah shll $16, %eax mov %bh, %ah shl $3, %ah or %cl, %ah mov %ch, %al and $0x0FC, %al outl %eax, %dx mov $0x0CFC, %dx inl %dx, %eax movl %eax, BAR0 mov bus, %bl mov device, %bh mov function, %cl mov $0x14, %ch mov $0x0CF8, %dx xorl %eax, %eax mov %bl, %al or $0x80, %ah shll $16, %eax mov %bh, %ah shl $3, %ah or %cl, %ah mov %ch, %al and $0x0FC, %al outl %eax, %dx mov $0x0CFC, %dx inl %dx, %eax movl %eax, BAR1 decl BAR1 mov bus, %bl mov device, %bh mov function, %cl mov $0x18, %ch mov $0x0CF8, %dx xorl %eax, %eax mov %bl, %al or $0x80, %ah shll $16, %eax mov %bh, %ah shl $3, %ah or %cl, %ah mov %ch, %al and $0x0FC, %al outl %eax, %dx mov $0x0CFC, %dx inl %dx, %eax movl %eax, BAR2 movl BAR0, %eax movl (%eax), %edx movl %edx, retl1 ");