твам, которые не описываются подробно, а о которых просто идет
упоминание как о "зарезервированных" или "неиспользуемых" средс-
твах в Техническом справочном руководстве по MS-DOS (фирмы "Майк-
рософт") или Техническом справочном руководстве по DOS (фирмы
"ИБМ").
Несмотря на то, что некоторые из "зарезервированных" средств
действительно зарезервированы и, по-видимому, функционально не
связаны между собой, другие же средства функционально связаны,
что обнаружено на практике опытными и искусными программистами.
Описанные ниже средства представляют собой конспективное из-
ложение не описанных в документации прерываний и функций по обра-
ботке прерываний, которые были проанализированы авторами и други-
ми лицами, представившими свои находки в различных электронных
возможностях объявлений в качестве общедоступной информации.
Необходимо отметить, что авторы и издатель не дают вообще
никаких заверений относительно верности и точности информации,
представленной в данном приложении.
Поскольку все прерывания и функции, описанные в этом прило-
жении, помечены как "зарезервированные" в технической справочной
документации фирм "Майкрософт" и "ИБМ", разумно предположить, что
разработчики операционной системы MS-DOS должны, возможно, изме-
нить определение этих прерываний и функций в будущих версиях опе-
рационной системы MS-DOS. Поэтому, любой желающий использовать
любые из описанных прерываний или функций в своих программах де-
лает это на свой страх и риск. Только некоторые из данных преры-
ваний и функций прерываний получили общераспространенное призна-
ние их использования в некоторых типах программ (например, TSR -
программ, остающихся резидентными после завершения).
Большинство описанных средств представлено с единственной
целью удовлетворить свойственное нам любопытство и с целью даль-
нейшего понимания работы операционной системы MS-DOS.
Не описанные в документации прерывания операционной
системы MS-DOS
В версии 3.3 операционной системы 2Eh описаны в документации
по операционной системе как зарезервированные. Прерывания 28h,
29h и 2Eh описаны в следующих параграфах.
- П-44 -
Прерывание 28h(40): прерывание по безопасности DOS
Прерывание 28h обычно называется "прерыванием для безопас-
ности операционной системы MS-DOS" или "прерыванием по циклу за-
нятости клавиатуры". Оно используется внутренней стандартной
программой операционной системы MS-DOS "Get Input" (Осуществить
ввод с клавиатуры), если только она безопасна для использования
функций "0Сh" и выше при прерывании "int 21h". Прерывание "int
28h" используется главным образом программами "завершиться и ос-
таться резидентными", включая программу PRINT.COM операционной
системы MS-DOS. Если какая-либо программа вызвала стандартную
программу "Осуществить ввод с клавиатуры" и ожидает нажатия кла-
виши, операционная система MS-DOS приостанавливает вызов прерыва-
ния "int 28h" в качестве сигнала другим прикладным программам,
которые могут могут быть загружены, что никакие функции прерыва-
ния "int 21h" (кроме 0Сh и выше) не должны вызываться. Нажатие
клавиши и завершение выполнения данной стандартной программы вы-
зывает прерывание "int 28h", служащее сигналом для других прик-
ладных программ, которые могут быть загружены, что система прос-
таивает и безопасна для выполнения функций прерывания "int 21h".
В большинстве случаев прерывания "int 28h" используются сов-
местно с функцией 34h (Получить признак занятости операционной
системы DOS) прерывания "int 21h" : операционная система MS-DOS
вызывает или снимает прерывание "int 28h" соответственно, а прик-
ладная программа вызывает функцию установления признака занятости
DOS с целью определения незанятого состояния системы.
Прерывание 29h(41): Вывод на устройство консоли
Прерывание "int 29h" , часто называемое по "выводу на уст-
ройство консоли" или FAST PUTCHAR, вызывает внутренние стандарт-
ные программы вывода операционной системы MS-DOS, если вывод осу-
ществляется на устройство, а не в файл, а также, если в слове
атрибута драйвера, обслуживающего данное устройство, разряд
3(04h) установлен в 1. Прерывание "int 29h" можно назвать черным
ходом для драйвера устройства вывода на консоль: символ в регист-
ре AL выводится на консоль в процессе обработки этого прерывания.
Прерывания с 2Ah(42) по 2Dh(45) : внутренние стандартные
программы операционной системы MS-DOS
Прерывания, начиная с "int 2Ah" и кончая "int 2Dh" , являют-
ся внутреними прерываниями операционной системы MS-DOS. Векторы
всех этих прерываний указывают на код операции IRET. Прерывание
"int 2Ah" используется для управления сетью в системах, установ-
ленных с MSNET и другим сетевым программным обеспечением фирмы
"Майкрософт".
Прерывание 2Eh(46). "Черный ход" для командного процессора
Обычно для обработки команды с помощью командного процессора
COMMAND.COM используется функция EXEC (функция 4Вh прерывания
- П-45 -
"int 21h"). Однако, альтернативный, быстрый и "грубый" метод вы-
полнения той же функции обеспечивает прерывание "int 2Eh". Чтобы
выполнить какую-либо команду операционной системы MS-DOS, вначале
уплотняется память с целью выделения места для новой программы
(как и в случае функции 4Вh прерывания "int 21h" ), затем заносят
в регистр DS:SI указатель на строку параметров данной команды и в
конце обрабатывается прерывание "int 2Eh". Первый байт в строке
параметров данной команды - это длина строки, за ней следует сама
строка (например, CHKDSK C:), которая заканчивается символом
"возврат каретки" (0Dh).
Этот завершающий символ считается частью длины строки. После
того как прерывание "int 2h" обработано, важным моментом является
обнуление стека, поскольку в результате прерывания "int 2h" со-
держимое регистров SS и SP может не сохраниться.
Прерывания с 30h(48) по FFh(255)
Для операционной системы MS-DOS, начиная с версии 3.30, пре-
рывания с "int 30h" по "int FFh" помещаются как зарезервирован-
ные. Однако некоторые из этих прерываний используются дополни-
тельным аппаратным и программным обеспечением. К примеру, преры-
вание "int 67h" является зарезервированным для использования в
спецификации систем расширенной памяти (EMS) с драйверами
Lotus/Intel/Microsoft (LIM). С помощью этого прерывания (реализо-
ванного в драйвере устройства EMS)выполняются все функции LIM EMS
(см. главу 7 для более полной информации по системам расширенной
памяти EMS). Прерывания с 30h(48) по FFh(255) используют другие
типы дополнительного аппаратного и программного обеспечения , та-
кого как сетевые адаптеры фирмы "Майкрософт" и "ИБМ", стандартные
программы базовой системы ввода-вывода (BIOS), адаптеры EGA и VGA
и другие.
Не описанные в документации вызовы функций прерывания 21h(33)
Следующие вызовы функций прерывания "int 21h" помечены как
"зарезервированные" или "неиспользуемые" в Техническом справочном
руководстве по операционной системе DOS фирм "Майкрософт" и
"ИБМ" (для версии 3.3 операционной системы MS-DOS): 18h, с 1Dh
до 20h, 32h, 34h, 37h, с 50h по 53h, 55h, 58h, 5Dh, 60h, 61h,
63h, 64h.
Наибольшим номером описанной функции прерывания "int 21h"
(по данным на версию 3.3 операционной системы MS-DOS) является
68h. Зарезервированные функции свыше 68h, если вообще имеются,
еще предстоит узнать. Ниже описаны более детально недокументиро-
ванные функции прерывания 21h и выполняемые этими функциями опе-
рации.
Функции 18h(24), 1Dh(29), 1Eh(30), 20h(32h): формальные
функции, обеспечивающие совместимость с операционной системой CP/M
Многие функции операционной системы MS-DOS c более низкими
номерами эквивалентны подобным функциям операционной системы
CP/M. Не все из функций CP/M реализованы в операционной системе
MS-DOS, однако многие из них располагают "пустым окном" для об-
легчения переноса программ операционной системы CP/M в MS-DOS.
Эти функции после своего выполнения ничего не возвращают.
- П-46 -
Функция 1Fh(31): найти информацию о блоке на диске
для текущего диска
Функция 1Fh используется для возврата указателя на "таблицу
с информацией о блоке на диске" для текущего диска. В таблице Б-1
приведен формат этой таблицы и ее содержимое.
Вход : AH = 1Fh
Возврат: DS:BX содержит адрес точки первого входа блока на
диска для текущего диска
Примечание: Функция 1Fh аналогична функции 32h, за исключе-
нием того, что функция 32h возвращает информацию о
блоке диска для указанного диска. При работе с вер-
сиями 2.0 и выше операционной системы MS-DOS эта
функция просто выполняет функцию 32h прерывания
"int 21h" при AL = 0.
Таблица Б-1
Формат блока диска операционной системы MS-DOS
ДДДДДДДДВДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Смещение¦ Тип ¦Данные
ДДДДДДДД†ДДДДДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
00 ¦Байт ¦Диск (дисковод) 0 = A, 1 = В и т.д.
01 ¦Байт ¦Устройство внутри драйвера (0,1,2, и т.д.)
02 ¦Слово ¦Количество байтов в секторе
04 ¦Байт ¦Количество секторов в кластере - 1;
05 ¦Байт ¦Кластер сдвига сектора
06 ¦Слово ¦Количество зарезервированных (начальная
¦ ¦загрузка) секторов
08 ¦Байт ¦Количество таблиц FAT
09 ¦Слово ¦Количество элементов корневого каталога
0B ¦Слово ¦Номер сектора кластера 2 (1-ый сектор
¦ ¦данных)
0D ¦Слово ¦Количество кластеров +1 (или последнего
¦ ¦кластера)
0F ¦Байт ¦Секторы для таблиц FAT
10 ¦Слово ¦Номер сектора в каталоге
12 Двойное слово¦Адрес заголовка устройства
16 ¦Байт ¦Байт дескриптора среды
17 ¦Байт ¦Нуль, если к диску идет обращение
18 Двойное слово¦Адрес следующего блока диска операционной