Добавил:
@wequalwo Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АбрамоваИванов0392_Пр5.pdf
Скачиваний:
2
Добавлен:
08.09.2024
Размер:
504.79 Кб
Скачать

2.2. Установка драйвера

2.2.1.

Добавим в файл CONFIG.SYS строку "DEVICE= C:\DRIVER \DRIVER.SYS" (Рис. 2.6)

Рис. 2.6. Редактирование CONFIG.sys.

2.2.2.

Перезапуская систему видим сообщение драйвера "THIS IS DOS-DRIVER" (Рис. 2.7).

Рис. 2.7. Перезапуск системы.

14

2.2.3.

Запустим диагностическую программу CHECKIT, чтобы определить логический ад-

рес драйвера по его имени (Рис. 2.8), выбрав SysInfo > Device Drivers.

Рис. 2.8. Запуск CHECKIT.

Логический адрес: 0E11:0000.

2.2.4.

Запустим отладчик AFDRUS, определим исполнительные адреса процедур СТРА-

ТЕГИЯ и ПРЕРЫВАНИЕ. Сравним их с адресами в файле карты памяти драйвера

DRIVER.MAP.

Вфайле DRIVER.MAP (Рис. 2.9) имеем Стратегия 0000:0063, Прерывание 0000:06E.

Вafdrus, в свою очередь (адреса процедур определены по Рис. 2.10, 2.11),

Стратегия 0E11:0063, Прерывание 0E11:06E.

Адреса отличаются только сегментом. Это объясняется тем, что в driver.map указы-

вается адрес относительно начала выделенного сегмента (0E11), а в afdrus - относительно начала памяти (0000).

15

Рис. 2.9. Содержимое driver.map

Рис. 2.10. Стратегия в afdrus

Рис. 2.11. Прерывание в afdrus

16

2.3. Отладка драйвера

2.3.1.

Загружаем в отладчик afdrus тестовую программу TEST.EXE (предварительно ско-

пировав afdrus в папку DRIVER). Получаем адрес сегмента 31F5.

>> L test.exe

Рис. 2.12. Загрузка test.exe в afdrus

Определяем точки останова:

Для B1 - 0E

Для B2 - 1F

Устанавливаем соответствующие точки останова (Рис. 2.13)

Рис. 2.13. Установка точек останова

2.3.2.

Запускаем программу с помощью G. При остановке на точке стратегии (BR3, Рис. 2.14). Установив окно M2 на ES, расшифруем заголовок запроса:

17

0D длина заголовка (13 байт);

00 код устройства;

0D код команды, которую надо выполнить (13 - OPEN);

Ошибок нет и команда не завершена.

Рис. 2.14. Остановка на стратегии

Далее выполняем пошагово программу (F2) до возврата (команда RET, Рис. 2.15)

Рис. 2.15. Остановка на стратегии

18

И теперь перейдем командой G до останова на прерывании (Рис. 2.16).

Рис. 2.16. Остановка на прерывании

Продолжим исполнение (G).

2.3.3.

На останове в B1 (Рис. 2.17) определяем номер устройства: номер устройства нахо-

дится в регистре AX и равен 5.

Рис. 2.17. Остановка на прерывании

19

2.3.4.

Выполним до останова на B2 (стратегия) (Рис. 2.18). Исследуем функцию 40H.

Рис. 2.18. Остановка стратегии

Расшифруем запрос:

16 - длина заголовка (22 байта)

08 - команда для выполнения (8 - OUTPUT), статус 0 и команда не завершена

Продолжая выполнять программу командой G, поочередно останавливавшемся в процедуре стратегии и процедуре прерывания 5 раз (соответствует длине тестового бу-

фера). Значение в DI увеличивалось на 1 с 0B до 0F.

Наконец, попадаем в точку B2, соответсвующую закрытию устройства (Рис. 2.19).

Рис. 2.19. Закрытие устройства.

20