Справочник программиста на персональном компьютере фирмы IBM. Системные ресурсы
Страница 9. Управление прерываниями


 

Раздел 2. Управление прерываниями.

Прерывания это готовые процедуры, которые компьютер вызывает
для выполнения определенной задачи. Существуют аппаратные и прог-
раммные прерывания. Аппаратные прерывания инициируются аппарату-
рой, либо с системной платы, либо с карты расширения. Они могут
быть вызваны сигналом микросхемы таймера, сигналом от принтера,
нажатием клавиши на клавиатуре и множеством других причин. Аппа-
ратные прерывания не координируются с работой программного обес-
печения. Когда вызывается прерывание, то процессор оставляет свою
работу, выполняет прерывание, а затем возвращается на прежнее
место. Для того чтобы иметь возможность вернуться точно в нужное
место программы, адрес этого места (CS:IP) запоминается на стеке,
вместе с регистром флагов. Затем в CS:IP загружается адрес прог-
раммы обработки прерывания и ей передается управление. Программы
обработки прерываний иногда называют драйверами прерываний. Они
всегда завершаются инструкцией IRET (возврат из прерывания),
которая завершает процесс, начатый прерыванием, возвращая старые
значения CS:IP и регистра флагов, тем самым давая программе воз-
можность продолжить выполнение из того же состояния.
С другой стороны, программные прерывания на самом деле ничего
не прерывают. На самом деле это обычные процедуры, которые вызы-
ваются Вашими программами для выполнения рутинной работы, такой
как прием нажатия клавиши на клавиатуре или вывод на экран. Одна-
ко эти подпрограммы содержатся не внутри Вашей программы, а в
операционной системе и механизм прерываний дает Вам возможность
обратиться к ним. Программные прерывания могут вызываться друг из
друга. Например, все прерывания обработки ввода с клавиатуры DOS
используют прерывания обработки ввода с клавиатуры BIOS для полу-
чения символа из буфера клавиатуры. Отметим, что аппаратное пре-
рываение может получить управление при выполнении программного
прерывания. При этом не возникает конфликтов, так как каждая
подпрограмма обработки прерывания сохраняет значения всех исполь-
зуемых ею регистров и затем восстанавливает их при выходе, тем
самым не оставляя следов того, что она занимала процессор.
Адреса программ прерываний называют векторами. Каждый вектор
имеет длину четыре байта. В первом слове хранится значение IP, а
во втором - CS. Младшие 1024 байт памяти содержат вектора преры-
ваний, таким образом имеется место для 256 векторов. Вместе взя-
тые они называются таблицей векторов. Вектор для прерывания 0
начинается с ячейки 0000:0000, прерывания 1 - с 0000:0004, 2 - с
0000:0008 и т.д. Если посмотреть на четыре байта, начиная с адре-
са 0000:0020, в которых содержится вектор прерывания 8H (прерыва-
ние времени суток), то Вы обнаружите там A5FE00F0. Имея ввиду,
что младший байт слова расположен сначала и что порядок IP:CS,
это 4-байтное значение переводится в F000:FEA5. Это стартовый
адрес программы ПЗУ, выполняющей прерывание 8H. На рис. 1-2 пока-
зана схема выполнения программой прерывания 21H.

 
« Предыдущая статья   Следующая статья »