Механизм прерываний - существенная часть любой вычислительной системы. Как мы увидим, он важен и для IBM PC. Структура прерываний  предоставляет эффективное средство для связи устройств ввода-вывода с процессором.  Нам прерывания интересны потому, что управление  прерываниями - прерогатива программирования на языке ассемблера.  В  языках высокого уровня отсутствуют средства для работы с  прерываниями на машинном уровне.

Прерывания обычно вызываются внешними устройствами.  Прерывание  сигнализирует процессору о необходимости прервать текущие действия и  ответить внешнему устройству.  В IBM PC клавиатура посылает сигнал  прерывания всякий раз при нажатии любой клавиши.  Прерывание  клавиатуры заставляет процессор прекратить текущую деятельность и  считать набранный на клавиатуре символ.

Легко понять, за что прерывания получили свое название.  Прерывание сигнализирует о необходимости "прервать" текущее действие  процессора.  Прерывания хороши тем, что избавляют процессор  постоянного контроля за внешними устройствами.  Если бы, например,  клавиатура пользователя не вызывала прерываний, то процессор был бы  вынужден непрерывно проверять клавиатуру, чтобы обнаружить нажатие  клавиши. Каждая написанная для компьютера программа была бы  вынуждена делать одно и то же, и им пришлось бы очень часто  тестировать клавиатуру.  Но наличие прерываний снимают это  требование, и программа может выполняться без постоянного  тестирования клавиатуры.  Каждый раз, как клавиатура получает  какую-либо информацию, она сигнализирует об этом процессору.  После  того, как микропроцессор удовлетворит запрос клавиатуры, он может  возобновить нормальный ход выполнения программы.

Работа 8088 с прерываниями во многом напоминает его обращение с  процедурами.  Прерывание не может прекратить работу процессора во  время выполнения команды.  Сначала 8088 закончит выполнение текущей  команды, но следующую уже проигнорирует.  Вместо ее выполнения процессор действует так, как будто следующая команда была вызовом процедуры. Он сохраняет адрес очередной команды в стеке и переходит в  специальную процедуру, которую называют программой обработки  прерываний.  Эта процедура содержит команды для работы с вызвавшим  прерывание устройством.  В случае с клавиатурой программа обработки  прерывания считывает символ и сохраняет его для дальнейшего  использования.  После того как она закончит работу с устройством,  происходит возврат в точку прерывания.  Процессор извлекает из  стека адрес возврата и продолжает выполнение программы как будто  ничего не случилось.

Поскольку прерывание вызывается внешним устройством, оно может  произойти в любой момент выполнения программы.  Программа не может  предпринять каких-либо действий чтобы подготовиться к прерыванию,  так как не может предвидеть, когда пользователь нажмет на клавишу  клавиатуры.  Отсюда следует, что прерывание не должно изменять  данные в прерываемой программе.  Если прерывание изменит  какое-либо значение в программе, то она не сможет нормально  работать когда к ней вернется управление.

В ходе прерывания 8088 автоматически сохраняет некоторые установленные программой значения в стек.  В свою очередь, программа  обработки прерываний отвечает за сохранение любых других данных,  которые она может изменить во время своего выполнения.  Эти данные  обычно сохраняются в стеке.  Затем, перед возвращением управления в  прерванную программу, программа обработки прерывания должна вернуть  измененным данным те значения, которые они имели в момент  прерывания.  Факт возникновения прерывания должен остаться  "невидимым" для выполняемой программы.

Поскольку сигнал прерывания могут посылать процессору многие  устройства, 8088 имеет механизм ориентации прерываний.  Это означает, что 8088 определяет, какое устройство вызвало прерывание и передает управление программе обработки прерывания, соответствующей  этому устройству.  Процессор автоматически управляет веторизацией  запросов на прерывания.  Программе обработки прерывания не  требуется перед обработкой прерывания определять, какое устройство  его вызвало.  Это сокращает время реакции на прерывание и упрощает  программирование прерываний.

В программах встречаются такие участки, выполнение которых не  может быть прервано.  Например, это может быть кусок программы,  который должен выполняться очень быстро, чтобы закончить выполнение  специфической задачи, или момент работы с данными, которые могут  быть изменены программой обработки прерывания.  В обоих случаях  программа должна иметь возможность задержать или предотвратить  прерывания, т.е.  программа должна уметь не допускать возникновения  прерываний во время выполнения таких критических участков.  После  прохождения этих участков программа должна восстановить способность  системы прерываний вызывать прерывания.  Программа не может  отключать прерывания на слишком долгое время, иначе с устройством,  запросившим прерывание, может произойти какая-нибудь неприятность.  Если прерывание клавиатуры не считает символ до того как оператор  нажмет другую клавишу, второй симол может быть потерян.  В 8088  имеется возможность блокировать все внешние прерывания.  IBM PC  имеет более развитую возможность выбирать, каким из устройств можно  вызывать прерывание, а каким нет.  Программа может использовать эту  возможность для выбора наиболее важных устройств, которым можно  разрешить прерывания, а менее критическим запретить.  Способы  отключения прерываний мы обсудим в следующих главах.