DOS, функция 22h Писать произвольную запись файла
Вход:
AH=22h
DS:DX - адрес открытого FCB (Таблица Б-2)
Выход:
AL=OOh, если запись была успешной
AL=01h, при переполнении диска
AL=02h, если DTA+FCB выходит за сегмент (нет записи)
Описание.
Данная функция записывает в файл с текущей позиции как с указанной
в полях FCB "Запись с текущей позиции" и "Номер записи при непо-
средственном доступе к файлу".
DOS, функция 23п Получить размер файла через FCB
Вход:
АН^ЗЬ
DS:DX - адрес неоткрытого FCB (Таблица Б-2)
Выход:
AL=OOh, если функция выполнена успешно
AL=FFh, если при выполнении функции возникли ошибки
Описание.
Проще определить размер файла при помощи функции 3Dh с последу-
ющим выполнением 42h (при AL=2).
DOS, функция 24h Установить адрес произвольной записи в файле
Вход:
AH°24h
DS:DX - адрес открытого FCB (Таблица Б-2)
Описание.
Устанавливает поле "Номер записи при непосредственном доступе
к файлу" в FCB на файловый адрес, соответствующий значениям полей
"Текущий блок" и "Запись с текущей позиции".
DOS, функция 25h Установить вектор прерывания
Вход:
AH=25h
AL - номер прерывания
DS:DX - вектор прерывания - адрес программы обработки прерывания
Описание.
Устанавливает значение элемента таблицы векторов прерываний для
прерывания с номером AL, равным DS:DX. Это равносильно записи
4-байтового адреса в 0000:(AL*4), но, в отличие от прямой записи, DOS
знает, что происходит, и гарантирует, что в момент записи прерывания
будут заблокированы.
Примечание.
Восстановить DS (если необходимо) после этого вызова.
DOS, функция 26h Создать новый PSP
Вход:
AH=26h
DX - адрес сегмента (параграфа) для нового PSP
CS - сегмент PSP, используемый как шаблон для нового PSP
(Таблица Б-4)
Описание.
Устанавливает PSP для порождаемого процесса по адресу DX:0000.
Текущий PSP (lOOh байт, начиная с CS:0) копируется в DX:OOOOh, поле
МетТор соответственно корректируется, векторы Terminate, Ctrl-Break
и Critical Error копируются в PSP из векторов прерываний INT 22h,
INT 23h и INT 24h. После этого можно загрузить программу с диска
и передать ей управление посредством FAR JMP.
Примечание.
Если перехватывается INT 21h, нужно позаботиться о помещении в стек
корректного CS:IP. Еще лучше использовать функцию 4Ch.
Таблица Б-4. Формат PSP.
Смещ. | Размер | Описание | |
+00h | 2 байта | Инструкция INT 20h | |
+02h | слово | Сегмент первого байта памяти, выделенной программе | |
+04h | байт | Неиспользуемый заполнитель | |
+05h | байт | СР/М системный вызов | |
+06h | слово | Первый сегмент для СОМ-файла | |
+08h | 2 байта | Запоминаются FARJMP 05h | |
+OAh | двойное слово | Хранит INT 22h (адрес завершения) | |
+OEh | двойное слово | Хранит INT 23h (адрес обработчика Ctrl-Break) | |
+12h | двойное слово | Хранит INT 24h (адрес обработчика критической ошибки) |
|
+16h | слово | Сегмент родительского PSP | |
+18h | 20 байт | Рабочая таблица файлов. Один байт на файл (FFh - закрыт) |
|
+2Ch | слово | Сегмент среды окружения для процесса | |
+2Eh | двойное слово | SS:SP на входе при последнем вызове прерывания INT 21 h |
|
+32h | слово | Количество входов в рабочей таблице файлов (по умолчанию 20) |
|
+34h | двойное слово | Указатель на рабочую таблицу файлов (по умолчанию PSP:0018h) |
|
+38h | двойное слово | Указатель на предыдущий PSP | |
+3Ch | 4 байта | Зарезервировано | |
+40h | 2 байта | Версия при возврате на INT 2 lh (AH=30h) | |
+42h | 26 байт | Зарезервировано (используется MS Windows и версиями DOS выше 6.00) |
|
+5Ch | 16 байт | Первый FCB по умолчанию ' | |
+6Ch | 16 байт | Второй FCB по умолчанию | |
+7Ch | 4 байта | Не используются | |
-i-ent, | 1 Ой Й-.Д.Т. |
DOS, функция 27h Читать произвольный блок файла
Вход:
AH°27h
DS:DX - адрес открытого FCB (Таблица Б-2)
СХ - число считываемых записей
Выход:
AL=OOh, если чтение успешно и DTA заполнена данными
AL=01h если достигнут конец файла (EOF) и данные не считаны
AL=02h, если при чтении произошел выход за границу сегмента
AL=03h, если EOF и считана усеченная порция (дополнена нулями)
СХ - действительное число считанных записей
Описание.
Читает несколько записей из файла, начиная с файлового адреса, ука-
занного полем "Номер записи при непосредственном доступе к файлу"
в FCB. Помещает данные в память, начиная с адреса DTA. Соответству-
ющие поля FCB корректируются, чтобы указывать на следующую за-
пись (первую за прочитанными).
DOS, функция 28h Писать произвольный блок файла
Вход:
АН-28Н
DS:DX - адрес открытого FCB (Таблица Б-2)
СХ - число записываемых блоков (если СХ равен нулю, то размер фай-
ла усекается до указанного в поле FCB "Номер записи при непосред-
стванном доступе к файлу")
Выход:
AL=OOh, если запись успешна "1!
AL=01h, при переполнении диска
AL=02h, если при записи произошел выход за границу сегмента
СХ - действительное число сделанных записей '
Описание.
Записывает несколько блоков в файл, начиная с файлового адреса, ука-
занного полем "Номер записи при непосредственном доступе к файлу"
в FCB. Читает данные из памяти, начиная с адреса DTA. Соответству-
ющие поля FCB корректируются, чтобы указывать на следующую за-
пись (первую за прочитанными).
DOS, функция 29h Разобрать имя файла
Вход:
AH=29h
DS:SI - адрес исходной текстовой строки для разбора
ES:DI - адрес буфера для результирующего неоткрытого FCB
(Таблица Б-2)
AL - битовые флаги, указывающие опции разбора (Таблица Б-5).
Выход:
AL=OOh, если результирующий FCB не содержит обобщенных символов
AL=01h, если результирующий FCB содержит обобщенные символы
AL°FFh, если неверно обозначение диска в имени файла
DS:SI - изменен - указывает на символ сразу вслед за именем файла
ES:DI - не изменен - указывает на неоткрытый FCB
Описание.
Создает неоткрытый FCB из строки текста или параметра команды.
Текст, начиная с DS:SI, анализируется как имя файла в формате
D.-FILENAME.EXT, и буфер по адресу ES:DI заполняется как соответ-
ственно форматированный FCB.
Таблица Б-5. Битовые флаги.
Бит | Описание | |
0 | Пропустить разделители | |
1 | Использовать присутствующий номер диска, если диск не указан, вместо того, чтобы устанавливать это поле в ноль ; | |
2 | Использовать в FCB имя присутствующего файла, если базовое имя не указано, вместо того, чтобы заполнять это поле стандартным • заполнителем , |
|
3 | Использовать в FCB расширение присутствующего файла, если расширение не указано, вместо того, чтобы заполнять это поле стандартным заполнителем |
|
4 | Зарезервировано |
DOS, функция 31h Завершиться и остаться резидентным
Вход:
AH=31h
AL - код выхода
DX - объем памяти, оставляемой резидентной (в параграфах)
Описание.
Выходит в родительский процесс, сохраняя код выхода в AL. Код выхо-
да можно получить через функцию 4Dh. DOS устанавливает начальное
распределение памяти, как специфицировано в DX, и возвращает управ-
ление родительскому процессу, оставляя указанную память резидентной
(число байт равно DX*16). Эта функция перекрывает функцию
INT 27h, которая не возвращает код выхода и не способна установить
резидентную программу, размер которой превышает 64Кбайт.
Версии: DOS 2.00 и выше.
DOS, функция 32h Получить информацию DOS о диске
(Официально не документирована)
Вход:
AH=32h
DL - номер диска (0 - текущий, 1 - А и так далее)
Выход:
AL=OOh, если в DL был задан корректный диск
DS:BX - адрес блока информации о диске для запрошенного уст-
ройства (Таблица Б-6)
AL=FFh, если в DL был задан некорректный диск
Описание.
Возвращает блок информации, представляющей интерес для приложе-
ний и утилит, которые выполняют доступ к дискам, поддерживаемым
драйверами устройств, на уровне секторов.
Некоторые дисководы (особенно незагружаемые) функционируют только
через свои драйвера устройств. Такие диски могут содержать неверную
информацию в корневой записи и таблице разделов, что делает очень
трудным определение, например, размера корневого оглавления, числа
таблиц FAT и прочего. Блок информации диска содержит такие данные
в хорошо форматированной структуре.
Версии: DOS 2.00 и выше.
Таблица Б-6. Формат блока информации о диске.
Смещ. | Размер | Описание | |
+00h | байт | Номер диска (0 - текущий, 1 - А и так далее) | |
+01h | байт | Количество блоков в драйвере диска | |
+02h | слово | Количество байт в секторе | |
+04h | байт | Наибольший номер сектора в кластере | |
+05h | байт | Счетчик сдвига для конвертации кластера в сектор | |
+06h | слово | Количество зарезервированных секторов в начале диска | |
+08h | байт | Количество FAT | |
+09h | слово | Количество входов в root-директорию | |
+OBh | слово | Номер первого сектора, содержащего данные | |
+ODh | слово | Максимальный номер кластера | |
+OFh | байт | Количество секторов в FAT | |
+10h | слово | Номер первого сектора директории | |
+12h | двойное слово | Адрес заголовка драйвера устройства | |
+16h | байт | ID (отражает тип диска) | |
+17h | байт | OOh, если диск доступен и FFh, если нет | |
+18h | двойное слово | Указатель на следующий блок информации о диске | |
Для версий DOS 2.XX | |||
+lCh | слово | Кластер, содержащий старт текущей директории. OOOOh - root, FFFFh - не известно |
|
+lEh | 64 байта | Путь текущей директории для диска в формате ASCIZ | |
Для версий DOS 3.XX | |||
+lCh | слово | Кластер, с которого начинается поиск свободного места при записи некоторого количества секторов на диск |
|
+lEh | слово | Количество свободных секторов на диске. FFFFh - не известно |
Таблица Б-6. Формат блока информации о диске. {Окончание)
Смещ. | Размер | Описание |
Для версий DOS 4.XX - 6.ХХ | ||
+OFh | слово | Количество секторов в FAT |
+llh | слово | Номер первого сектора директории |
+13h | двойное слово | Адрес заголовка драйвера устройства |
+17h | байт | ID (отражает тип диска) |
+18h | байт | OOh, если диск доступен, и FFh, если нет |
+19h | двойное слово | Указатель на следующий блок информации о диске |
+lDh | слово | Кластер, с которого начинается поиск свободного кластера при записи некоторого количества секторов на диск |
+lFh | слово | Количество свободных секторов на диске. FFFFh - не известно |
DOS, функция 33h Установить/опросить статус Ctrl-Break
Вход:
AH=33h
AL=OOh - опросить текущий статус контроля Ctrl-Break
AL=01h - установить статус контроля Ctrl-Break
DL - требуемый статус (0 - выключен, 1 - включен)
Выход:
DL - текущий статус (0 - выключен, 1 - включен)
Описание.
Если AL=OOh, в DL возвращается текущий статус контроля Ctrl-Break.
Если AL=01h, в DL возвращается новый текущий статус.
Когда статус "включен", DOS при выполнении большинства функций
(исключая 06h и 07h) проверяет, нажаты ли клавиши Ctrl-Break. Если
это обнаружено, выполняется прерывание INT 23h (если оно не пере-
хватывается, то процесс снимается).
При статусе "выключен" DOS проверяет на нажатие Ctrl-Break лишь
при выполнении операций стандартного ввода/вывода, стандартной пе-
чати и стандартного AUX.
Версии: DOS 2.00 и выше.
DOS, функция 34h Получить адрес флага активности DOS
(Официально не документирована)
Вход:
AH°34h
Выход:
ES:BX - адрес флага активности DOS
Описание.
Функция возвращает флаг активности DOS, который показывает, мож-
но ли на данный момент вызывать функции DOS. Эту функцию ис-
пользует, например, функция фоновой печати PRINT.
Если ES:[BX] не нулевой, фоновая программа (TSR либо popup)
не должна использовать никаких функций DOS.
Версии: DOS 2.00 и выше.
DOS, функция 35h Получить вектор прерывания
Вход:
AH-35h
AL - номер прерывания (OOh до FFh)
Выход:
ES:BX - адрес обработчика прерывания
Описание.
Возвращает значение вектора прерывания для INT (AL), то есть загру-
жает в ВХ 0000:[AL*4], а в ES - 0000:[(AL*4)+2].
Примечание.
Эта функция изменяет сегментный регистр ES.
Версии: DOS 2.00 и выше.
DOS, функция 36h Получить свободную память диска
Вход:
АН-ЗбЬ
DL - номер диска (0 - текущий, 1 - А и так далее)
Выход:
AX=FFFFh, если AL содержал неверный номер диска
Если функция выполнена успешно:
AX - число секторов на кластер
ВХ - число доступных кластеров
СХ - байт на сектор
DX - всего кластеров на диске
Описание.
Возвращает данные, полезные для подсчета общей и доступной диско-
вой памяти. Если в АХ возвращено FFFFh, значит задан неверный
диск. Иначе свободная память (в байтах) составляет (АХ*ВХ*СХ), все-
го памяти (AX*CX*DX) байт.
Версии: DOS 2.00 и выше.
DOS, функция 37h Установить/опросить символ-переключатель
(Официально не документирована)
Вход:
AH=37h
AL=OOh - опросить текущий переключатель
AL=01h - установить символ-переключатель
DL - символ-переключатель
Выход:
AL=OOh, если функция выполнена успешно
DL - текущий символ-переключатель DOS (если при вызове AL=OOh)
AL=FFh, если использована неподдерживаемая подфункция
Описание.
Устанавливает или опрашивает "Глобальный переключатель" DOS. Пе-
реключатель (SWITCHAR) - это символ, используемый в командной
строке как признак опции. По умолчанию принимается "/" (например,
DIR /w/p), но его можно изменить на "-" (DIR -w-p), если нужно, что-
бы система была больше похожа на UNIX. Общепринято опрашивать
значение SWITCHAR перед разбором области неформатированных па-
раметров в PSP для выделения опций команды.
Примечание.
Эта недокументированная команда может измениться в будущих верси-
ях DOS. He рекомендуется изменять SWITCHAR.
Версии: DOS 2.00 и выше.
DOS, функция 38h Получить/установить информацию о стране
Вход:
AH-SSh
Получить информацию:
AL=OOh - получить данные для текущей страны
DS:DX - адрес локального буфера для чтения блока данных страны
(Таблица Б-7)
Установить информацию:
AL=01h-FEh - установить данные для указанной страны < 255
AL=FFh - установить данные для кода страны > 255
ВХ - 16-битный код страны (Таблица Б-8)
DX=FFFFh
Выход:
CF=0, если функция выполнена успешно
ВХ - код страны
CF=1, если при выполнении функции возникли ошибки
AX - код ошибки
Описание.
Если DX=FFFFh, то текущий код страны устанавливается равным AL
(если AL=FFh, то код страны устанавливается равным ВХ). Обычно код
страны устанавливается в файле CONFIG.SYS. Если DX<FFFFh,
то DS:DX адресует буфер пользователя, в который помещается 20Ь-байт-
ный блок данных для указанной страны.
Версии: DOS 2.00 и выше.
DOS, функция 39h Создать новое оглавление
Вход:
АН-ЗЭЬ
DS:DX - адрес строки ASCIZ с именем оглавления
Таблица 6-7. Формат блока данных страны.
Смещ. | Размер | Описание |
+00h | слово | Формат даты: |
OOh - USA (месяц дата год) | ||
Olh - Европа (дата месяц год) | ||
02h - Япония (год месяц дата) | ||
+02h | 5 байт | Текущая строка символов в формате ASCIZ |
+07h | 2 байта | Разделитель тысяч в формате ASCIZ |
+09h | 2 байта | Разделитель целой и дробной части в формате ASCIZ |
+OBh | 2 байта | Разделитель даты в формате ASCIZ |
+ODh | 2 байта | Разделитель времени в формате ASCIZ |
+OFh | байт | Текущий формат: |
Бит 2 - текущий символ заменяется десятичной точкой | ||
Бит 1 - количество пробелов между значением и текущим символом |
||
Бит 0=0 - текущий символ предшествует значению | ||
Бит 0-=1 - текущий символ следует за значением | ||
+10h | байт | Количество символов в дробной части числа |
+llh | байт | Формат времени: |
Бит 0~0 - 12-часовые часы | ||
Бит 0=1 - 24-часовые часы | ||
+12h | двойное слово | Адрес карты (CALL FAR при AL=кoд символа больше 80h) |
+16h | 2 байта | Список разделителей в формате ASCIZ |
+18h | 10 байт | Зарезервировано |
Выход:
CF=0, если функция выполнена успешно
АХ не сохранен
CF=1, если при выполнении функции возникли ошибки
АХ - код ошибки
Описание.
Если диск и/или корневой путь не указаны, то новое оглавление созда-
ется в текущей директории. Поддиректория создается и связывается
Таблица Б-8. Коды некоторых стран.
Код | Страна | |
OOlh | Соединенные Штаты Америки | |
003h | Латинская Америка | |
007h | Россия | |
OlFh | Нидерланды | |
020h | Бельгия | |
021h | Франция | |
022h | Испания | |
027h | Италия | |
02Ch | Великобритания | |
031h | Германия |
с существующим деревом. Если флаг CF установлен при возврате,
то АХ содержит код ошибки, и оглавление не создается.
Версии: DOS 2.00 и выше.
DOS, функция 40h Писать в файл через описатель
Вход:
AH=40h
ВХ - описатель файла
DS:DX - адрес буфера, содержащего записываемые данные
СХ - число записываемых байт
Выход:
CF=0, если функция выполнена успешно
AX - число действительно записанных байт
CF°1, если при выполнении функции возникли ошибки
AX - код ошибки
Описание.
СХ байт данных записываются в файл или на устройство с описателем,
заданным в ВХ. Данные берутся из буфера, адресуемого через DS:DX,
и записываются, начиная с текущей позиции указателя чтения/записи
файла. Чтобы установить указатель файла, если необходимо, можно ис-
пользовать функцию 42h. Обновляет указатель чтения/записи файла,
чтобы подготовиться к последующим операциям чтения или записи.
Версии: DOS 2.00 и выше.
DOS, функция 41h Удалить файл
Вход:
AH^lh
DS:DX - адрес строки ASCIZ с именем файла
Выход:
CF=0, если функция выполнена успешно
АХ не сохранен
CF=1, если при выполнении функции возникли ошибки
АХ - код ошибки
Описание.
Файл удаляется из оглавления заданного диска. Если диск и/или путь
не указаны, принимаются значения по умолчанию. Имя файла не может
содержать обобщенные символы ("?" и "*"). Если файл имеет атрибут
"только чтение", то перед удалением необходимо изменить этот атрибут
через функцию 43h.
Версии: DOS 2.00 и выше.
DOS, функция 42h Переместить указатель файла
Вход:
AH^h
ВХ - описатель файла ^
CX:DX на сколько передвинуть указатель: (CX*65536)+DX
AL=OOh переместить относительно начала файла +CX:DX
AL=01h переместить относительно текущей позиции +CX:DX
AL=02h переместить относительно конца файла +CX:DX
Выход:
CF=0, если функция выполнена успешно
DX:AX новая позиция указателя файла (если нет ошибки)
CF=1, если при выполнении функции возникли ошибки
AX - код ошибки
Описание.
Перемещает логический указатель чтения/записи к нужной позиции.
Очередная операция чтения или записи начнется с этого адреса.
Примечание.
Вызов с AL=2, CX=0, DX=0 возвращает длину файла в DX:AX.
Действительная длина файла равна (DX*65536)+AX.
Версии: DOS 2.00 и выше.
DOS, функция 43h Установить/опросить атрибуты файла
Вход:
AH=43h
DS:DX - адрес строки ASCIZ с именем файла
AL=OOh - извлечь текущий атрибут файла
AL=01h - установить атрибут файла
СХ - новый атрибут файла (для подфункции 01Ь)(Таблица Б-9)
Выход:
CF=0, если функция выполнена успешно
СХ - текущий атрибут файла (для подфункции ООЬ)(Таблица Б-9)
АХ не сохранен
CF=1, если при выполнении функции возникли ошибки
АХ - код ошибки
Таблица Б-9. Атрибуты файла.
Бит | Атрибут |
0 | Только чтение |
1 | Скрытый |
2 | Системный |
3 | Метка тома (может находиться только в корневом каталоге) |
4 | Директория |
5 | Архивный |
Описание.
Атрибут файла читается или устанавливается, согласно коду в AL.
Если диск и/или путь не указаны, принимаются значения по умолчанию.
Примечание.
Чтобы скрыть оглавление, нужно использовать CX=02h (а не 12h, как
можно было ожидать).
Версии: DOS 2.00 и выше.
DOS, функция 44h Управление устройством ввода/вывода
Вход:
AH=44h
AL - код подфункции:
AL=OOh - получить информацию об устройстве
AL=01h - установить информацию об устройстве
AL=02h - читать с символьного устройства
AL=03h - писать на символьное устройство
AL=04h - читать с блочного устройства
AL=05h - писать на блочное устройство
AL=06h - дать статус ввода
AL=07h - дать статус вывода
AL=08h - запрос съемного носителя
AL=09h - запрос удаленного устройства
AL=OAh - запрос удаленного описателя
AL=OBh - счет повторов разделения
AL=OCh - кодовые страницы 3.3
9- 1436
AL-ODh - общий IOCTL
AL=OEh - получить логическое устройство
AL=OFh - установить логическое устройство
Версии: DOS 2.00 и выше.
DOS, функция 45h Дублировать описатель файла
Вход:
AH-45h
ВХ - существующий описатель файла
Выход:
CF=0, если функция выполнена успешно
AX - новый описатель файла, дублирующий оригинал
CF=1, если при выполнении функции возникли ошибки
AX - код ошибки
Описание.
Создает дополнительный описатель файла, ссылающийся на тот же по-
ток ввода/вывода, что и существующий описатель. Любое продвижение
указателя чтения/записи одного описателя (включая любые операции
чтения, записи или перемещения указателя посредством функции 42h)
действует на его дубликат.
Версии: DOS 2.00 и выше.
DOS, функция 46h Переназначить описатель
Вход:
АН-46П
ВХ - целевой описатель файла (должен уже существовать)
СХ - исходный описатель файла (должен уже существовать)
Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
AX - код ошибки
Описание.
Заставляет описатель файла (handle) ссылаться на другой файл или ус-
тройство. Если описатель в СХ (источник) открыт, он закрывается,
а затем становится дубликатом описателя в ВХ (назначения). Иными
словами, описатели в СХ и ВХ будут ссылаться на один и тот же физи-
ческий файл или устройство.
Версии: DOS 2.00 и выше.
DOS, функция 47h Получить текущее оглавление DOS
Вход:
AH°47h
DS:SI - адрес локального буфера для результирующего пути - 64 байта
DL - номер диска (0 - текущий, 1 - А и так далее)
Выход:
CF=0, если функция выполнена успешно
АХ не сохранен
CF=1, если при выполнении функции возникли ошибки
АХ - код ошибки
Описание.
В буфер по адресу DS:SI помещается в форме ASCIZ путь текущего ог-
лавления для диска, указанного в DL. Путь возвращается в формате:
"путь\оглавление",0. Впереди не подставляется буква диска, а сзади не
подставляется символ "\". Например, если текущим является корневое
оглавление, эта функция вернет пустую строку (DS:[SI]=0).
Версии: DOS 2.00 и выше.
DOS, функция 48h Выделить память
Вход:
AH^Sh
ВХ - запрошенное количество памяти в 16-байтных параграфах
Выход:
CF=0, если функция выполнена успешно
АХ - сегментный адрес распределенного блока
CF"!, если при выполнении функции возникли ошибки
АХ - код ошибки
ВХ - размер максимального доступного блока памяти (в параграфах)
Описание.
Распределяет блок памяти длиной ВХ параграфов, возвращая сегмент-
ный адрес этого блока в АХ (блок начинается с АХЮООО). Если распре-
деление неудачно, устанавливается флаг CF, в АХ возвращается код
ошибки, а ВХ содержит максимальный размер доступной для распреде-
ления памяти (в параграфах). Чтобы определить наибольший доступ-
ный блок, общепринято устанавливать BX=FFFFh перед вызовом.
Распределение завершится с ошибкой, возвратив размер максимально-
го блока памяти в ВХ.
Версии: DOS 2.00 и выше.
DOS, функция 49h Освободить блок памяти
Вход:
AH=49h
ES - сегментный адрес освобождаемого блока памяти
Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
АХ - код ошибки
Описание.
Освобождает блок памяти, начинающийся с адреса ES:0000. Этот блок
становится доступным для других запросов системы. Вообще говоря,
нужно освобождать лишь те блоки памяти, которые получены через
функцию 48h (распределить память). Родитель отвечает за освобожде-
ние памяти порожденных процессов. Тем не менее, ничто не препят-
ствует освобождать память чужих процессов.
Версии: DOS 2.00 и выше.
DOS, функция 52h Получить адрес векторной таблицы связи
(Официально не документирована)
Вход:
АН-52П
Выход:
ES:BX - адрес векторной таблицы связи (Таблица Б-11)
Описание.
Данная функция возвращает адрес векторной таблицы связи.
Версии: DOS 2.00 и выше.
Таблица Б-]]. Формат векторной таблицы связи.
Смещ. | Размер | Описание | |
-18h | слово | Содержимое СХ при вызове INT 21h при AX=5E01h | |
-16h | слово | Счетчик для кэшируемых FCB | |
-14h | слово | Счетчик для открытых FCB | |
-12h | двойное слово | Адрес обработчика OEM-функций (FFFFh:FFFFh, если обработчик не установлен) |
|
-OEh | слово | Смещение в кодовом сегменте DOS кода возврата из прерывания INT 21h |
|
-ОСЬ | слово | Счетчик повторов | |
-OAh | слово | Задержка повтора | |
-08h | двойное слово | Указатель на буфер текущего диска | |
-04h | слово | Сегмент данных DOS | |
-02h | слово | Сегмент первого МСВ | |
+00h | двойное слово | Указатель на первый блок параметров диска | |
+04h | двойное слово | Указатель на первую системную файловую таблицу | |
+08h | двойное слово | Указатель на заголовок активного драйвера часов | |
+OCh | двойное слово | Указатель на заголовок активного драйвера консоли |
DOS, функция 54h Получить переключатель верификации DOS
Вход:
AH=54h
Выход:
AL=OOh, если верификация выключена (OFF)
AL=01h, если верификация включена (ON)
Описание.
Возвращает текущий статус верификации записи DOS. Если в AL воз-
вращается 1, то DOS считывает обратно каждый сектор, записываемый
на диск, чтобы проверить правильность записи. Функция DOS 2Eh по-
зволяет установить/изменить режим верификации.
Версии: DOS 2.00 и выше.
DOS, функция 56h Переименовать/переместить файл
Вход:
AH=56h
DS:DX - адрес старого ASCIZ имени (путь/имя существующего файла)
ES.-DI - адрес нового ASCIZ имени (новые путь/имя)
Выход:
CF^O, если функция выполнена успешно
CF^l, если при выполнении функции возникли ошибки
AX - код ошибки
Описание.
Старое имя DS:DX должно существовать и не может содержать обоб-
щенных символов. Диск и путь необязательны (если они не указаны,
принимаются значения по умолчанию). Новое имя ES:DI должно опи-
сывать несуществующий файл. Если указан диск, он должен быть тем
же, что и в старом имени. Если диск или путь не указаны, принимают-
ся текущие. Если старое и новое имя содержат разные пути (явные или
принятые по умолчанию), то элемент оглавления для файла перемеща-
ется в оглавление, указанное в новом имени.
Версии: DOS 2.00 и выше.
DOS, функция 57h Установить/опросить дату/время файла
Вход:
АН-ЗУЬ
AL=OOh - получить дату/время файла
AL=01h - установить дату/время файла
ВХ - описатель файла (handle)
СХ (если AL=1) - новая отметка времени в формате время файла
DX (если AL=1) - новая отметка даты в формате дата файла
Выход:
CF=0, если функция выполнена успешно
СХ - (если при вызове AL=0) отметка времени файла в формате
время/дата файла (Таблица Б-12)
DX - (если при вызове AL=0) отметка даты файла в формате вре-
мя/дата файла (Таблица Б-13)
CF=1, если при выполнении функции возникли ошибки
AX - код ошибки
Описание.
ВХ должен содержать описатель открытого файла (см. 3Ch или 3Dh).
DX и СХ задаются в формате памяти (например, младшие 8 бит даты
находятся в DH).
Версии: DOS 2.00 и выше.
DOS, функция 59h Получить расширенную информацию об ошибке
Вход: ______
AH°59h
BX-OOOOh (номер версии: ООООЬ для DOS 3.0, 3.1 и 3.2)
Таблица Б-12. Формат времени файла. Таблица Б-13. Формат даты файла.
Биты | Описание |
15-11 | Часы |
10-5 | Минуты |
4-0 | Секунды/2 |
Биты | Описание |
15-9 | Год-1980 |
8-5 | Месяц |
4-0 | Дата |
Выход:
AX - расширенный код ошибки (0, если ошибки не было)
ВН - класс ошибки
BL - предлагаемое действие
СН - сфера (где произошла ошибка)
Описание.
Эту функцию можно использовать, чтобы уточнить, что предпринять
после сбоя функции DOS по ошибке (только DOS 3.0+). Ее можно вы-
зывать: в обработчике критических ошибок INT 24h, после любой фун-
кции INT 21h, возвратившей флаг переноса после вызова FCB-функ-
ции, возвратившей AL=FFh.
Версии: DOS 3.00 и выше.
DOS, функция 62h Получить адрес PSP
Вход:
AH^h
Выход:
ВХ - сегментный адрес PSP выполняющейся программы
Описание.
Эта функция возвращает в ВХ адрес PSP текущей программы. Исполь-
зуется, для получения адреса параметров командной строки, адреса ок-
ружения DOS и другой полезной информации, содержащейся в PSP.
Версии: DOS 3.00 и выше.
DOS, функция 65h Получить расширенную информацию страны
Вход:
AH=65h DOS 3.3
AL - подфункция:
AL=01h - дать расширенную информацию страны DOS 3.3
AL=02h - дать таблицу преобразования строчных букв в прописные
AL=04h - то же для символов, допустимых в именах файлов
AL=06h - дать сопоставляющую последовательность
DX - код страны
ВХ - кодовая страница (FFFFh - консоль)
СХ - размер буфера возврата (должен быть минимум 5 байт)
ES:DI - адрес буфера возврата
Выход:
CF=0, если функция выполнена успешно
ES:DI - адрес возвращенной информации
CF=1, если при выполнении функции возникли ошибки:
AX - код ошибки
Описание.
Эта функция возвращает различную национальную информацию.
Используется для получения формата даты, символа валюты и других
данных, необходимых для вывода и сортировки информации (во всех
странах, кроме США).
Версии: DOS 3.30 и выше.
DOS, функция 66h Получить/установить глобальную кодовую страницу
Вход:
AH-66h
AL - подфункция:
AL=01h - запросить текущую глобальную кодовую страницу
AL=02h - установить активную кодовую страницу
ВХ - (при AL=02h) кодовая страница (Таблица Б-14)
DX - (при AL=02h) системная кодовая страница (устанавливаемая при
загрузке)
Выход:
CF=0, если функция выполнена успешно
ВХ - (если при вызове AL=01h) текущая активная кодовая страница
DX - (если при вызове AL=01h) системная кодовая страница (уста-
навливаемая при загрузке)
CF=1, если при выполнении функции возникли ошибки
AX - код ошибки
Описание.
Эта функция выбирает новую кодовую страницу или получает значение
текущей активной кодовой страницы (страниц). Программа DOS
NLSFUNC должна быть загружена до этого вызова. Функция использу-
ется в сочетании с 65h или 38h.
Примечание.
Устанавливая новую активную кодовую страницу, DOS читает данные
из файла COUNTRY.SYS.
Версии: DOS 3.30 и выше.
Таблица Б-14. Значения кодовых страниц.
Кодовая страница |
Страна (язык) | |
437 | Соединенные Штаты Америки | |
850 | Многоязыковая | |
857 | Турция | |
860 | Португалия | |
861 | Исландия | |
863 | Канада (французский) | |
865 | Норвегия | |
866 | Россия |
DOS, функция 67h Установить число описателей файлов
Вход:
AH=67h
ВХ - максимальное число описателей (до FFFFh)
Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
AX - код ошибки
Описание.
Эта функция устанавливает максимальное число описателей файлов,
которые могут быть открыты одновременно. Если значение ВХ меньше
20, то принимается 20. Если значение ВХ меньше текущего максимума
(нужно сократить число описателей), и в данный момент открыто более
чем ВХ файлов, то изменение будет иметь место, когда число открытых
файлов не будет превышать устанавливаемый максимум. Если ВХ боль-
ше текущего максимума (нужно увеличить число описателей), то DOS
должна иметь доступную память, чтобы распределить ее под новые опи-
сатели. Функция 4Ah позволяет освободить память, чтобы она стала
доступной DOS.
Версии: DOS 3.30 и выше.
DOS, функция 68h Завершить файл
Вход:
AH=68h
ВХ - описатель завершаемого файла
Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
AX - код ошибки
Описание.
Эта функция заставляет DOS сбросить (записать на диск) буфера ос-
новной памяти для указанного описателя файла. DOS обычно избегает
обмена с дисками, записывая данные в буфера в основной памяти до
заполнения сектора или закрытия файла. Эта функция заставляет DOS
немедленно записать данные на диск. Это ускоряет операции с базами
данных, позволяя приложению избежать неэффективного закрытия
и повторного открытия файлов.
Версии: DOS 3.3 и выше. В версиях DOS от 2.0 до 3.2 можно использо-
вать функцию DOS 45h, чтобы создать и затем закрыть дубликат.
DOS, функция OAh Ввод строки в буфер
Вход:
AH-OAh
DS:DX - адрес входного буфера (Таблица Б-1)
Таблица Б-1. Формат входного буфера.
Выход:
Буфер содержит введенные данные, в конце - символ CR (ASCII ODh)
DOS, функция OBh Проверка статуса ввода
Вход:
AH-OBh
Выход:
AL=FFh, если символ доступен со стандартного ввода
AL=OOh, если нет доступного символа
Описание.
Проверяет состояние стандартного ввода. При распознавании Ctrl-Break
выполняется INT 23h.
Примечания.
Используется перед функциями Olh, 07h и 08h, чтобы избежать ожида-
ния нажатия клавиши.
Эта функция дает простой неразрушающий способ проверки Ctrl-Break
в процессе длинных вычислений или другой обработки, обычно не тре-
бующей ввода. Это позволяет снимать счет по нажатию Ctrl-Break.
DOS, функция OCh Ввод с очисткой
Вход:
АН-ОСЬ
AL - номер функции ввода DOS:
AL=01h - ввод с клавиатуры
AL=06h - ввод с консоли
AL=°07h - нефильтрующий без эха
AL=08h - ввод без эха
AL=OAh - буферизованный ввод
Описание.
Очищает буфер опережающего ввода стандартного ввода, а затем вызы-
вает функцию ввода, указанную в AL. Это заставляет систему ожидать
ввод очередного символа.
DOS, функция ODh Сброс диска
Вход:
AH=ODh
Описание.
Сбрасывает диск (записывает на диск все файловые буферы). Файл,
размер которого изменился, должен быть предварительно закрыт (при
помощи функций 10h или 3Eh).
DOS, функция OEh Установить текущий диск DOS
Вход:
АН-ОЕЬ
DL - номер диска (0 - А, 1 - В и так далее), который становится теку-
щим
Выход:
AL - общее число дисководов в системе
Описание.
Диск, указанный в DL, становится текущим. Проверка: используется
функция 19h (дать текущий диск). В регистре AL возвращается число
дисководов всех типов, включая жесткие диски и "логические" диски
(как диск В: системе с одним гибким диском).
Примечание.
AL имеет то же значение, что и LASTDRIVE, указанное в файле
CONFIG.SYS, и по умолчанию равно 5.
DOS, функция OFh Открыть файл через FCB
Вход:
AH-OFh
DS:DX - адрес неоткрытого FCB (Таблица Б-2)
Выход:
AL=OOh, если функция выполнена успешно (FCB заполнен)
AL=FFh, если файл не найден или доступ к файлу не разрешен
Описание.
Файл, описываемый неоткрытым FCB, должен существовать в текущем
оглавлении на диске, специфицированном в FCB (0 - текущий, 1 - А,
2 - В и так далее). Если файл не существует, возвращается AL=OFFh.
Файл открывается в режиме совместимости. Если поле "Номер диска"
в FCB равно нулю в момент вызова, то оно заполняется номером теку-
щего дисковода (1 -А,2-Ви так далее). Поле FCB "Номер текущего
блока" устанавливается в ноль. Поле FCB "Размер логической записи"
устанавливается в 80h. Поля даты и размера файла в FCB устанавлива-
ются из оглавления.
DOS, функция OOh Завершить программу
Вход:
AH=OOh
CS - сегмент PSP завершающегося процесса
Описание.
Передает управление на вектор завершения в PSP (выходит в родитель-
ский процесс). Идентична функции INT 20h (Terminate). Регистр CS
должен указывать на PSP. Восстанавливает векторы прерываний DOS
22h-24h (Завершение, Ctrl-Break и Критическая ошибка), устанавливая
значения, сохраненные в родительском PSP. Выполняет сброс файло-
вых буферов. Файлы должны быть предварительно закрыты, если их
длина изменилась.
Примечание.
Данная функция не рекомендуется к использованию. Для выхода
из программы лучше использовать функцию DOS 4Ch.
DOS, функция ЗОИ Получить номер версии DOS
Вход:
AH=30h
Выход:
AL - старший номер версии
АН - младший номер версии
BL:CX - 24-битный серийный номер (большинство версий не поддер-
живают этот параметр)
\
Описание.
Возвращает в АХ значение текущего номера версии DOS. Например,
для DOS 3.20 в AL возвращается 03h, в АН - 14h.
Примечание.
Если в AL возвращается OOh, можно предполагать, что работает DOS
более ранней версии, чем DOS 2.0.
Версии: DOS 2.00 и выше.
DPMI, функция 0001k Освободить дескриптор из таблицы LDT
Вход:
AX=0001h
ВХ - селектор дескриптора, который нужно освободить
Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
Описание.
Освобождает дескриптор из таблицы LDT, созданный функцией OOOOh.
Примечания.
Если нужно освободить несколько дескрипторов, то эту функцию нуж-
но вызвать для каждого из них в отдельности. С помощью этой функ-
ции программа может освободить только те дескрипторы, которые были
выделены данной программой.
DPMI, функция 0002Н Преобразовать сегмент в дескриптор
Вход:
AX=0002h
ВХ - сегментный адрес реального режима
Выход:
CF=0, если функция выполнена успешно
AX - селектор дескриптора для сегмента реального режима
CF=1, если при выполнении функции возникли ошибки
Описание.
Эта функция преобразует сегмент реального режима в дескриптор для
адресации к этому сегменту в защищенном режиме.
Примечания.
Если эта функция неоднократно вызывается для одного и того же сег-
мента реального режима, то она возвращает один и тот же селектор.
Дескрипторы, созданные этой функцией, не могут быть модифицирова-
ны или удалены.
DPMI, функция 0003k Получить приращение до следующего селектора
Вход:
AX=0003h
Выход:
CF=0 (эта функция всегда выполняется успешно)
AX - значение приращения до следующего селектора
Описание.
Возвращает приращение для вычисления следующего селектора в тех
функциях, которые могут возвращать более одного селектора.
DPMI, функция 0006h Получить базовый адрес сегмента по селектору
Вход:
АХ-ОООбЬ
ВХ - селектор
Выход:
CF=0, если функция выполнена успешно
CX:DX - 32-разрядный линейный базовый адрес указанного сегмента
CF=1, если при выполнении функции возникли ошибки
Описание.
Возвращает 32-разрядный базовый адрес сегмента по его селектору.
DPMI, функция 0007k Установить базовый адрес сегмента
Вход:
AX-OOOTh
ВХ - селектор сегмента, для которого нужно установить базовый адрес
CX:DX - 32-разрядный линейный базовый адрес
Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
Описание.
Устанавливает 32-разрядный линейный базовый адрес указанного сег-
мента.
Примечания.
С помощью этой функции можно изменить базовый адрес только тех
сегментов, которые выделены функцией OOOOh. Старшие 8 бит (регистр
СН) базового адреса игнорируются в 16-разрядных версиях DPMI.
DPMI, функция 0008k Установить предел сегмента
Вход:
AX°0008h
ВХ - селектор сегмента, для которого надо установить предел
CX:DX - 32-разрядный предел сегмента
Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
Описание.
Устанавливает 32-разрядный предел указанного сегмента.
Примечания.
С помощью этой функции можно изменить только предел сегментов,
выделенных функцией OOOOh. В 16-разрядных версиях DPMI предел
должен быть не более FFFFh. Если предел более 1Мбайт, то базовый
адрес сегмента должен быть выровнен по границе страницы (lOOOh),
а также младшие 12 бит предела должны быть равны нулю.
DPMI, функция 0009k Установить права доступа в дескрипторе
Вход:
AX-OOOQh
ВХ - селектор сегмента, для которого надо установить права доступа
CL - значение поля прав доступа
CF[ - расширенное значение поля прав доступа для i80386 и выше
(только в 32-разрядных DPMI)
Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
Описание.
Устанавливает поле прав доступа в дескрипторе.
Примечания.
С помощью этой функции можно изменить только предел сегментов,
выделенных функцией OOOOh.
DPMI, функция 0100k Выделить блок памяти DOS
Вход:
AX=0100h
ВХ - количество параграфов (по 16 байт)
Выход:
CF=0, если функция выполнена успешно
AX - сегментный адрес выделенного блока памяти
DX - селектор выделенного блока памяти
CF=1, если при выполнении функции возникли ошибки
AX - код ошибки DOS
ВХ - размер наибольшего доступного блока (в параграфах)
Описание.
Данная функция выделяет память из пула свободной памяти DOS.
Примечания.
Созданный этой функцией дескриптор не может быть изменен или
освобожден. В случае, если запрашивается памяти больше, чем 64Кбайт,
функция выделяет несколько дескрипторов. Для доступа к следующему
можно пользоваться функцией ОООЗЬ.
DPMI, функция 0101k Освободить блок памяти DOS
Вход:
AX°0101h
DX - селектор выделенного блока памяти
Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
AX - код ошибки DOS
Описание.
Данная функция освобождает память DOS, выделенную функцией
OlOOh.
Примечания.
Все выделенные при выделении памяти дескрипторы освобождаются.
DPMI, функция 0102h Изменить размер блока памяти DOS
Вход:
АХ-0102П
ВХ - необходимый размер блока памяти
DX - селектор блока памяти
Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
AX - код ошибки DOS
ВХ - размер наибольшего доступного блока (в параграфах)
Описание.
Данная функция изменяет размер памяти DOS, выделенной функцией
01 ООН.
Примечания.
Увеличение размера блока памяти часто может привести к ошибке, если
после данного блока был выделен другой блок, если размер увеличива-
емого блока больше 64Кбайт или если после дескриптора этого блока
памяти был выделен другой дескриптор.
DPMI, функция 0200Н Получить вектор прерывания реального режима
Вход:
AX=0200h
BL - номер прерывания
Выход:
CF-0
CX:DX - сегмент:смещение вектора прерывания реального режима
Описание.
Данная функция возвращает вектор прерывания реального режима.
Примечания.
Значение, возвращаемое в СХ - сегмент, не селектор. Попытки исполь-
зовать его как селектор приведут к исключению общей защиты памяти.
DPMI, функция 0201k Установить вектор прерывания реального режима
Вход:
AX°0201h
BL - номер прерывания
CX:DX - сегмент:смещение вектора прерывания реального режима
Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
Описание.
Данная функция устанавливает вектор прерывания реального режима.
Примечания.
Значение в СХ должно быть сегментом, а не селектором.