![]() |
|
![]() ![]() ![]() |
|
xach |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
всем превед!
я написал резидентную программу, которая выводит на экран список номеров аппаратных прерываний у которых есть обработчики. Делал я это следующим образом: 1 - считывал по номеру вектора прерывания 4-х байтный адрес обработчика в формате сегмент-смещение 2 - считывал первый байт обработчика и сравнивал его с опкодом iret. Если первый оператор обработчика - iret, значит это заглушка и обработчика не существует, в противном случае существует а теперь вопрос: как узнать какие обработчики аппаратных прерываний есть в системе средствами dos, bios или иными (может просто где-то в памяти лежит)? В общем проверить работоспособность программы мерси за внимание! |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Этот алгоритм неправильный. Заглушка АППАРАТНОГО прерывания в принципе не может быть голым IRET. а зачем - резидентную? Вручную. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
xach |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
нужно ещё сбрасывать заявку?
такое задание дали в универе =)
я понимаю, что не само всё получится. хотелось бы поконкретнее... |
||||||
|
|||||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Может быть я путаю, попробуй функцию 35h (ah=35h, al=номер прерывания, 0-ffh). Результатом в bx будем вектор прерывания.
На всякий случай вот тебе TechHelp - http://alexfru.narod.ru/miscdocs/techhelp/techhelp.zip |
|||
|
||||
xach |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
SABROG, не...мне не нужно получать сам вектор...с этим проблем нет...про эту функцию я знаю. проблема в методе определения того, что в системе присутствует обработчик аппаратного прерывания (08-0fh and 70-77h) ...вотъ...я думал, что с iret - правильный подход...похоже - нет =(
|
|||
|
||||
xach |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
вотъ...откопал в талмуде о прерываниях
INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION AX = 4400h BX = handle Return: CF clear if successful DX = device information word (see #01423) AX destroyed CF set on error AX = error code (01h,05h,06h) (see #01680 at AH=59h/BX=0000h) с помощью этой функции (судя по названию =) ) можно получить инфу об устройствах. но что вписывать в поле handle (bx)?..а так можно было бы по ошибке (CF=1) определить отсутствие в системе устройства |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Сомневаюсь что это для любых устройств.
А можно почитать задачу слово в слово ? Просто все прерывания так или иначе имеют заглушки. Причем они скорее всего разные для ДОСа и Windows. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
SABROG дал правильный путь.
Во-первых, ты можешь определить сам факт наличия или отсутствия обработчика. При отсутствии вектор будет (во всяком случае должен быть) нулевой. Во-вторых, если обработчик есть, ты можешь определить, находится обработчик в ROM компьютера, ROM расширения или в RAM. По адресу точки входа. В третьих, если обработчик в RAM, ты можешь определить, установлен он как драйвер устройства или как резидентный обработчик. И даже, возможно, определить имя модуля, из которого он установлен. По принадлежности MCB. Вот, пожалуй, и все... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
xach |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
вы в этом уверены?..ведь процессор делает переход по факту аппаратного прерывания...представляю что получится если он перейдёт на адрес 0000h...
а какой диапазон адресов ROM? это лишнее (с учётом задачи) SABROG, как таковой задачи нет, она была озвучена мне устно: определить у каких аппаратных прерываний есть обработчик. Очень не корректно поставленная задача...скорее всего имелось ввиду отличить неиспользуемые устройства, от используемых. Всё для чистого dos. |
||||
|
|||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Запусти ДОС и посмотри, ты же вроде написал вывод обработчиков ? Под виндой то там все перехватывается. Если действительно будут нули, то твоя задача решена. Вот распределение памяти, пните меня, если я ложанулся ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Нет, не лажанулся, все верно. Но тут все крупными мазками, ему надо (?) более детально. С учетом массы спецификаций (см. напр. описание технологий QEMM), позволяющих переадресовывать блоки оперативной памяти в незанятую область верхней памяти и в видеопамять граф. режима (А000-В7FF). Например, обработчик прерывания с адресом C200:0005 может быть как в ROM, так и в RAM. И в любом из этих случаев он может быть заглушкой. Добавлено через 4 минуты и 10 секунд Для CPU - да. А для FPU - само собой нет. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
xach |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
1 - я переправил прогу. теперь она выводит номера тех прерываний, у который пара сегмент:смещение (считанные по вектору) равны нулю
2 - загрузился с дискеты под дос ни одного прерывания с парой 0000h:0000h нету...хотя устройства у меня не все (взять хотя бы стриммер) |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
xach напишите простейший код, который можно подсунуть вместо бут-сектора дискеты и выводящий текущее состояние векторов, что-то типа:
закатайте его в бут-сектор, загрузитесь и посмотрите состояние векторов. На момент старта ОС... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Я тоже об этом думал, но все-таки таким образом не узнать какие вектора не будут никогда вызываться, потому что нет устройств которые генерировали бы IRQ. И потом я думаю никакой преподаватель не станет подобное задавать. Скорее всего где-то недопонимание.
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
что-о-о??? таймер-клавиатура-сопроцессор-прочая дрянь... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm для Windows/DOS" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для Windows/Dos | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |