ции.
2. Функция 44h ("Управление устройством ввода-вывода
[IOCTL])
Эта функция имеет два новых дополнительных параметра в
операционной системе MS-DOS версии 3.00, предназначенных
для поддержания драйверов устройств (регистр AL = 08h для
проверки сменного носителя и регистра BL = 0Bh для измене-
ния счетчика количества попыток исправления сбоя в блочном
устройстве). В операционной системе MS-DOS версии 3.10 бы-
ли добавлены еще два параметра для проверки переадресации
в сети (при значении регистра AL = 09h происходит проверка
устройства, в то время, как при значении регистра AL = 0Ah
происходит проверка управления файлом или устройством).
3. Функции 5Eh и 5Fh
Эти функции поддерживаются только в версиях 3.1 и выше
операционной системы MS-DOS. Они используются только в се-
тевых средах. Каждая функция делится на несколько подфунк-
ций. Все они загружаются в регистр AХ в виде четырехзнач-
ных шестнадцатиричных (16-битовых) номеров функций, две
последние цифры которых указывают конкретную функцию (или
подфункцию). Функция 5E0h используется для поиска имени
вычислительной машины , подсоединенной к той же сети, что
и вычислительная машина, производящая обращение к функции.
Функция 5E0h используется для инициализации печатающего
устройства (принтера), подсоединенного к сети и совместно
используемого несколькими компьютерами. Функции 5F02h по
5F03h используются для управления переадресации данных
в сети: функция 5F03h меняет адрес устройства, функция
5F02h ведет поиск информации по переадресации, а функция
5F04h отменяет процедуру переадресации.
- 13-24 -
Группа функций работы с каталогом (39h - 3Bh, 47h)
Эта группа включает в себя функции, начиная с 39h по 3Bh и
функцию 47h. Эти функции существуют в версиях операционной систе-
мы MS-DOS, начиная с 2.00 и выше. Эти функции выполняют команды
работы с каталогом: функция 39h создает подкаталог (команда
MKDISK или команда MD), функция 3Al удаляет каталог (команда
RMDIR или команд RD) и функция 3Bh меняет текущий каталог на дру-
гой (команда CHDIR или команда CD). Функция 47h используется для
поиска информации в текущем каталоге (как если бы команда CD бы-
ла введена без параметров).
Группа управления памятью/процессом (48h - 4Bh)
Для управления происходящих в системе процессов и управле-
ния памятью могут быть использованы некоторые функции, добавлен-
ные в операционную систему MS-DOS версии 2.00. Большинство функ-
ций в этой группе имеют дело с управлением распределением памяти.
Последняя из указанных функций 4Bh используется программами, ко-
торые вызывают и загружают другие программы или оверлейные сег-
менты программ. Отметим, что функция 4Сh ("Завершение процесса" -
EXIT) должна всегда использоваться в программах, вызываемых и
загружаемых функцией 4Bh.
В настоящее время известно, что поддержание полной или ра-
зумной степени совместимости может быть сложной и довольно безна-
дежной задачей. Советуем вам на практике заранее определить нуж-
ный вам уровень совместимости, а затем выбрать функции
операционной системы MS-DOS, которые вы будете использовать.
Коды ошибок
Коды, генерируемые операционной системой MS-DOS, типы этих
кодов и способ работы с ними существенно изменились с момента по-
явления первых версий операционной системы MS-DOS. Изменения эти
связаны не только с появлением новых кодов ошибок в более позд-
них версиях, но также и с появлением новых механизмов сообщения о
них. Ниже описываются различия в управлении ошибками между разны-
ми версиями операционной системы MS-DOS.
Коды критических и тяжелых ошибок, полученных при прерывании
"Int 24h"
В операционной системе MS-DOS версии 1.0 процессом возврата
кода ошибок управляет исключительно вектор прерывания "int 24h".
Все эти коды ошибок представляют собой ошибки, связанные со сбоя-
ми аппаратных средств и считаются серьезными или критическими по
своей природе. Эти же самые коды и механизм выдачи отчетов о них
поддерживаются во всех более поздних версиях, несмотря на то, что
некоторые новые коды ошибок появлялись уже в версии 2.0 операци-
онной системы MS-DOS.
Для того, чтобы прикладная программа могла взаимодействовать
с механизмом выдачи отчетов об ошибках, исходный текст программы
должен сохранить вектор прерывания "int 24h" и заменить его одним
из векторов, указывающим на стандартную программу исправления
ошибок. Прежде, чем произойдет завершение работы программы, ис-
- 13-25 -
ходный вектор прерывания "int 24h" должен быть восстановлен в
свое исходное состояние. Указанный механизм при его работе под
управлением операционной системы MS-DOS версии 2.0 может возвра-
щать до семи кодов, а под управлением операционной системы MS-DOS
версии 3.0 и выше.
В таблице 13-3 перечисляются коды и указывается, которые из
них поддерживаются операционной системой MS-DOS только версий 2.0
и выше. Коды критических ошибок, представленные в таблице 13-3,
могут также быть найдены при помощи другого механизма выдачи от-
четов об ошибках, представленного в версии 2.0 операционной сис-
темы MS-DOS. При работе под управлением этой версии операционной
системы определенные обращения к функциям возвращают коды ошибок
при возникновении ошибочных ситуаций. Этот механизм описывается в
разделе, следующем за таблицей 13-3.
Коды возврата ошибок обращения к функциям (только версий
2.0 и выше операционной системы MS-DOS)
Начиная с версии 2.0 операционной системы MS-DOS некоторые
вызываемые функции возвращают коды ошибок в определенных регист-
рах, если ошибка возникла в результате выполнения функции. Если
ошибка произошла, признак переполнения устанавливается в значение
"1" и соответствующий регистр следует проверить (если поддержи-
вается этой функцией) на наличие в нем кода ошибки. Если признак
переполнения пуст, вы можете предполагать, что ошибок не возника-
ло. Критические или тяжелые ошибки, описанные выше (и определяе-
мые при помощи механизма прерывания "int 24h"), также выдаются
этим механизмом, несмотря на то, что при этом используются разные
значения кодов. При работе под управлением операционной системы
MS-DOS версий с 2.0 по 3.1 следующие функции возвращают коды оши-
бок в регистре Ax, если признак переполнения устанавливается пос-
ле их выполнения: с 38h по 4Bh, 4h, 4Fh, 56h, 57h с 5Ah по 5Ch и
с 5h по 5h. Al - половина регистра Ax всегда должна проверяться
на наличие в ней кода ошибок, потому что некоторые функции воз-
вращают в AH-половине другую информацию. Для всех этих функций
наличие нуля ("0") в регистре AL говорит об отсутствии ошибок.
В таблице 13-4 перечислены все коды ошибок, которые могут
быть возвращены после обращения к функции. Версия (версии) опера-
ционной системы MS-DOS, которая обеспечивает выдачу каждого кода,
также указывается в таблице. Отметим также, что коды ошибок с 19
по 31 соответствуют кодам ошибок прерывания "int 24h" с 0 по Ch,
а код ошибки 34 соответствует коду ошибки Fh прерыванию int 24h.
- 13-26 -
Таблица 13-3
Критические коды ошибок (по прерыванию "Int 24h")
ДДДДДДВДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
¦ ¦Версия операционной системы MS-DOS
Код ¦ Описание ГДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДД
ошибки¦ ¦ 1.XX ¦ 2.XX ¦ 3.XX ¦ 4.XX
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДД†ДДДДДДДДБДДДДДДДДБДДДДДДД
0 ¦Попытка записи на ¦ ¦
¦защищенный от записи ¦ Да ¦
¦диск ¦ ¦
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДґ
1 ¦Неизвестное ¦ Нет ¦
¦устройство ¦ ¦
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДґ
2 ¦Дисковод не готов ¦ Да ¦
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДґ
3 ¦Неизвестная команда ¦ Нет ¦ Да
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДґ
4 ¦Ошибка данных (CRC) ¦ Да ¦
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДґ
5 ¦Неправильная длина ¦ ¦
¦запроса ¦ Нет ¦
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДґ
6 ¦Ошибка поиска ¦ Да ¦
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДґ
7 ¦Неизвестный тип ¦ ¦
¦носителя ¦ Нет ¦
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДґ
8 ¦Сектор не найден ¦ Да ¦
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДґ
9 ¦Конец бумаги в ¦ ¦ Да
¦принтере ¦ Нет ¦
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДґ
A ¦Ошибка записи ¦ Да ¦
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДґ
B ¦Ошибка чтения ¦ Нет ¦
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДґ
C ¦Общий сбой ¦ Да ¦
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДД†ДДДДДДДДВДДДДДДДДВДДДДДД
D ¦Не определено ¦ ///// ¦ ///// ¦ ///// ¦ /////
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДД†ДДДДДДДД†ДДДДДДДД†ДДДДДД
E ¦Не определено ¦ ///// ¦ ///// ¦ ///// ¦ /////
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДБДДДДДДДД†ДДДДДДДДБДДДДДД
F ¦Неправильная смена ¦ Нет ¦ Да
¦диска ¦ ¦
ДДДДДДБДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДД
- 13-27 -
Таблица 13-4
Коды ошибок обращения к функциям (только для версий
2.0 и старше операционной системы MS-DOS)
ДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДД
Код ¦ ¦ Версия операционной
ошибки¦ ¦ системы MS-DOS
(шест-¦ Описание ГДДДВДДДВДДДВДДДВДДДВДДДВДДД
надц.)¦ ¦2.0¦2.1¦3.0¦3.1¦3.2¦3.3¦4.0
ДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДДДДДД†ДДДБДДДБДДДБДДДБДДДБДДДБДДД