На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 2 / Отчеты об исключительных ситуациях Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Отчеты об исключительных ситуациях

Здесь рассматривается индикация о состоянии возврата или об обнаруженных и выдаваемых ошибках. Во многих прикладных программах одной из требуемых опций является необходимость иметь вызываемые процедуры, функции и подпрограммы, обеспечивающие некоторые типы индикации об ошибках или кодах состояния. Вероятно, читатель уже заметил, что большинство функций MS-DOS вызывает возврат кодов состояния о завершении. Часто для индикации наличия ошибки используется бит переноса в одном или более регистрах, обычно в регистре AX, содержащем подробную информацию о типе ошибки.


Бит переноса используется для номера причины. Его легко проверить (с помощью инструкций JC - переход, если был перенос, или с помощью инструкции JNC - переход, если не было переноса); легко установить, дополнить или очистить (с помощью инструкций STC - установка флажка переноса, CMC - дополнение флажка переноса и CLC - сброс флажка переноса); а также можно сохранить и восстановить (с помощью инструкций PUSHF - запоминание флажков в стеке и POPF - извлечение флажков из стека). Доступ к флажку переноса более совершенен чем доступ к любому другому биту состояния в архитектуре микропроцессоров 8086/8088. Это сочетание обеспечивает идеальный механизм для индикации наличия исключительной ситуации. Конечно, программист должен помнить об очистке бита переноса для индикации нормального завершения в случае, если ошибка не произошла, потому что бит переноса может быть уже установлен при выполнении обычной операции.


После того, как вызывающая программа обнаружит, что возникла ошибка, программа должна установить природу ошибки. Иногда последующая информация не требуется. Если требуется дополнительная информация, то для полного кода полезен выделенный регистр. Логично выбрать регистр AX, но в связи с тем, что от этого регистра зависит так много других операций (например, MUL - умножение аккумулятора на операнд и DIV - деление аккумулятора на операнд), он может оказаться недоступным. Какой бы регистр не выбирался, он должен содержать не только код ошибки, но также и код нормального завершения. В случае, если первичная информация об ошибке потеряна, программа может повторно проверить регистр для получения состояния завершения. Если информация критическая, выберите значение для нормального завершения, которое является ненормальным результатом. Это означает, нельзя использовать значение нуля для нормального завершения, потому что другая ошибка может легко почистить код состояния. MS-DOS обеспечивает обслуживание отчетов об ошибках для использования с программами, выполняющими другие программы. Если подпроцесс хочет вернуть код ошибки в процесс, который вызывал этот подпроцесс, он может поступить так, как часть функционального вызова процесса завершения - функция 4Сh. Затем порождающий процесс может получить этот код возврата через функцию MS-DOS 4Dh. Затем можно получить код возврата порожденного процесса. Этот механизм используется только с программами, выполняемыми под управлением функции 4Bh - функции загрузки и выполнения программы.


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz