"П.Нортон "Программно-аппаратная организация компьютера IBM PC"" - читать интересную книгу автора

будет обслуживаться, как только будут разрешены прерывания.
Обычно прерывания не запрещаются на сколько-нибуть продолжительное
время. Прерывания допустимо запрещать лишь на очень короткие промежутки
времени, необходимые для выполнения некоторых внутренних операций
процессора, состоящих из небольшого числа команд. Типичным примером таких
операций, которые не могут быть прерваны на полпути, может служить
загрузка нового набора значений в регистры сегментов. Поскольку эти
регистры необходимы для правильной работы любой программы, нарушение
согласованности загрузки в них значений может привести к полной
неразберихе, поэтому необходимо запретить прерывания на время загрузки в
них новых адресов.
Чтобы привести небольшой пример того, к чему может привести запрет
прерываний, рассмотрим две программы, названные BEEP и WARBLE. Если у Вас
есть пакет программ, прилагающийся к этой книге, Вы найдете в нем обе эти
программы, готовые к использованию. С помощью макроассемблера можно
получить эти программы из ассемблерного листинга 3.2, приведенного в конце
главы. Обе программы: BEEP и WARSLE, генерируют звуки с помощью динамика
IBM/PC. (О том как генерируются звуки будет рассказано в главе 11.) Каждая
из программ генерирует чистый непрерывный звук в одной тональности, но
программа WARBLE не запрещает прерывания. Поэтому она прерывается таймером
восемнадцать раз в секунду и хотя прерывания обслуживаются очень быстро,
звук получается вибрирующим. Программа BEEP запрещает прерывания и дает
непрерывный звук. Запустите обе программы и Вы почувствуете результат
запрета прерываний.
Механизм прерывания работает следующим образом: каждому из основных
типов прерываний присвоен свой номер. Например, прерывание таймера имеет
номер 8, гибкие диски, используют номер 14. В самом начале оперативной
памяти IBM/PC хранится таблица с адресами программ, которые должны
вызываться при возникновении различных прерываний. Эти адреса должны быть
полными сегментированными адресами, так что они занимают по два слова или
по четыре байта каждый. Эти адреса иногда называются векторами прерываний.
Прерывание с номером 0 имеет вектор, хранящийся в ячейке с нулевым
адресом, прерывание ! имеет свой вектор в ячейке 4 и так далее. Когда
происходит прерывание номер "X", вектор, хранящийся по адресу 4X,
загружается в регистры адреса программы, т.е., регистры CS и IP,и
компьютер начинает выполнять программу обслуживания прерывания, которая
размещается по этому адресу.
Когда обработка прерывания заканчивается, программа обработки
возвращает управление программе, которая выполнялась в момент
возникновения прерывания, с помощью специальной команды IRET или "возврат
из прерывания". Чтобы такой возврат мог быть выполнен, необходимо
сохранить в стеке текущие адреса программы до загрузки в регистры CS и IP
вектора прерывания.
Концепция прерывания была разработана для практического решения
проблемы взаимодействия компьютера с внешним миром. Однако, тем не менее
вскоре оказалось, что прерывания не менее полезны для организации
внутренней работы компьютера. Это привело к разработке трех типов
прерываний, которые получили названия аппаратных, логических и
программных. Между ними нет принципиальной разницы, однако их
использование разделит их на три отдельных категории.