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

Когда микропроцессор 8088 получает сигнал о необходимости прерывания, он определяет, какое из устройств требует обслуживания посредством аппаратной процедуры, известной как цикл подтверждения прерывания. В IBM PC для обслуживания внешних прерываний используется контроллер прерываний 8259 фирмы Intel. Контроллер прерываний программируется так, чтобы выдавать однобайтовое число в ответ на цикл подтверждения прерывания микропроцессора 8088. Это число, находящееся в диапазоне 0...255, - номер прерывания внешнего прерывающего устройства. В персональной ЭВМ контроллер прерываний обслуживает восемь внешних прерываний, которым соответствуют номера от 8 до 15.

Как только микропроцессор 8088 получает номер прерывания, он должен передать управление соответствующему обработчику прерывания. Первые 1024 байт памяти микропроцессора 8088 зарезервированы для векторов прерываний. Каждому из 256 возможных прерываний отводится четырехбайтовая область. Прерывание 0 имеет четыре байта по адресам от 0 до 3, прерывание 1 - от адреса 4 до адреса 7, и т.д. Каждая четырехбайтовая ячейка содержит указатель на соответствующий обработчик конкретного прерывания. Первые два байта содержат смещение адреса обработчика прерываний, а последние два байта - сегмент. Для задания значения этого поля может использоваться оператор определения двойного слова DD.

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

Когда возникает прерывание, микропроцессор помещает в стек регистр флагов, за которым следуют регистры CS и IP. Микропроцессор 8088 использует номер прерывания, чтобы определить указатель на программу обработки прерывания, и передать ей управление. Далее заботой этой программы является сохранение регистров, которые она использует, и восстановление их перед возвратом управления в прерванную программу. Команда IRET - это специальный вид возврата из подпрограммы, которая извлекает верхние три слова из стека и помещает их в регистр IP, регистр CS и регистр флагов. В следующих главах мы приведем несколько примеров, использующих механизм прерываний.

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

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