На этом шаге мы рассмотрим использование прерываний.
Прерывания останавливают выполнение программы, затем какое-то время выполняются некоторые действия, после чего вновь возобновляется выполнение программы с того же места, на котором она была прервана. Компьютерные устройства могут вырабатывать сигнал прерывания, чтобы уведомить компьютер о таких внешних событиях, как нажатие на клавишу или щелчок мыши. Процедура обработки прерывания реагирует на сигнал прерывания и возвращает управление прерванной программе, выполняя инструкцию iret (interrupt return - возврат из прерывания). Вы можете писать свои обработчики прерываний на C и C++, однако большинство программистов пользуются в таких случаях ассемблером для достижения наибольшей производительности.
Вы также можете вызывать обработчики прерываний с помощью инструкций ассемблера int. Например, для использования одной из функций DOS в программе вызывается диспетчер DOS:
asm int 0x21 //Вызвать диспетчер функций DOS
Для использования одной из функций BIOS в программе вызывается диспетчер BIOS:
asm int 0x10 //Вызвать диспетчер функций BIOS
В младших адресах памяти ПК находится таблица 32-битовых адресных значений, называемая таблицей векторов. В ходе выполнения инструкции программного прерывания процессор 80x86 запоминает флаги и регистры в стеке и передает управление по адресу, который хранится в соответствующей номеру прерывания ячейке этой таблицы. Векторы обработчиков прерываний в программе чем-то похожи на стоянку автомобилей на размеченной площадке.
На следующем шаге мы рассмотрим обращение к функциям DOS.