Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 168
Unknown Author
Другой случай, где полезно использование прерываний, особенно интересен для нас сейчас. Давно уже замечено, что в различных программах приходится выполнять одни и те же действия, например, выводить символы на экран или вводить их с клавиатуры, причем реализация этих действий требует детального знания тех или иных устройств ЭВМ. Так вот, чтобы избавить авторов программ от знания этих деталей, избавить их от необходимости выписывать эти действия в каждой программе заново, такие часто повторяющиеся действия описывают один раз в виде соответствующих процедур и включают их в состав ОС, и теперь все программы могут пользоваться ими.
Но как обращаться к этим процедурам? Конечно, можно использовать обычную команду вызова процедур (CALL), но для этого надо знать начальные адреса этих процедур. А эти адреса, к сожалению, меняются от одной версии ОС к другой, причем версии ОС меняются достаточно часто, поэтому сегодня эти адреса одни, а завтра - другие. Учитывая это, процедуры ОС принято вызывать несколько иначе - с помощью прерываний, исходя из следующего соображения: раз
ОС "вступает в игру" при любом прерывании, то почему бы не воспользоваться прерываниями и для вызова ее процедур.
Конкретно эта идея реализуется так. Определенные номера прерываний оставляют незанятыми для прерываний от устройств ЭВМ и предназначают для вызова процедур ОС, для чего в соответствующие элементы вектора прерываний записываются начальные адреса этих процедур. Поэтому, если выработать прерывание с одним из этих номеров, то будет вызвана соответствующая процедура. При этом не надо знать точный адрес этой процедуры, а достаточно знать только номер прерывания, по которой она вызывается. Номера же эти остаются одними и теми же во всех версиях ОС.
Но для вызова таким образом процедур ОС надо уметь генерировать прерывания из обычных программ. Для этого в систему команд ПК включена специальная команда - команда прерывания (interrupt):
INT ±8
Эта команда вызывает искусственное, насильственное прерывание с номером i8 (0<=i8<=255), а это значит,
Отметим, что по команде INT можно сгенерировать прерывание с любым номером, например, прерывание, соответствующее делению на 0 или нажатию клавиши на клавиатуре. Однако делать этого не следует, а надо использовать эту команду только для вызова процедур ОС.