Системное программное обеспечение персональных ЭВМ


Пример 7 - часть 2


Обратите внимание на то, что операторам записи предшествует вызов функции Турбо-Си disable, а после записи вызывается функция enable. В программе на языке Ассемблера вместо этих вызовов должны стоять команды CLI и STI соответственно. На время записи в таблицу векторов прерывания должны быть запрещены - неизвестно что произойдет, если прерывание поступит в тот момент, когда мы уже изменили смещение, но еще не изменили сегмент. Аналогично происходит восстановление вектора - в таблицу записываются смещение и сегмент, считанные из нее в начале программы. Первый оператор обработчика new_handler - обращение по адресу, запомненному в old_ handler, второй - модификация счетчика.

(Обратите внимание на такую особенность этой программы. Если изготовить ее .EXE-файл и запустить на выполнение вне среды Турбо-Си, из командной строки DOS, то после ее завершения символы, соответствующие клавишам, нажатым при ее выполнении, появятся в командной строке. Это явится подтверждением того, что во время ее выполнения системный обработчик прерывания 9 функционировал нормально: он принял поступившие коды и занес их в буфер ввода, откуда они потом были извлечены командным процессором. При запуске из среды Турбо-Си такого эффекта мы не получим, так как Турбо-среда очищает буфер ввода при завершении программы.)

2). Функции DOS 0x35 и 0x25 обеспечивают чтение и запись вектора соответственно. Та же программа, использующая эти функции приведена ниже.




- Начало -  - Назад -  - Вперед -