|
Когда идут
операции в/в символов, DOS обнаруживает break либо от устройства
консоли, либо от стандартного ввода; но когда DOS работает со
стеком дискового в/в, то проверяется только устройство консоли.
Подпрограмма DOS, обрабатывающая break, устанавливает SS:SP в
значение, записываемое с помощью диспетчера int 21h, восстанавли-
вает все регистры в состояние, предшествующее прерыванию int 21h,
сбрасывает флажки критической секции и критической ошибки, и вы-
полняет инструкцию int 23h. ISR int 23h может возвратить управле-
ние в подпрограмму обработки break DOS либо по инструкции IRET,
либо по инструкции RET. Выполнение инструкции IRET удаляет 6 бай-
тов из стека, в то время как выполнение возврата far (далекий)
удаляет только 4 байта. Путем выполнения сравнения значений в SP
до и после выполнения инструкции int 23h, подпрограмма break мо-
жет сообщить, какая инструкция (RET или IRET) возвратила управле-
ние.
Если ISR int 23h сохраняет используемые ею регистры, то она
может продолжать выполнение с помощью инструкции IRET. Если ISR
возвращает управление с помощью возврата far (далекий), то, будет
или нет продолжено выполнение, определяется состоянием флага пе-
реноса. Если флаг переноса очищен, то выполнение будет продолже-
но, иначе - программа будет аварийно завершена. Подпрограмма
break DOS вынуждает выполнить аварийное завершение путем загрузки
в регистр AX значения 4C00h. Во всех случаях управление возвраща-
ется в начало диспетчера int 21h. Затем диспетчер повторно выпол-
няет запрос int 21h, или выполняет запрос завершения в случае
аварийного завершения.
По умолчанию ISR int 23h содержит инструкцию IRET. Файл
COMMAND.COM устанавливает свою собственную ISR int 23h, которая
аварийно завершает текущую программу.
|