5.8. Перехват прерываний

В архитектуре процессоров 80x86 предусмотрены особые случаи, когда про­цессор прекращает (прерывает) выполнение текущей программы и немедленно передает управление программе-обработчику, специально написанной для обра­ботки подобной ситуации. Такие особые ситуации делятся на два типа: прерыва­ния и исключения, в зависимости от того, вызвало ли эту ситуацию какое-нибудь внешнее устройство или выполняемая процессором команда. Исключения делят­ся далее на три типа: ошибки, ловушки и остановы, в зависимости от того, когда по отношению к вызвавшей их команде они происходят. Ошибки появляются пе­ред выполнением команды, поэтому обработчик такого исключения получит в ка­честве адреса возврата адрес ошибочной команды (начиная с процессоров 80286). Ловушки происходят сразу после выполнения команды, так что обработчик по­лучает в качестве адреса возврата адрес следующей команды. И наконец, остано­вы могут возникать в любой момент и вообще не предусматривать средств воз­врата управления в программу.

Команда TNT (а также INTO и INT3) используется в программах как раз для того, чтобы вызывать обработчики прерываний (или исключений). Фактически они являются исключениями ловушки, поскольку адрес который пере-

дается обработчику, указывает на следующую команду, но так как эти команды были введены до разделения особых ситуаций на прерывания и исключения, их практически всегда называют командами вызова прерываний. Ввиду того, что обработчики прерываний и исключений в DOS обычно не различают механизм вызова, с помощью команды INT можно передавать управление как на обработ­чики прерываний, так и исключений.

Как показано в главе 4, программные прерывания, то есть передача управле­ния при помощи команды INT, являются основным средством вызова процедур DOS и BIOS, потому что в отличие от вызова через команду CALL здесь не нужно знать адреса вызываемой процедуры - достаточно только номера. С другой сторо­ны интерфейса рассмотрим, как строится обработчик программного прерывания.