Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

                        check->fields.revision, check);

                 continue;

           }

Если вышли за пределы диапазона сканирования, то использовать BIOS32 мы не сможем:

           if (check->fields.entry >= 0x100000) {

                 printk("PCI: BIOS32 entry (0x%p) in high memory, cannot use. ", check);

                 return 0;

           } else {

Если всё в порядке – вычисляем адрес точки входа в BIOS32 и заполняем структуру bios32_indirect:

                 unsigned long bios32_entry = check->fields.entry;

                 bios32_indirect.address = bios32_entry + PAGE_OFFSET; // адрес точки входа в BIOS32

                 printk(KERN_INFO "PCI: BIOS32 entry point at 0x%08x ", bios32_indirect.address);

           }

           break; /* Hopefully more than one BIOS32 cannot happen... */

    }

    return 0;

}

Следующая функция, которую мы рассмотрим, определяет адрес точки входа в сервис BIOS32.

static u32 bios32_service(u32 service)

{

    u8 return_code;     /* %al, код возврата */

    u32 address; /* %ebx, адрес базы сервиса*/

    u32 length;         /* %ecx, размер сегмента сервиса  */

    u32 entry;          /* %edx, точка входа в сервис */

    u32 flags;

Идентификатор сервиса передается в параметрах функции.

Адрес точки входа в сервис BIOS32 определяется путем дальнего вызова через точку входа в BIOS32. Перед выполнением вызова в регистры процессора заносится следующая информация:

n  EAX – идентификатор сервиса (в нашем случае это $PCI);

n  EBX – селектор функции (должен быть равен 0);

n  EDI – адрес точки входа в BIOS32.

 

После вызова регистры процессора будут содержать следующую информацию:

n  AL – код возврата: 0 – запрашиваемый сервис найден, 0x80 – сервис отсутствует (не поддерживается);


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100