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

Аппаратные прерывания мы уже рассмотрели - они вырабатываются
устройствами, требующими внимания процессора. В IBM/PC таких прерываний на
удивление мало. Во-первых, имеется так называемое немаскируемое
прерывание, используемое для сообщения об отказе питания, оно имеет номер
2. Далее, прерывание 8 используется таймером, номер 9 - клавиатурой и 14 -
контролером гибких дисков, всего четыре аппаратных прерывания. Имеется
также семь зарезервированных номеров прерываний, 6, 7, с 10 по 13 и 15,
которые могут быть использованы в дальнейшем, если возникнет необходимость
в дополнительных аппаратных прерываниях. Два из этих семи прерываний уже
нашли свое назначение, прерывание 12 зарезервировано для адаптера связи, а
прерывание 15 - для интерфейса устройства печати.
Логические прерывания формируются самим процессором 8088, когда он
встречает какое-либо необычное условие. Таких прерываний предусмотрено
четыре. Прерывание 0 возникает при попытке деления на ноль. Прерывание 1
используется для управления пошаговым режимом работы микропроцессора, при
котором команды выполняются по одной. Это прерывание выставляется
отладчиками для пошагового выполнения программ. Прерывание 3
вырабатывается командой установки "контрольных точек", которая также
используется при отладке. Прерывание 4 формируется при возникновении
условия переполнения, например, если результат арифметической операции не
помещается в регистр. Таким образом, четыре логических прерывания
распадаются на две пары: одна для арифметических операций (деление на ноль
и переполнение) и вторая для отладки программ (шаговый режим и контрольные
точки).
Наиболее интересны программные прерывания. Если программа должна
воспользоваться услугами другой программы, она должна передать управление
этой процедуре. Обычно это делается с помощью команды CALL. Для вызова
процедуры программа должна знать ее адрес, а вызываемая процедура может не
знать адреса вызывающей программы, поскольку механизм вызова автоматически
генерирует адрес возврата, который будет использован вызываемой программой
после завершения ее выполнения. Образно говоря, для перехода к
подпрограмме и возврата из нее достаточно купить билет в один конец -
обратный билет предоставляется бесплатно. Идея организации программных
прерываний должна позволять свободный переход и в прямом и в обратном
направлении, то есть иметь возможность вызвать подпрограмму и получить
управление обратно после ее завершения, так чтобы ни одна из сторон не
могла не знать о местонахождении (адресе) другой.
Программные прерывания обеспечивают такую возможность путем выработки
прерывания самой программой. Например, если программе необходимо вычислить
время дня, ей совершенно не требуется знать адрес программы подсчета
времени - достаточно знать только, что программа подсчета времени дня
запускается программным прерыванием 26.
Программные прерывания используются для вызова всех служебных
функций, представляемых обычным пользователям. Эти функции включают все
процедуры системы BIOS и ПЗУ и служебные процедуры ДОС. Программные
прерывания используются вместо непосредственных адресов по двум причинам.
Наиболее важная причина состоит в обеспечении возможности изменения
служебных процедур, вызываемых с помощью прерываний. Изменение процедуры
обычно приводит к изменению ее размера и размещения в памяти. Если
процедура вызывается с помощью прерывания, то использующие ее программы не