рационной системы MS-DOS следует избегать использования любых
прерываний, не являющихся истинными прерываниями операционной
системы MS-DOS . Информация о недокументированных прерываниях при-
ведена в приложении Б.
Вызов функций
Использование вызовов функций, вероятно, является наиболее
важным фактором совместимости при программировании на языке Ас-
семблер. Поскольку почти все операции, обычно выполняемые опера-
ционной системой MS-DOS, могут инициироваться обращениями к функ-
циям, вы можете избежать использования прерываний в системе BIOS.
Используя вызов функций операционной системы MS-DOS, можно также
устранить необходимость включения в ваши программы определенных
типов стандартных программ, таких, как программ управления файла-
ми. Если сверхбыстрое выполнение Ваших программ не является реша-
ющим требованием, лучше позволить операционной системе MS-DOS вы-
полнять все стандартные операции путем обычного обращения к
- 13-9 -
функциям. Операционная система MS-DOS выполняет вызов функций
достаточно быстро для большинства возможных ситуаций.
Выполнение вызова функций стандартным образом
Когда на свете появилась первая версия операционной системы
MS-DOS, в ней существовало два способа выполнения обращений к
функциям. Первый рекомендованный для использования со всеми вер-
сиями операционной системы MS-DOS способ представлен ниже в виде
семи последовательных действий:
1. Сохранение содержимого регистров AX, BX, CX и DХ путем
выталкивания их значений в стек.
2. Помещение номера функции в регистр AH.
3. Помещение других данных в регистры, указанные для выпол-
нения заданной функции, если это нужно.
4. Выполнение команды прерывания "int 21h".
5. В зависимости от выполняемой функции, переменные данные
возвращаются в указанных регистрах для возможности их
дальнейшего считывания и использования в вашей программе.
Некоторые функции ничего не возвращают.
6. Выполнение требуемой операции с использованием возвращен-
ных данных от только что выполненной функции, если это
нужно.
7. Восстановление исходного содержания регистров.
Приведенная выше процедура рекомендуется для использования
во всех версиях операционной системы MS-DOS. Второй способ работы
с функциями описывается ниже.
Выполнение вызова функций в режиме совместимости
Второй способ выполнения обращения к функциям, предоставляе-
мый операционной системой MS-DOS для обеспечения совместимости с
другими операционными системами, конкретно предназначен для опе-
рационных систем CP/M-80 и CP/M-86. Этот способ в действительнос-
ти не обеспечивает возможность запуска программ операционной сис-
темы CP/M под управлением операционной системы MS-DOS. Он только
упрощает и облегчает преобразование программ операционной системы
CP/M в программы операционной системы MS-DOS тем, что при этом не
всегда требуется переопределение процедуры обращения к функциям.
Но, однако, Вам, вероятно, придется менять многие номера функций.
Данный способ пригоден только для функций с номерами от 0 до 24h
операционной системы MS-DOS. Возможно, Вы встретитесь с труднос-
тями при использовании регистров в некоторых обращениях к функци-
ям, поэтому следует избегать использования этого метода, если
только вы не собираетесь тестировать вашу программу до ее полного
преобразования. Операционная система MS-DOS требует, чтобы обра-
щение к функциям с использованием этого второго способа выполня-
лось следующим образом:
1. Сохранение содержимого регистров AX, BX, CX и DХ путем
выталкивания их значений в стек.
2. Помещение номера функции в регистр CL. (Могут использо-
ваться только номера функций, начиная с 0 и до 24h).
3. Помещение других данных в регистры, указанные для выпол-
нения заданной функции, если это нужно.
4. Произвести внутрисегментное обращение к адресу 5 внутри
текущего сегмента программы. Этот адрес содержит длинное
обращение к диспетчеру функций операционной системы
- 13-10 -
MS-DOS.
5. В зависимости от выполняемой функции, переменные данные
возвращаются в указанных регистрах для возможности их
дальнейшего считывания и использования в вашей программе.
Некоторые функции ничего не возвращают. Примечание: Эта
процедура всегда стирает содержимое регистра AX. Все ос-
тальные регистры ведут себя так же, как и при использова-
нии стандартной процедуры обращения к функциям.
6. Восстановление исходного содержания регистров.
Еще один способ (только для версий операционной системы
MS-DOS, начиная с 2.00 и выше)
В версии 2.00 операционной системы MS-DOS был представлен
третий способ обращения к функциям. Этот метод также может ис-
пользоваться с более старшими версиями, но он будет неправильно
работать со всеми более ранними версиями. Третий способ обращения
к функциям выполняется следующим образом:
1. Сохранение содержимого регистров AX, BX, CX и DХ путем
выталкивания их значений в стек.
2. Помещение номера функции в регистр AH.
3. Помещение других данных в регистры, указанные для выпол-
нения заданной функции.
4. Произвести длинное обращение к адресу со смещением
"шестнадцатиричное 50" в префиксе программного сегмента.
5. В зависимости от выполняемой функции, переменные данные
возвращаются в указанных регистрах для возможности их
дальнейшего считывания и использования в вашей программе.
Некоторые функции ничего не возвращают.
6. Восстановление исходного содержания регистров путем обра-
ботки выборки из стека.
С появлением операционной системы MS-DOS версии 3.10 обе
фирмы - и "Майкрософт" и "ИБМ" рекомендуют не пользоваться этим
способом. Зачем же он тогда был введен? Одно из возможных его
применений может объяснить это (по адресу шестнадцатиричное сме-
щение 50) в PSP (в префиксе программного сегмента) обычно содер-
жится команда прерывания "int 21h". Используя метод, описанный
выше, программист направлял все обращения к функциям операционной
системы MS-DOS (исключая другие прерывания) только через один ад-
рес. Изменив команду, находящуюся по адресу "шестнадцатиричное
смещение 50", вы можете перенаправить все обращения к функциям
операционной системы MS-DOS. Является ли в настоящее время этот
способ обращения к функциям уже оставленной попыткой фирмы "Майк-
рософт" реализовать мультизадачный режим? Точный ответ на этот
вопрос знает только сама фирма "Майкрософт".
Функции, выполняемые в разных версиях операционной
системы MS-DOS
В таблице 13-2 приведен полный список функций операционной
системы MS-DOS, поддерживаемый версиями с 1.0 до 3.1 . В таблице
также указаны функции, являющиеся новыми для некоторых версий.
- 13-11 -
Таблица 13-2
Функции операционной системы MS-DOS
ДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Прерывание ¦ Версия операционной системы MS-DOS
ДДДДДДВДДДДДДДДДДД†ДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДД
Номер ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
преры-¦ Описание ¦1.0¦ 1.1¦ 2.0¦ 2.1¦ 3.0¦ 3.1¦ 3.2¦ 3.3¦ 4.0
вания ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
ДДДДДД†ДДДДДДДДДДД†ДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДД
0 ¦Завершение ¦
¦программы ¦
ДДДДДД†ДДДДДДДДДДДґ
1 ¦Ввод с ¦
¦клавиатуры ¦
ДДДДДД†ДДДДДДДДДДДґ
2 ¦Вывод на эк¦
¦ран дисплея¦
ДДДДДД†ДДДДДДДДДДДґ
3 ¦AUX-ввод ¦ Да
ДДДДДД†ДДДДДДДДДДДґ
4 ¦AUX вывод ¦
ДДДДДД†ДДДДДДДДДДДґ
5 ¦Вывод на ¦
¦печатающее ¦
¦устройство ¦
¦(принтер) ¦
ДДДДДД†ДДДДДДДДДДДґ
6 ¦Непосред- ¦
¦ственный ¦
¦ввод-вывод ¦
¦на консоль ¦
ДДДДДД†ДДДДДДДДДДДґ
7 ¦Нефильтрую-¦
¦щий ввод с ¦
¦консоли без¦
¦эха ¦
ДДДДДД†ДДДДДДДДДДДґ
8 ¦ Ввод с ¦
¦ консоли ¦
¦ без эха ¦
ДДДДДД†ДДДДДДДДДДДґ
9 ¦ Печать ¦
¦ строки ¦ Да
ДДДДДД†ДДДДДДДДДДДґ
¦Буферизован¦
A ¦ный ввод с¦
¦клавиатур ¦
ДДДДДД†ДДДДДДДДДДДґ
¦Проверка ¦
B ¦стандартно-¦
¦го состоя- ¦
¦ния ввода ¦
ДДДДДД†ДДДДДДДДДДДґ
¦Очистить бу¦
C ¦фер клавиа-¦
¦туры и ¦
¦ждать ввода¦
¦с клавиа- ¦
¦туры ¦
- 13-12 -
ДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Прерывание ¦ Версия операционной системы MS-DOS
ДДДДДДВДДДДДДДДДДД†ДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДД
Номер ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
преры-¦ Описание ¦1.0¦ 1.1¦ 2.0¦ 2.1¦ 3.0¦ 3.1¦ 3.2¦ 3.3¦ 4.0
вания ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
ДДДДДД†ДДДДДДДДДДД†ДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДД
¦Сброс ¦
D ¦диска ¦
ДДДДДД†ДДДДДДДДДДДґ
¦Выбор ¦
E ¦диска ¦
ДДДДДД†ДДДДДДДДДДДґ
¦Открыть ¦
F ¦файл ¦
ДДДДДД†ДДДДДДДДДДДґ
10 ¦Закрыть ¦
¦файл ¦
ДДДДДД†ДДДДДДДДДДДґ
11 ¦Поиск ¦
¦первого ¦ Да
¦элемента ¦
¦каталога ¦
ДДДДДД†ДДДДДДДДДДДґ
12 ¦Поиск сле- ¦
¦дующего ¦
¦элемента ¦
¦каталога ¦
ДДДДДД†ДДДДДДДДДДДґ
13 ¦Удалить ¦
¦файл ¦
ДДДДДД†ДДДДДДДДДДДґ
14 ¦Последова- ¦
¦тельное ¦
¦считывание ¦
ДДДДДД†ДДДДДДДДДДДґ
15 ¦Последова- ¦