что ограничения по совместимости (или отсутствие таких ограниче-
ний) явно указны как в программном пакете, так и в рекламных бро-
- 13-5 -
шюрах.
Если вы разрабатываете программу, предназначенную работать
под любой такой версией операционной системы MS-DOS, которая со-
держит некоторые стандартные программы, которые могут дополни-
тельно выполняться при использовании конкретных версий операцион-
ной системы MS-DOS, следует применять функцию 30h (получить номер
версии DOS) для контроля за тем выполняются или нет эти опреде-
ленные стандартные программы. Несмотря на то, что эта функция
обеспечивается только версиями 2.0 и выше операционной системы
MS-DOS, она может безболезненно выполняться и под версиями 1.0 и
1.1 до тех пор, пока будут соблюдаться предупредительные шаги,
описанные в разделе "Вызов DOS-функций" вашего руководства по
операционной системе MS-DOS.
Для исполнения этой функции следует загрузить значение 30h в
регистр АH. При выполнении прерывания "int 21h" основной номер
версии операционной системы помещается в регистр AL, а номер мо-
дификации основной версии операционной системы помещается в ре-
гистр AH. Если регистр АL содержит 00, вы можете предположить,
что вы работаете с операционной системой MS-DOS, версий 1.0 или
1.1. Любое другое число в регистре AL явно указывает номер ис-
пользуемой версии.
Если например, вы используете операционную систему MS-DOS
версии 2.00 в регистре Al будет содержаться число 02, а в регист-
ре An будет содержаться число 00. Если вы используете операцион-
ную систему MS-DOS версии 3.10, в регистре AL будет содержаться
число 03, а в регистре An будет содержаться число 10. Даже тогда,
когда вы не должны контролировать выполнение некоторых стандарт-
ных программ, эта функция позволяет вам управлять отображением на
экране дисплея "дружественного" сообщения, когда пользователь пы-
тается запустить программу под несовместимой версией операционной
системы MS-DOS. Программа, представленная листингом 13-1, может
использоваться в вашей программе для выполнения этой функции.
Листинг 13-1. Стандартная программа по определению вер-
сии операционной системы MS-DOS
----------------------------------------------------------------
; Стандартная программа по определению версии операцион-
; ной системы MS-DOS), под управлением которой запускается
; программа, содержащая эту стандартную программу.
;
; Примечание: Убедитесь, что перечисленные ниже команды
; заданы либо в сегменте данных, либо в области данных сег-
; мента кодов в вашей программе.
;
; majver db ? ; основной номер версии операционной
; ; системы (в шестнадцатеричном виде)
; minver db ? ; номер модификации основной версии
; ; операционной системы (в шестнадцатирич-
; ном виде)
getdosver proc near ; если нужно, изменить версию
;
push ax ; сохранение регистров
push bx
push cx
;
- 13-6 -
mov ah,30h ; подготовить номер функции
int 21h ; выполнить вызов функции MS-DOS
;
cmp al,0 ; проверить, используется ли версия
; до 2.0
jnz dos2plus ; если нет, значит используется
; версия 2.00 или выше
mov al,1 ; основной является версия 1.00
mov ah,0 ; (поскольку мы знаем, что ре-
; гистр AH, по-прежнему, сожер-
; жит номер функции (30h), мы не
; сможем выяснить номера модифи-
; кации основной версии операци-
; онной системы. Поэтому мы
; предполагаем наихудший случай
; - версия 1.00)
;
dos2plus:
mov majver,al ; сохранение основного номера
; версии операционной системы
mov minver,ah ; сохранение номера модификации
; основной версии операционной
; системы
;
pop cx ; восcтановление регистров
pop bx
pop ax
;
ret ; возврат
;
getdosver endp
----------------------------------------------------------------
В представленной выше стандартной подпрограмме вы можете
производить несколько операций над номером версии, хранящимся в
двух переменных: majver и minver. Каждый номер может быть превра-
щен в десятичное значение кода ASCII для вывода его на экран
вместе с каким-нибудь сообщением, или вы можете использовать эти
переменные для контроля за выполнением определенных частей прог-
раммы.
Некоторые соображения относительно языков высокого уровня
Если вы пишете программу на языке высокого уровня, вы должны
быть осведомлены о характеристиках используемого вами конкретного
компилятора или интерпретатора. Если в спецификации на данное ус-
тройство говорится, что ваш компилятор или интерпретатор работает
только под определенной версией операционной системы MS-DOS,
скомпилированная или проинтерпретированная здесь Вами программа,
вероятнее всего не будет работать под более ранними версиями опе-
рационной системы. Особенно это касается таких интерпретаторов с
языка Бейсик, как "Microsoft/IBM BASIC" и "GWBASIC", потому что
новые версии этих интерпретаторов часто выпускаются настроенными
на выполнение только новых версий операционной системы MS-DOS.
- 13-7 -
Прерывания MS-DOS
Программные прерывания, заданные для использования операци-
онной системы MS-DOS, совместимы для всех версий. Исключение со-
ставляет прерывание 2Fl, которое было добавлено только в версию
3.0. В таблице 13-1 приведен перечень прерываний.
Таблица 13-1
Прерывания MS-DOS
ДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Прерывание ¦ Версия операционной системы MS-DOS
ДДДДДДВДДДДДДДДДДД†ДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДДД
Номер ¦ Описание ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
преры-¦ преры- ¦1.0¦ 1.1¦ 2.0¦ 2.1¦ 3.0¦ 3.1¦ 3.2¦ 3.3¦ 4.0
вания ¦ вания ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
ДДДДДД†ДДДДДДДДДДД†ДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДДД
20 ¦Завершение ¦
¦программы ¦
ДДДДДД†ДДДДДДДДДДДґ
21 ¦Запрос к ¦
¦функции ¦
ДДДДДД†ДДДДДДДДДДДґ
22 ¦Адрес ¦
¦завершения ¦
ДДДДДД†ДДДДДДДДДДДґ
23 ¦Адрес ¦
¦выхода по ¦
¦Ctrl/Break ¦
ДДДДДД†ДДДДДДДДДДДґ
24 ¦Вектор ¦
¦драйвера ¦
¦критической¦
¦ошибки ¦
ДДДДДД†ДДДДДДДДДДДґ
25 ¦Чтение ¦ Да
¦диска (в ¦
¦абсолютных ¦
¦адресах) ¦
ДДДДДД†ДДДДДДДДДДДґ
26 ¦Запись на ¦
¦диск (в ¦
¦абсолютных ¦
¦адресах) ¦
ДДДДДД†ДДДДДДДДДДДґ
27 ¦Завершение ¦
¦с сохране- ¦
¦нием рези- ¦
¦дентности ¦
ДДДДДД†ДДДДДДДДДДД†ДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДДД
28 ¦Зарезерви- ¦
¦ровано ¦ Для внутреннего использования операционной
¦ ¦ системы MS-DOS
ДДДДДД†ДДДДДДДДДДД†ДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДДД
29 ¦ ¦
ДДДДДДґ(Зарезерви-¦ (Зарезервировано)
2E ¦ ровано ¦
- 13-8 -
ДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Прерывание ¦ Версия операционной системы MS-DOS
ДДДДДДВДДДДДДДДДДД†ДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДД
Номер ¦ Описание ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
преры-¦ преры- ¦1.0¦ 1.1¦ 2.0¦ 2.1¦ 3.0¦ 3.1¦ 3.2¦ 3.3¦ 4.0
вания ¦ вания ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
ДДДДДД†ДДДДДДДДДДД†ДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДД
2F ¦Мульти- ¦ ¦
¦плексное ¦ Нет ¦ Да
¦прерывание ¦ ¦
ДДДДДД†ДДДДДДДДДДД†ДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДДД
30- ¦Зарезерви- ¦ Зарезервировано
66 ¦ровано ¦
ДДДДДД†ДДДДДДДДДДД†ДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДДД
67 ¦Интерфейс ¦ ¦ ¦
¦системы ¦ Нет ¦ (см. Примечание 1) ¦ Да
¦расширенной¦ ¦ ¦
¦памяти ¦ ¦ ¦
ДДДДДД†ДДДДДДДДДДД†ДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДД†ДДДДД
68- ¦Зарезерви- ¦ Зарезервировано
6F ¦ровано ¦
ДДДДДДБДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Примечание 1: Обращение к системе расширенной памяти
(EMS): как задается в обеих спецификациях: в
"Lotus/Intel/Microsoft" (LIM) и в "AST/Quadram/Ashton-Tate"
(AQA), происходит одинаково посредством прерывания "int 67h"
во всех версиях операционной системы MS-DOS, начиная в версии
2.0. И только в операционной системе MS-DOS версии 4.0 и
старше это прерывание официально зарезервировано для обраще-
ния к EMS. Подробнее о функциях прерывания "int 67h" системы
EMS говорится в главе 7.
Многие вычислительные машины имеют прерывания, не перечис-
ленные в таблице 13-1. Эти прерывания задаются для таких специ-
альных применений, как обращение к программам системы BIOS (базо-
вая система ввода-вывода) или взаимодействие с последовательными
портами. Не следует путать эти обращения с прерываниями, заданны-
ми для использования в операционной системе MS-DOS. Только опи-
санные в "Техническом руководстве по операционной системе MS-DOS"
прерывания являются истинными прерываниями операционной системы
MS-DOS. Для поддержания совместимости со всеми реализациями опе-