CodeNet / Платформы / Другие платформы / DOS / Прерывания DOS и BIOS
Функции DOS - INT 23H: адрес выхода по Ctrl-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.