Страница 9 из 20 Раздел 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. |