ВУЗ:
Составители:
Рубрика:
- 28 -
быстро переключаться между операциями ввода/вывода и другой обра-
боткой.
Наконец, можно захотеть написать прерывание, которое пол-
ностью заменит одну из процедур операционной системы.
Дополнение к существующему прерыванию
Иногда бывает полезно добавить код к существующему прерыва-
нию. В качестве примера рассмотрим программы, которые преобразуют
одно нажатие клавиши в длинные, определяемые пользователем, сим-
вольные строки (макроопределения клавиатуры).
Эти программы используют факт, что весь ввод с клавиатуры
поступает через функцию 0 прерывания 16H BIOS. Все прерывания
ввода с клавиатуры DOS вызывают прерывание BIOS для получения
символа из буфера клавиатуры. Поэтому необходимо модифицировать
лишь прерывание 16H, таким образом, чтобы оно служило шлагбаумом
для макроопределений, после чего любая программа будет получать
макроопределения, независимо от того, какое прерывание ввода с
клавиатуры она использует.
Конечно, модифицировать прерывания BIOS и DOS непросто, пос-
кольку BIOS расположена в ПЗУ, а DOS поступает без листинга и они
ограничены размерами отведенной для них памяти. Но можно написать
процедуру, которая предшествует и/или следует за соответствующим
прерыванием, и эта процедура может вызываться при вызове прерыва-
ния DOS или BIOS.
Например, в случае прерывания 16H, нужно написать процедуру
и указать на нее в векторе прерывания для 16H. Оригинальное зна-
чение вект ора 16H тем временем переносится в какой-либо использу-
емый вектор, скажем, 60H, новая процедура просто вызывает преры-
вание 60H, чтобы использовать оригинальное прерывание 16H,
управление передается процедуре, которая затем вызывает ориги-
нальное прерывание 16H, которая по завершении опять возвращает
управление процедуре, а из нее уже можно вернуться в то место
программы, из которого был вызов прерывания 16H.После того как
это сделано, в новой процедуре может содержаться любой код, как
до, так и после вызова прерывания 60H. Вот краткая сводка необхо-
димых действий:
1. Создать новую процедуру.
Страницы
- « первая
- ‹ предыдущая
- …
- 26
- 27
- 28
- 29
- 30
- …
- следующая ›
- последняя »