Низкоуровневое програмирование Главная - Реальный режим - Прерывания DOS - INT 23h: Адрес Control-Break.

INT 23h: Адрес Control-Break.

Адрес в этом векторе (0000:008c) - это адрес, по которому передается управление, когда DOS распознает, что пользователь нажал Ctrl-Break. Адрес по вектору INT 23H копируется в поле PSP Ctrl-Break Address функциями DOS 26H (создать PSP) и 4cH (EXEC). Исходное значение адреса обработчика Ctrl-Break восстанавливается из PSP при завершении программы. таким образом, по завершении порожденного процесса будет восстановлен адрес обработчика Ctrl-Break из родительского процесса.

Распознавание
DOS вызывает INT 23h, когда распознает, что нажата комбинация Ctrl-Break. Уровень чувствительности DOS к Ctrl-Break может быть проверен или установлен посредством функции 33h:
Если Break=ON, DOS распознает Ctrl-Break в течение всех функций, за исключением 06h и 07h.
Если Break=OFF, DOS распознает Ctrl-Break лишь во время операций ввода-вывода с консолью, принтером и последовательными портами.

Обработка
Обычная системная обработка Ctrl-Break вызывает немедленное снятие программы. чтобы перехватить обработку Ctrl-Break и передать ее вашей программе, воспользуйтесь следующими советами:
Вызовите функцию 25h , чтобы установить вектор INT 23H на ваш программный код.
При входе в ваш обработчик Ctrl-Break все регистры сохраняют те значения, которые они имели при входе в функцию DOS, распознавшую Ctrl-Break.
Если вы хотите игнорировать Ctrl-Break, просто выдайте IRET.
Если вы хотите что-нибудь сделать (скажем, прекратить повторение цикла), сохраните все регистры перед вашим действием и восстановите после действия. Выходите через IRET. Не существует ограничений для вашего обработчика - можно использовать все функции DOS. Однако, если обработчик Ctrl-Break сам выполняет символьный в/в, а пользователь вновь нажмет Ctrl-Break в это время, то DOS катастрофически сбивается.
Если вы хотите снять процесс (выйти в родительский процесс), установите флаг CF и выдайте FAR RET. это заставляет DOS выполнить обычную процедуру выхода в порождающий процесс.
Самый легкий способ убедиться, что процесс распознает нажатие Ctrl-Break - это время от времени вызывать функцию DOS 0Bh.