Прерывания DOS Деменёв Александр


INT 20H - Завершить программу
INT 21H - Сервис DOS
INT 21H - Сервис DOS Fn 00H - Завершить программу
INT 21H - Сервис DOS Fn 01H - Ввод с клавиатуры
INT 21H - Сервис DOS Fn 02H - Вывод на дисплей
INT 21H - Сервис DOS Fn 03H - Вспомогательный ввод
INT 21H - Сервис DOS Fn 04H - Вспомогательный вывод
INT 21H - Сервис DOS Fn 05H - Вывод на принтер
INT 21H - Сервис DOS Fn 06H - Консольный ввод-вывод
INT 21H - Сервис DOS Fn 07H - Нефильтрующий консольный ввод без эха
INT 21H - Сервис DOS Fn 08H - Консольный ввод без эха
INT 21H - Сервис DOS Fn 09H - Выдать строку на дисплей
INT 21H - Сервис DOS Fn 0aH - Ввод строки в буфер
INT 21H - Сервис DOS Fn 0bH - Проверить статус ввода
INT 21H - Сервис DOS Fn 0cH - Ввод с очисткой
INT 21H - Сервис DOS Fn 0dH - Сброс диска
INT 21H - Сервис DOS Fn 0eH - Установить текущий диск DOS
INT 21H - Сервис DOS Fn 0fH - Открыть файл через FCB
INT 21H - Сервис DOS Fn 10H - Закрыть файл через FCB
INT 21H - Сервис DOS Fn 11H - Найти 1-й совпадающий файл через FCB
INT 21H - Сервис DOS Fn 12H - Найти следующий совпадающий файл через FCB
INT 21H - Сервис DOS Fn 13H - Удалить файл через FCB
INT 21H - Сервис DOS Fn 14H - Читать последовательный файл через FCB
INT 21H - Сервис DOS Fn 15H - Писать последовательный файл через FCB
INT 21H - Сервис DOS Fn 16H - Создать файл через FCB
INT 21H - Сервис DOS Fn 17H - Переименовать файл через FCB
INT 21H - Сервис DOS Fn 19H - Дать текущий диск DOS
INT 21H - Сервис DOS Fn 1aH - Установить адрес DTA
INT 21H - Сервис DOS Fn 1bH - Дать информацию FAT текущий диск
INT 21H - Сервис DOS Fn 1cH - Дать информацию FAT любой диск
INT 21H - Сервис DOS Fn 21H - Читать произвольную запись файла
INT 21H - Сервис DOS Fn 22H - Писать произвольную запись файла
INT 21H - Сервис DOS Fn 23H - Дать размер файла через FCB
INT 21H - Сервис DOS Fn 24H - Установить адрес произвольной записи в файле
INT 21H - Сервис DOS Fn 25H - Установить вектор прерывания
INT 21H - Сервис DOS Fn 26H - Построить PSP
INT 21H - Сервис DOS Fn 27H - Читать произвольный блок файла
INT 21H - Сервис DOS Fn 28H - Писать произвольный блок файла
INT 21H - Сервис DOS Fn 29H - Разобрать имя файла
INT 21H - Сервис DOS Fn 2aH - Дать системную дату
INT 21H - Сервис DOS Fn 2bH - Установить системную дату
INT 21H - Сервис DOS Fn 2cH - Дать время DOS
INT 21H - Сервис DOS Fn 2dH - Установить время DOS
INT 21H - Сервис DOS Fn 2eH - Установить-сбросить переключатель верификации
INT 21H - Сервис DOS Fn 2fH - Дать адрес текущей DTA
INT 21H - Сервис DOS Fn 30H - Дать номер версии DOS
INT 21H - Сервис DOS Fn 31H - Завершиться и остаться резидентным - KEEP
INT 21H - Сервис DOS Fn 32H - Дать информацию DOS о диске
INT 21H - Сервис DOS Fn 33H - Установить или опросить статус Ctrl-Break
INT 21H - Сервис DOS Fn 34H - Адрес статуса реентерабельности DOS
INT 21H - Сервис DOS Fn 35H - Дать вектор прерывания
INT 21H - Сервис DOS Fn 36H - Дать свободную память диска
INT 21H - Сервис DOS Fn 37H - Установить или опросить символ-переключатель
INT 21H - Сервис DOS Fn 38H - Дать или установить информацию о стране
INT 21H - Сервис DOS Fn 39H - Создать новое оглавление -- MKDIR
INT 21H - Сервис DOS Fn 3aH - Удалить оглавление -- RMDIR
INT 21H - Сервис DOS Fn 3bH - Установить умалчиваемое оглавление DOS -- CHDIR
INT 21H - Сервис DOS Fn 3cH - Создать файл через описатель
INT 21H - Сервис DOS Fn 3dH - Открыть описатель файла
INT 21H - Сервис DOS Fn 3eH - Закрыть описатель файла
INT 21H - Сервис DOS Fn 3fH - Читать файл через описатель
INT 21H - Сервис DOS Fn 40H - Писать в файл через описатель
INT 21H - Сервис DOS Fn 41H - Удалить файл
INT 21H - Сервис DOS Fn 42H - Установить указатель файла -- LSEEK
INT 21H - Сервис DOS Fn 43H - Установить или опросить атрибут файла -- CHMOD
INT 21H - Сервис DOS Fn 44H - управление устройством в-в -- IOCTL
INT 21H - Сервис DOS Fn 45H - Дублировать описатель файла -- DUP
INT 21H - Сервис DOS Fn 46H - Переназначить описатель -- FORCDUP
INT 21H - Сервис DOS Fn 47H - Дать умалчиваемое оглавление DOS
INT 21H - Сервис DOS Fn 48H - Распределить память (дать размер памяти)
INT 21H - Сервис DOS Fn 49H - Освободить распределенный блок памяти
INT 21H - Сервис DOS Fn 4aH - Сжать или расширить блок памяти
INT 21H - Сервис DOS Fn 4bH - Выполнить или загрузить программу -- EXEC
INT 21H - Сервис DOS Fn 4cH - Завершить программу -- EXIT
INT 21H - Сервис DOS Fn 4dH - Дать код выхода программы -- WAIT
INT 21H - Сервис DOS Fn 4eH - Найти 1-й совпадающий файл
INT 21H - Сервис DOS Fn 4fH - Найти следующий совпадающий файл
INT 21H - Сервис DOS Fn 54H - Дать переключатель верификации DOS
INT 21H - Сервис DOS Fn 56H - Переименовать или переместить файл
INT 21H - Сервис DOS Fn 57H - Установить или опросить дату или время файла
INT 21H - Сервис DOS Fn 59H - Дать расширенную информацию об ошибке
INT 21H - Сервис DOS Fn 5aH - Создать уникальный временный файл
INT 21H - Сервис DOS Fn 5bH - Создать новый файл
INT 21H - Сервис DOS Fn 5cH - Блокировать или разблокировать доступ к файлу
INT 21H - Сервис DOS Fn 5eH - Разные сетевые функции
INT 21H - Сервис DOS Fn 5fH - Переназначение устройств в сети
INT 21H - Сервис DOS Fn 62H - Дать адрес PSP
INT 22H - Адрес завершения
INT 23H - Адрес выхода по Ctrl-Break
INT 24H - Обработчик критических ошибок
INT 25H или 26H - Прямая дисковая операция чтения или записи
INT 27H - Завершиться, но остаться резидентным
INT 28H - DOS Квант времени DOS (нет в документации)
INT 2eH - Выполнить команду DOS (нет в документации)
INT 2fH - Мультиплексное прерывание

INT 20H - Завершить программу
Это прерывание используется для выхода из программы и возврата управления родительскому процессу (обычно интерпретатору команд DOS - COMMAND.COM). Оно восстанавливает значения управляющих векторов INT 22H INT 23H INT 24H Оно также сбрасывает все файловые буфера (если длина файла изменилась, то файл должен быть предварительно закрыт).

Важно:
Регистр CS должен содержать значение PSP завершающегося процесса. Если ваш CS не равен PSP, вы можете выдать JMP или RET на PSP:0000.

Рекомендуется использовать функцию 4cH Terminate, чтобы избежать трудностей, связанных с неравенством CS и PSP. Она позволяет также задать код выхода. Программы COM-формата обычно выполняются при CS=PSP, так что им можно выдавать INT 20H в любой момент. EXE-программы могут выдавать FAR JMP или FAR RET, чтобы передать управление на PSP:0000, где содержится инструкция INT 20H.



INT 21H - Сервис DOS
Это прерывание служит главным входом большинства функций DOS.

Программа, запрашивающая сервис DOS, должна подготовить всю необходимую информацию в регистрах и управляющих блоках, указать в регистре AH номер желаемой функции DOS и затем вызвать прерывание INT 21H.
.....................................................................................
Функция DOS 00H: завершить программу
Функция DOS 01H: ввод с клавиатуры
Функция DOS 02H: вывод на дисплей
Функция DOS 03H: ввод AUX
Функция DOS 04H: вывод AUX
Функция DOS 05H: вывод на принтер
Функция DOS 06H: Обмен с консолью
Функция DOS 07H: Нефильтрующий консольный ввод без эха
Функция DOS 08H: Консольный ввод без эха
Функция DOS 09H: Выдать строку
Функция DOS 0aH: буферизованный ввод строки
Функция DOS 0bH: проверить статус ввода
Функция DOS 0cH: ввод с очисткой
Функция DOS 0dH: Сбросить диск
Функция DOS 0eH: Выбрать умалчиваемый диск DOS
Функция DOS 0fH: открыть файл через FCB
Функция DOS 10H: Закрыть файл через FCB
Функция DOS 11H: Найти 1-й совпадающий файл через FCB
Функция DOS 12H: Найти следующий совпадающий файл через FCB
Функция DOS 13H: Удалить файл через FCB
Функция DOS 14H: читать последовательный файл через FCB
Функция DOS 15H: писать последовательный файл через FCB
Функция DOS 16H: создать файл через FCB
Функция DOS 17H: Переименовать файл через FCB
Функция DOS 19H: дать умалчиваемый диск DOS
Функция DOS 1aH: установить адрес DTA
Функция DOS 1bH: дать информацию FAT (текущий диск)
Функция DOS 1cH: дать информацию FAT (любой диск)
Функция DOS 21H: читать запись произвольного файла
Функция DOS 22H: писать запись произвольного файла
Функция DOS 23H: дать размер файла через FCB
Функция DOS 24H: установить адрес блока произвольного файла
Функция DOS 25H: установить вектор прерывания
Функция DOS 26H: создать префикс программного сегмента
Функция DOS 27H: читать блок произвольного файла
Функция DOS 28H: писать блок произвольного файла
Функция DOS 29H: Разобрать имя файла
Функция DOS 2aH: дать дату DOS
Функция DOS 2bH: установить дату DOS
Функция DOS 2cH: дать время DOS
Функция DOS 2dH: установить время DOS
Функция DOS 2eH: установить/сбросить переключатель верификации
Функция DOS 2fH: дать текущий DTA
Функция DOS 30H: дать номер версии DOS
Функция DOS 31H: завершиться и остаться резидентным -- KEEP
Функция DOS 32H: дать дисковую информацию DOS (недокументировано)
Функция DOS 33H: установить/опросить уровень контроля прерывания DOS
Функция DOS 34H: адрес статуса реентерабельности DOS
Функция DOS 35H: дать вектор прерывания
Функция DOS 36H: дать свободную память диска
Функция DOS 37H: установить/опросить символ-переключатель (недокументировано)
Функция DOS 38H: дать/установить информацию страны
Функция DOS 39H: создать новое оглавление -- MKDIR
Функция DOS 3aH: Удалить оглавление -- RMDIR
Функция DOS 3bH: установить умалчиваемое оглавление DOS -- CHDIR
Функция DOS 3cH: создать описатель файла
Функция DOS 3dH: открыть описатель файла
Функция DOS 3eH: Закрыть описатель файла
Функция DOS 3fH: читать файл через описатель
Функция DOS 40H: писать в файл через описатель
Функция DOS 41H: Удалить файл
Функция DOS 42H: установить указатель файла -- LSEEK
Функция Функция DOS 43H: установить/опросить атрибут файла -- CHMOD
Функция DOS 44H: управление вводом-выводом устройства -- IOCTL
Функция DOS 45H: Дублировать описатель файла -- DUP
Функция DOS 46H: переназначить описатель -- FORCDUP
Функция DOS 47H: дать умалчиваемое оглавление DOS
Функция DOS 48H: распределить память (дать размер памяти)
Функция DOS 49H: Освободить блок распределенной памяти
Функция DOS 4aH: Сжать или расширить блок памяти
Функция DOS 4bH: выполнить или загрузить программу -- EXEC
Функция DOS 4cH: завершить программу -- EXIT
Функция DOS 4dH: дать код выхода программы -- WAIT
Функция DOS 4eH: Найти 1-й совпадающий файл
Функция DOS 4fH: Найти следующий совпадающий файл
Функция DOS 54H: дать переключатель верификации DOS
Функция DOS 56H: Переименовать/переместить файл
Функция DOS 57H: установить/опросить время/дату файла
Функция DOS 59H: дать расширенную информацию об ошибке
Функция DOS 5aH: создать уникальный временный файл
Функция DOS 5bH: создать новый файл
Функция DOS 5cH: блокировать/разблокировать доступ к файлу
Функция DOS 5eH: различные сетевые функции
Функция DOS 5fH: переназначение устройств в сети
Функция DOS 62H: дать адрес префикса программного сегмента


INT 21H - Сервис DOS Fn 00H - Завершить программу
Вход
AH = 00H
CS = сегмент PSP завершающегося процесса
Выход
нет = (неприменим)
Описание:
передает управление на вектор завершения в PSP (выходит в родительский процесс). Идентична функции INT 20H Terminate. регистр CS должен указывать на PSP. восстанавливает векторы прерываний DOS 22H-24H (завершение, Ctrl-Break и Критическая ошибка), устанавливая значения, сохраненные в родительском PSP. выполняет сброс файловых буферов. файлы должны быть предварительно закрыты, если их длина изменилась.

Замечание:
Проще и более аккуратно - использовать функцию DOS Fn 4cH Exit.



INT 21H - Сервис DOS Fn 01H - Ввод с клавиатуры
Вход
AH = 02H
Выход
AL = символ, полученный из стандартного ввода
Описание:
Считывает (ожидает) символ со стандартного входного устройства. Отображает этот символ на стандартное выходное устройство (эхо). при распознавании Ctrl-Break выполняется INT 23H.

Замечание:
ввод расширенных клавиш ASCII (F1-F12, PgUp, курсор и т.п.) требует двух обращений к этой функции. первый вызов возвращает AL=0. Второй вызов возвращает в AL расширенный код ASCII.




INT 21H - Сервис DOS Fn 02H - Вывод на дисплей
Вход
AH = 02H
DL = символ, выводимый на стандартный вывод
Выход
нет =
Описание:
Посылает символ из DL на стандартный вывод. обрабатывает символ Backspace (ASCII 8), перемещая курсор влево на одну позицию и оставляя его в новой позиции. при обнаружении Ctrl-Break выполняется INT 23H.




INT 21H - Сервис DOS Fn 03H - Вспомогательный ввод
Вход
AH = 03H
Выход
AL = символ, полученный со стандартного вспомогательного устр-ва
Описание:
Считывает (ожидает) символ со стандартного вспомогательного устройства, COM1 или AUX и возвращает этот символ в AL.

Замечание:
ввод не буферизуется и должен опрашиваться (не управляется прерываниями). при запуске DOS порт AUX (COM1) инициализируется так: 2400 бод, без проверки на четность, 1 стоп-бит, 8-битовые слова. Команда DOS MODE используется для установки иных характеристик.



INT 21H - Сервис DOS Fn 04H - Вспомогательный вывод
Вход
AH = 04H
DL = символ, записываемый на стандартное вспомогательное устр-во
Выход
нет =
Описание:
Посылает символ в DL на стандартное вспомогательное устройство, COM1 или AUX.



INT 21H - Сервис DOS Fn 05H - Вывод на принтер
Вход
AH = 05H
DL = символ, записываемый на стандартный принтер
Выход
нет =
Описание:
Посылает символ в DL на стандартное устройство принтера, обычно LPT1.

Замечание:
команда DOS MODE может перенаправить этот вывод в последовательный порт.


INT 21H - Сервис DOS Fn 06H - Консольный ввод-вывод
Вход
AH = 06H
DL = символ (от 0 до 0feH), посылаемый на стандартный вывод
= 0ffH запрос ввода со стандартного ввода
Выход
ZF = Сброшен (NZ), если символ готов ҐҐЈҐ при запросе ввода
Описание:
при DL = 0ffH выполняет ввод с консоли "без ожидания", возвращая взведенный флаг нуля (ZF), если на консоли нет готового символа. если символ готов, сбрасывает флаг ZF (NZ) и возвращает считанный символ в AL. если DL не равен 0ffH, то DL направляется на стандартный вывод.

Замечание:
Не проверяет Ctrl-Break. вызывайте дважды для расширенного ASCII.



INT 21H - Сервис DOS Fn 07H - Нефильтрующий консольный ввод без эха
Вход
AH = 07H
Выход
AL = символ, полученный через стандартный ввод
Описание:
Считывает (ожидает) символ со стандартного входного устройства и возвращает этот символ в AL. Не фильтрует: Не проверяет на Ctrl-Break, backspace и т.п.

Замечаниея:
вызывайте дважды для ввода расширенного символа ASCII. используйте Fn 0bH для проверки статуса (если не хотите ожидать нажатия клавиши).



INT 21H - Сервис DOS Fn 08H - Консольный ввод без эха
Вход
AH = 08H
Выход
AL = символ, полученный через стандартный ввод
Описание:
Считывает (ожидает) символ со стандартного входного устройства и возвращает этот символ в AL. при обнаружении Ctrl-Break выполняется прерывание INT 23H.

Замечание:
вызывайте дважды для ввода расширенного символа ASCII.



INT 21H - Сервис DOS Fn 09H - Выдать строку на дисплей
Вход
AH = 09H
DS:DX = адрес строки, заканчивающейся символом '$' (ASCII 24H)
Выход
нет =
Описание:
строка, исключая завершающий ее символ '$', посылается на стандартный вывод. символы Backspace обрабатываются как в функции 02H Display Char. обычно, чтобы перейти на новую строку, включают в текст пару CR/LF (ASCII 13H и ASCII 0aH). строки, содержащие '$', можно выдать через 40H Write Handle (BX=0).




INT 21H - Сервис DOS Fn 0aH - Ввод строки в буфер
Вход
AH = 0aH
DS:DX = адрес входного буфера (смотри ниже)
Выход
нет = буфер содержит ввод, заканчивающийся символом CR (ASCII 0dH)
Описание:
при входе буфер по адресу DS:DX должен быть оформлен так:

+---+---+---+---+---+---+- - -
¦max¦ ? ¦ ? ? ? ? ? MAX - максимально допустимая
+---+---+---+---+---+---+ - - длина ввода (от 1 до 254)
при выходе буфер заполнен данными следующим образом:
+---+---+---+---+---+---+- - -
¦max¦len¦ T E X T 0dH LEN - действительная длина данных
+---+---+---+---+---+---+ - - без завершающего CR (здесь - 04H).

символы считываются со стандартного ввода вплоть до CR (ASCII 0dH) или до достижения длины MAX-1. если достигнут MAX-1, включается консольный звонок для каждого очередного символа, пока не будет введен возврат каретки CR (нажатие Enter).

Второй байт буфера заполняется действительной длиной введенной строки, не считая завершающего CR. последний символ в буфере - всегда CR (который не засчитан в байте длины). символы в буфере (включая LEN) в момент вызова используются как "шаблон". В процессе ввода действительны обычные клавиши редакти рования: Esc выдает "\" и начинает с начала, F3 выдает буфер до конца шаблона, F5 выдает "@" и сохраняет текущую строку как шаблон, и т.д. большинство расширенных кодов ASCII игнорируются. при распознавании Ctrl-Break выполняется прерывание INT 23H (буфер остается неизменным).



INT 21H - Сервис DOS Fn 0bH - Проверить статус ввода
Вход
AH = 0bH
Выход
AL = 0ffH, если символ доступен со стандартного ввода
Описание:
проверяет состояние стандартного ввода. при распознавании Ctrl-Break выполняется INT 23H. Замечения: используйте перед функциями 01H 07H и 08H, чтобы избежать ожидания нажатия клавиши.

Эта функция дает простой неразрушающий способ проверки Ctrl-Break в процессе длинных вычислений или другой обработки, обычно не требующей ввода. это позволяет вам снимать счет по нажатию Ctrl-Break.



INT 21H - Сервис DOS Fn 0cH - Ввод с очисткой
Вход
AH = 0cH
AL = номер функции ввода DOS (01H, 06H, 07H, 08H или 0aH)
Выход
нет =
Описание:
Очищает буфер опережающего ввода стандартного ввода, а затем вызывает функцию ввода, указанную в AL. это заставляет систему ожидать ввод очередного символа. следующие значения допустимы в AL: 01H ввод с клавиатуры

06H ввод с консоли
07H Нефильтрующий без эха
08H ввод без эха
0aH буферизованный ввод


INT 21H - Сервис DOS Fn 0dH - Сброс диска
Вход
AH = 0dH
Выход
нет =
Описание:
Сбрасывает (пишет на диск) все файловые буфера. если размер файла изменился, такой файл должен быть предварительно закрыт (при помощи функций 10H или 3eH).



INT 21H - Сервис DOS Fn 0eH - Установить текущий диск DOS
Вход
AH = 0eH
DL = номер диска (0=A, 1=B и т.д.), который становится текущим
Выход
AL = общее число дисководов в системе
Описание:
диск, указанный в DL, становится текущим (умалчиваемым) в DOS. проверка: используйте функцию 19H "дать текущий" для проверки. В регистре AL возвращается число дисководов всех типов, включая твердые диски и "логические" диски (как B: в 1-floppy системе).

Версии:
DOS 3.0+ AL имеет то же значение, что и значение LASTDRIVE, указанное в файле CONFIG.SYS, и по умолчанию равно 5.



INT 21H - Сервис DOS Fn 0fH - Открыть файл через FCB
Вход
AH = 0fH
DS:DX = адрес неоткрытого FCB
Выход
AL = 0 если файл открыт без ошибок (и FCB заполнен)
Описание:
файл, описываемый неоткрытым FCB, должен существовать в текущем оглавлении на диске, специфицированном в FCB (0=текущий, 1=A, 2=B, и т.д.). если файл не существует, возвращается AL=0ffH. файл открывается в режиме совместимости. если поле Drv в FCB равно 0 в момент вызова, то оно заполняется номером текущего дисковода (1=A, 2=B, и т.д.). Поле FCB CurBlk устанавливается в 0. Поле FCB RecSize устанавливается в 80H. Поля даты и размера файла в FCB устанавливаются из оглавления.

Замечание:
функции DOS 2.0+, ориентированные на номер файла (handle), ГОРАЗДО удобнее в работе.



INT 21H - Сервис DOS Fn 10H - Закрыть файл через FCB
Вход
AH = 10H
DS:DX = адрес открытого FCB
Выход
AL = 0 если файл закрыт без ошибок
Описание:
файл должен находиться на своем первоначальном месте в текущем оглавлении диска, на котором он был открыт. если файл найден, оглавление обновляется, файловые буфера сбрасываются, и возвращается AL=00H. если файл не найден, оглавление не обновляется, происходит масса малоприятных вещей, и в конце концов возвращается AL=0ffH.



INT 21H - Сервис DOS Fn 11H - Найти 1-й совпадающий файл через FCB
Вход
AH = 11H
DS:DX = адрес неоткрытого FCB (имя файла может содержать '?')
Выход
AL = 0 если подходящее имя найдено (и DTA заполнена)
Описание:
В текущем оглавлении DOS ищется имя файла, соответствующее шаблону, заданному в FCB по адресу DS:DX. при неудаче возвращается AL=0ffH. если имя найдено, AL очищается, в 1-й байт DTA помещается номер дисковода (A=1, B=2, и т.д.), а в следующие 32 байта помещается элемент оглавления для найденного файла.

можно использовать при вызове расширенный FCB, чтобы выбирать файлы с указанными атрибутами. В этом случае в DTA помещаются байт 0ffH, 7 байт нулей, номер диска и элемент оглавления. В любом случае должен быть предоставлен корректный неоткрытый FCB. функция 12H Find Next FCB используется для поиска следующих имен.

Замечания:
если вы намереваетесь искать последующие файлы, не выполняйте никаких операций в/в с найденным файлом. Скопируйте FCB куда-нибудь в другое место, прежде чем открывать его. функция DOS 2.0+ 4eh "Найти 1-й файл" легче в использовании; она поддерживает обычный формат d:\путь\имяфайла.



INT 21H - Сервис DOS Fn 12H - Найти следующий совпадающий файл через FCB
Вход
AH = 12H
DS:DX = адрес неоткрытого FCB (имя файла может содержать '?')
Выход
AL = 0 если подходящее имя файла найдено (и DTA заполнена)
Описание:
используется после вызова 11H "Найти 1-й FCB" с обобщенным именем файла. каждый последующий вызов заполняет DTA очередным подходящим элементом оглавления и возвращает AL=00H. если подходящих имен больше нет, возвращается AL=0ffH. резервируемая область в FCB сохраняет информацию, необходимую для продолжения поиска. Поэтому не открывайте FCB между вызовами.



INT 21H - Сервис DOS Fn 13H - Удалить файл через FCB
Вход
AH = 13H
DS:DX = адрес неоткрытого FCB (имя файла может содержать '?')
Выход
AL = 0 если файл удален
Описание:
Эта функция удаляет все подходящие файлы в текущем оглавлении указанного диска согласно спецификации в FCB. если подходящих файлов не найдено, или если доступ отвергнут (как при попытке удалить файл с атрибутом Read-Only), функция возвращает в регистре AL значение 0ffH.



INT 21H - Сервис DOS Fn 14H - Читать последовательный файл через FCB
Вход
AH = 14H
DS:DX = адрес открытого FCB
Выход
AL = 0 если чтение было успешным и DTA содержит данные
AL = 1 если достигнут конец файла (EOF) и данные не были считаны
AL = 2 если DTA+ FCB RecSiz выходит за сегмент (чтения не было)
AL = 3 если EOF и считана усеченная запись (дополнена нулями)
Описание:
Читает FCB RecSize байт с адреса в файле, специфицированного полями CurBlk и CurRec, в DTA. затем соответственно увеличивает значения этих полей в FCB.

перед началом последовательной обработки файла сбрасывайте CurRec в 0, так как функция 0fH Open FCB не инициализирует это поле.



INT 21H - Сервис DOS Fn 15H - Писать последовательный файл через FCB
Вход
AH = 15H
DS:DX = адрес открытого FCB
Выход
AL = 0 если запись была успешной
AL = 1 если ошибка переполнения диска (данные не записаны)
AL = 2 если DTA+ FCB RecSize выходит за сегмент (записи не было)
Описание:
Пишет FCB RecSize байт из DTA в файл по адресу, специфицированному полями CurBlk и CurRec. затем соответственно увеличивает значения этих полей в FCB.

перед началом последовательной обработки файла сбрасывайте значение CurRec в 0, ибо функция 0fH Open FCB не инициализирует это поле.

Замечание:
DOS буферизует данные, записывая полный сектор за один раз.



INT 21H - Сервис DOS Fn 16H - Создать файл через FCB
Вход
AH = 16H
DS:DX = адрес неоткрытого FCB
Выход
AL = 0 если файл создан без ошибок (и FCB заполнен)
Описание:
файл, специфицированный неоткрытым FCB, создается в текущем оглавлении на диске, указанном в FCB (0=текущий, 1=A, и т.д.). FCB заполняется аналогично функции 0fH Open FCB. если файл существует в момент вызова, его элемент оглавления используется для создаваемого файла, а длина файла сбрасывается в 0.

Замечание:
Handle-ориентированные функции DOS 2.0+ гораздо удобнее в работе.



INT 21H - Сервис DOS Fn 17H - Переименовать файл через FCB
Вход
AH = 17H
DS:DX = адрес FCB специального формата
Выход
AL = 0 если файл переименован успешно
Описание:
Переименовывает файл в текущем умалчиваемом оглавлении. используйте следующую структуру FCB для этой функции:




каждое из имен может содержать обобщенные символы "?":

В старом имени обобщенные символы приводят к поиску и переименованию всех подходящих файлов в текущем оглавлении.

В новом имени символ "?" означает, что в этой позиции следует оставить тот же символ, что в аналогичной позиции старого имени.

Замечание:
Эта функция позволяет переименовать само оглавление, используя расширенный FCB с подходящим атрибутом для "старого имени".


INT 21H - Сервис DOS Fn 19H - Дать текущий диск DOS
Вход
AH = 19H
Выход
AL = номер текущего умалчиваемого диска (0=A, 1=B, и т.д.)
Описание:
возвращает номер дисковода текущего умалчивемого диска DOS.


INT 21H - Сервис DOS Fn 1aH - Установить адрес DTA
Вход
AH = 1aH
DS:DX = адрес для DTA
Выход
нет =
Описание:
устанавливает адрес DTA.

все FCB-ориентированные операции работают с DTA.
DOS не позволяет операциям в/в пересекать границу сегмента.
функции поиска: 11H 12H 4eH и 4fH помещают данные в DTA.
DTA глобальна, поэтому будьте осторожны, назначая ее в рекурсивной или реентерабельной процедуре.
при запуске программы ее DTA устанавливается по смещению 80H относительно PSP.


INT 21H - Сервис DOS Fn 1bH - Дать информацию FAT текущий диск
Вход
AH = 1bH
Выход
DS:BX = адрес байта FAT ID (отражающего тип диска)
DX = всего кластеров (единиц распределения) на диске
AL = секторов на кластер
CX = байт на сектор
Описание:
возвращает информацию о размере и типе умалчиваемого диска. размер диска в байтах = (DX * AL * CX). Ищите свободную память функциями 36h Disk Free или 32h Disk Info.

Версии:
DOS 1.x держит FAT в памяти и возвращает DS:BX => FAT. DOS 2.0+ может держать в памяти лишь порцию всей FAT.

Предупреждение:
Эта функция изменяет содержимое регистра DS.



INT 21H - Сервис DOS Fn 1cH - Дать информацию FAT любой диск
Вход
AH = 1cH
DL = номер диска (0=текущий, 1=A, и т.д.)
Выход
DS:BX = адрес байта FAT ID (отражающего тип диска)
DX = всего кластеров (единиц распределения) на диске
AL = секторов на кластер
CX = байт на сектор
Описание:
Аналогична функции 1bH Get FAT Cur, с той разницей, что регистр DL указывает диск, для которого вы хотите получить информацию.

Версии:
Недоступна для DOS 1.x.



INT 21H - Сервис DOS Fn 21H - Читать произвольную запись файла
Вход
AH = 21H
DS:DX = адрес открытого FCB
Выход
AL = 0 если чтение было успешным и DTA заполнена данными
AL = 1 если достигнут конец файла (EOF) и чтения не было
AL = 2 если DTA + FCB RecSize выходит за сегмент (чтения нет)
AL = 3 встречен EOF и считана усеченная запись (дополнена нулями)
Описание:
приводит поля FCB CurBlk и CurRec в соответствие с RandomRec, затем читает RecSize байт по указанному адресу в файле, помещая считанные данные в DTA.

Поле RecSize в момент вызова должно содержать длину записи, а поле RandomRec в FCB - номер требуемой записи.



INT 21H - Сервис DOS Fn 22H - Писать произвольную запись файла
Вход
AH = 22H
DS:DX = адрес открытого FCB
Выход
AL = 0 если запись была успешной
AL = 1 при переполнении диска
AL = 2 если DTA + FCB RecSize выходит за сегмент (нет записи)
Описание:
приводит поля FCB CurBlk и CurRec в соответствие с RandomRec, затем пишет RecSize байт из DTA на диск по указанному адресу в файле. В момент вызова поле RecSiz должно содержать длину записи, а поле RandomRec в FCB - номер требуемой записи.


INT 21H - Сервис DOS Fn 23H - Дать размер файла через FCB
Вход
AH = 23H
DS:DX = адрес неоткрытого FCB
Выход
AL = 0 если файл найден
Описание:
устанавливает поле RandomRec в FCB равным числу записей размера RecSize байт, содержащихся в файле. значение RecSize должно быть задано в момент вызова. при RecSize, равном 1, RandomRec возвращает 4-байтовый размер файла в байтах. Вам может оказаться проще определить размер файла через функцию 3dH Open Handle с последующей 42H Lseek Handle (при AL=2).



INT 21H - Сервис DOS Fn 24H - Установить адрес произвольной записи в файле
Вход
AH = 24H
DS:DX = адрес открытого FCB
Выход
нет =
Описание:
устанавливает поле RandomRec в FCB на файловый адрес, соответствующий значениям полей CurBlk и CurRec.



INT 21H - Сервис DOS Fn 25H - Установить вектор прерывания
Вход
AH = 25H
AL = номер прерывания
DS:DX = вектор прерывания: адрес программы обработки прерывания
Выход
нет =
Описание:
устанавливает значение элемента таблицы векторов прерываний для прерывания с номером AL равным DS:DX. это равносильно записи 4-байтового адреса в 0000:(AL*4), но, в отличие от прямой записи, DOS здесь знает, что вы делаете, и гарантирует, что в момент записи прерывания будут заблокированы.

Предупреждение:
Не забудьте восстановить DS (если необходимо) после этого вызова.



INT 21H - Сервис DOS Fn 26H - Построить PSP
Вход
AH = 26H
DX = адрес сегмента (параграфа) для нового PSP
CS = сегмент PSP, используемого как шаблон для нового PSP
Выход
нет =
Описание:
устанавливает PSP для порождаемого процесса по адресу DX:0000.

текущий PSP (100H байт, начиная с CS:0), копируется в DX:0
поле MemTop соответственно корректируется
векторы Terminate, Ctrl-Break и Critical Error копируются в PSP из векторов прерываний INT 22H, INT 23H и INT 24H после этого вы можете загрузить программу с диска и передать ей управление посредством FAR JMP.
Замечание:
если вы перехватываете INT 21H, позаботьтесь о помещении в стек корректного CS:IP. Еще лучше использовать функцию 4cH (EXEC).


INT 21H - Сервис DOS Fn 27H - Читать произвольный блок файла
Вход
AH = 27H
DS:DX = адрес открытого FCB
CX = число считываемых записей
Выход
AL = 0 если чтение успешно и DTA заполнена данными
AL = 1 если достигнут конец файла (EOF) и данные не считаны
AL = 2 если DTA + FCB (RecSize * CX) выходит за границу сегмента
AL = 3 если EOF и считана усеченная порция (дополнена нулями)
CX = действительное число считанных записей
Описание:
Читает несколько записей из файла, начиная с файлового адреса, специфицированного полем RandomRec в FCB. Помещает данные в память, начиная с адреса DTA. число считанных байт = FCB RecSize*CX. Поля RandomRec, CurBlk и CurRec корректируются, чтобы указывать на следующую запись (первую запись за прочитанными).




INT 21H - Сервис DOS Fn 28H - Писать произвольный блок файла
Вход
AH = 28H
DS:DX = адрес открытого FCB
CX = число записываемых записей (если CX=0, уст. размер файла)
Выход
AL = 0 если запись успешна
AL = 1 при переполнении диска
AL = 2 если DTA + FCB (RecSize * CX) выходит за границу сегмента
CX = действительное число записанных записей
Описание:
записывает несколько записей в файл, начиная с файлового адреса, специфицированного полем RandomRec в FCB. данные берутся из памяти, начиная с адреса DTA. число записываемых байт=(RecSize * CX). если CX=0 при вызове, то размер файла усекается или расширяется до величины RandomRec * RecSize (никакие данные не записываются).



INT 21H - Сервис DOS Fn 29H - Разобрать имя файла
Вход
AH = 29H
DS:SI = адрес исходной текстовой строки для разбора
ES:DI = адрес буфера для результирующего неоткрытого FCB
AL = битовые флаги, указывающие опции разбора (см. ниже)
Выход
AL = 0 если результирующий FCB не содержит обобщенных символов
AL = 1 если результирующий FCB содержит обобщенные символы
AL = 0ffH если неверно обозначение диска в имени файла
DS:SI = изменен: указывает на символ сразу вслед за именем файла
ES:DI = не изменен: указывает на неоткрытый FCB
Описание:
создает неоткрытый FCB из строки текста или параметра команды. текст, начиная с DS:SI, анализируется как имя файла в формате D:FILENAME.EXT, и буфер по адресу ES:DI заполняется как соответственно форматированный FCB.

Эта функция НЕПРИМЕНИМА, если текстовая строка содержит путь. обычно она используется для перевода в верхний регистр и удаления точки из имени файла, введенного с клавиатуры. при этом '*' переводится в ряд '?'. Эта функция позволяет предусмотреть умолчание в целевом FCB (например, заранее заполнить расширение = "WKS").

Способ разбора определяется битовыми флагами в AL:



INT 21H - Сервис DOS Fn 2aH - Дать системную дату
Вход
AH = 2aH
Выход
AL = день недели (0=Вск, 1=Пнд,...6=Суб) DOS 3.0+
CX = год (1980 до 2099)
DH = месяц (1 до 12)
DL = день (1 до 31)
Описание:
возвращает текущую дату, как она известна системе.

Версии:
DOS 2.x не гарантирует возврата в AL значения дня; все версии 1.0+ возвращают правильный день недели. версии до 2.1 имеют проблемы с переходом даты.



INT 21H - Сервис DOS Fn 2bH - Установить системную дату
Вход
AH = 2bH
CX = год (1980 до 2099)
DH = месяц (1 до 12)
DL = день (1 до 31)
Выход
AL = 0 если дата корректна
Описание:
устанавливает системную дату DOS.



INT 21H - Сервис DOS Fn 2cH - Дать время DOS
Вход
AH = 2cH
Выход
CH = часы (0 до 23)
CL = минуты (0 до 59)
DH = секунды (0 до 59)
DL = сотые доли секунды (0 до 99)
Описание:
возвращает текущее время, как оно известно системе.

Замечание:
Поскольку системные часы имеют частоту 18.2 тиков в секунду (интервал 55мс), DL имеет точность 0.04 сек.



INT 21H - Сервис DOS Fn 2dH - Установить время DOS
Вход
AH = 2dH
CH = часы (0 до 23)
CL = минуты (0 до 59)
DH = секунды (0 до 59)
DL = сотые доли секунды (0 до 99)
Выход
AL = 0 если время корректно
Описание:
устанавливает системное время DOS.



INT 21H - Сервис DOS Fn 2eH - Установить-сбросить переключатель верификации
Вход
AH = 2eH
AL = 0 отключить верификацию
= 1 включить верификацию
Выход
нет =
Описание:
устанавливает, должна ли DOS верифицировать (считывать обратно) каждый сектор, записываемый на диск. это замедляет операции записи на диск, но гарантирует максимальную надежность записи. функция 56H Get Verify возвращает текущий статус верификации DOS.



INT 21H - Сервис DOS Fn 2fH - Дать адрес текущей DTA
Вход
AH = 2fH
Выход
ES:BX = адрес начала текущей DTA
Описание:
возвращает адрес начала области ввода-вывода (DTA). Поскольку DTA глобальна для всех процессов, в рекурсивной процедуре (например, при проходе по дереву оглавления) может потребоваться сохранить адрес DTA, а впоследствии восстановить его посредством функции 1aH "Уст. DTA".

Замечание:
Эта функция изменяет сегментный регистр ES.



INT 21H - Сервис DOS Fn 30H - Дать номер версии DOS
Вход
AH = 30H
Выход
AL = старший номер версии
AH = младший номер версии
BX,CX = 0000H DOS 3.0+
Описание:
возвращает в AX значение текущего номера версии DOS. например, для DOS 3.2, в AL возвращается 3, в AH - 2.

Замечание:
если в AL возвращается 0, можно предполагать, что работает DOS более ранней версии, чем DOS 2.0.

Версии:
DOS 2.x не гарантирует очистки регистров CX и BX.



INT 21H - Сервис DOS Fn 31H - Завершиться и остаться резидентным - KEEP
Вход
AH = 31H
AL = код выхода
DX = объем памяти, оставляемой резидентной, в параграфах
Выход
нет = (неприменим)
Описание:
выходит в родительский процесс, сохраняя код выхода в AL. код выхода можно получить через функцию 4dH Wait. DOS устанавливает начальное распределение памяти, как специфицировано в DX, и возвращает управление родительскому процессу, оставляя указанную память резидентной (число байт = DX * 16). Эта функция перекрывает функцию INT 27H, которая не возвращает код выхода и неспособна установить резидентную программу, большую 64K.



INT 21H - Сервис DOS Fn 32H - Дать информацию DOS о диске
Вход
AH = 32H НЕТ В ДОКУМЕНТАЦИИ
DL = номер диска (0=текущий, 1=A, и т.д.)
Выход
AL = 0 если DL задавал корректный диск
FF = 0ffH если диск задан неверно
DS:BX = адрес блока информации диска для запрошенного устройства
Описание:
возвращает блок информации, представляющей интерес для приложений и утилит, выполняющих доступ к диску, поддерживаемый драйверами устройств, на уровне секторов. некоторые дисководы (особенно незагружаемые) функционируют исключительно через свои драйверы устройств. такие диски могут содержать неверную информацию в корневой записи и таблице разделов, что делает очень трудным определение, например, размера корневого оглавления, числа таблиц FAT, и т.п. блок информации диска содержит все данные такого рода в хорошо форматированной структуре. это может быть единственным способом определить адрес драйвера устройства.

Предупреждение:
изменяет сегментный регистр DS. Эта недокументированная функция может измениться в будущих версиях.



INT 21H - Сервис DOS Fn 33H - Установить или опросить статус Ctrl-Break
Вход
AH = 33H
AL = 0 чтобы опросить текущий статус контроля Ctrl-Break
AL = 1 чтобы установить статус контроля Ctrl-Break
DL = требуемый статус (0=OFF, 1=ON) (только при AL=1)
Выход
DL = текущий статус (0=OFF, 1=ON)
Описание:
если AL=0, в DL возвращается текущий статус контроля Ctrl-Break. если AL=1, в DL возвращается новый текущий статус. когда статус ON, DOS проверяет на Ctrl-Break с консоли для большинства функций (исключая 06H и 07H). при обнаружении, выполняется INT 23H (если оно не перехватывется, то это снимает процесс). когда статус OFF, DOS проверяет на Ctrl-Break лишь при операциях стандартного в/в, стандартной печати и стандартных операциях AUX.



INT 21H - Сервис DOS Fn 34H - Адрес статуса реентерабельности DOS
Вход
AH = 34H НЕТ В ДОКУМЕНТАЦИИ
Выход
ES:BX = адрес флага активности DOS
Описание:
Эту недокументированную функцию использует PRINT (фоновый процессор печатного спулинга) в момент его установки, так что он может позднее определить, можно ли использовать файловые функции DOS.

При возврате из этой функции ES:BX содержит адрес внутреннего флага DOS, указывающего, выполняется ли в данный момент какая-либо функция DOS. когда спулеру PRINT требуется открыть файл (или использовать какую-либо функцию DOS), он проверяет этот флаг. если ES:[BX] содержит не 0, фоновая программа (TSR, либо popup) НЕ ДОЛЖНА использовать никаких функций DOS.

Резидентные popup-программы часто активизируются по прерыванию от таймера или клавиатуры. так как это может произойти в любой момент, не исключено, что в этот момент будет выполняться какая-либо функция DOS. если теперь popup вызовет функцию DOS, это разрушит стек DOS и, вероятно, приведет к катастрофической ошибке. Путем проверки этого флага popup может определить, возможны ли вызовы функций DOS.

Это, однако, осложняется тем фактом, что COMMAND.COM и некоторые другие программы проводят большую часть времени, запросив ввод с клавиатуры через функцию 0aH (дать строку). таким образом, флаг почти всегда взведен, и на службу DOS наложено табу.

Вы можете выйти из положения, перехватывая INT 21H и отслеживая вызовы функции 0aH. когда приходит такой запрос, не выполняйте его немедленно. Вместо этого организуйте цикл, в котором с некоторой задержкой вызывайте функцию 0bH (дать статус ввода). Циклите, пока не заметите, что нажата клавиша. после этого можно выйти из цикла и вызвать функцию 0aH. Понятно, что при таком способе всегда существует окно времени, в котором проснувшийся popup может без боязни использовать функции DOS. можно также перехватывать INT 28H, если вы любите рисковать.

Предупреждение:
Эта функция не документирована, и опираться на нее рискованно. большинство popup-программ перехватывают INT 21H и отслеживают статус DOS индивидуально (ибо им и так приходится отслеживать 0aH).



INT 21H - Сервис DOS Fn 35H - Дать вектор прерывания
Вход
AH = 35H
AL = номер прерывания (00H до 0ffH)
Выход
ES:BX = адрес обработчика прерывания
Описание:
возвращает значение вектора прерывания для INT (AL); то есть, загружает в BX 0000:[AL*4], а в ES - 0000:[(AL*4)+2].

Предупреждение:
Эта функция изменяет сегментный регистр ES.



INT 21H - Сервис DOS Fn 36H - Дать свободную память диска
Вход
AH = 36H
DL = номер диска (0=текущий, 1=A, и т.д.)
Выход
AX = 0ffffH, если AL содержал неверный номер диска или число секторов на кластер, если нет ошибок.
BX = доступных кластеров.
CX = байт на сектор.
DX = всего кластеров на диске.
Описание:
возвращает данные для подсчета общей и доступной дисковой памяти. если в AX возвращено 0ffffH, значит, вы задали неверный диск. Иначе, свободная память в байтах = (AX * BX * CX) всего памяти в байтах = (AX * CX * DX)



INT 21H - Сервис DOS Fn 37H - Установить или опросить символ-переключатель
Вход
AH = 37H НЕТ В ДОКУМЕНТАЦИИ
AL = 0 чтобы опросить текущий переключатель
= 1 чтобы установить символ-переключатель
DL = символ-переключатель (при AL=1)
Выход
DL = текущий символ-переключатель DOS
Описание:
устанавливает или опрашивает глобальный переключатель DOS. переключатель (SWITCHAR) - это символ, используемый в командной строке как разделитель опций. умолчание - '/' (например, DIR /w/p), но вы можете изменить SWITCHAR на '-' (напр., DIR -w-p), если хотите, чтобы ваша система производила впечатление системы UNIX. Общепринято опрашивать значение SWITCHAR перед разбором области неформатированных параметров в PSP для выделения опций команды.

Предупреждение:
Эта недокументированная команда может измениться в будущих версиях DOS. Рекомендуется НЕ изменять SWITCHAR, поскольку многие программы не опрашивают его значение при разборе командной строки.



INT 21H - Сервис DOS Fn 38H - Дать или установить информацию о стране
Вход
AH = 38H
DX = 0ffffH чтобы установить код страны равным AL (или BX)
DS:DX = адрес локального буфера для чтения блокa данных страны
AL = 0 чтобы получить данные для текущей страны
= 1 до 0feH чтобы получить данные для указанной страны < 255
= 0ffH чтобы получить данные для кода страны ‡ 255
BX = (если AL=0ffH) 16-битовый код страны
Выход
AX = код ошибки если флаг CF установлен
BX = код страны (если AL=0 при входе)
Описание:
если DX=0ffffH, то текущий код страны (см. ниже) устанавливается равным AL (если AL=0ffH, то код страны устанавливается равным BX). обычно код страны устанавливается в файле CONFIG.SYS. если DX < 0ffffH, то DS:DX адресует буфер пользователя, в который помещается 20-байтовый блок данных страны для указанной страны.

Замечание:
адрес вызова CaseMap можно использовать для определения сопоставляющей (сортирующей) последовательности символов в разных алфавитах.

Версии:
DOS 2.x не позволяет устанавливать код страны. В этом случае параметры вызова проще:

Вход
AL=0
DS:DX = адрес 20-байтового локального буфера
Выход
Пересылает в DS:DX блок данных страны для DOS 2.x
Hex Dec страна Keybrd дата время формат валюты DS
--------------------------------------------------------------------------------
3dH 061 Австралия DD-MM-YY 13:00:00 $1,000.00 ,
20H 032 Бельгия DD/MM/YY 13:00:00 1 000,00 F ;
2 002 Французская Канада YY-MM-DD 13:00:00 1 000,00 $ ;
2dH 045 Дания DD/MM/YY 13.00:00 1.000,00 DKR ;
166H 358 Финляндия DD-MM-YY 13:00:00 1 000,00 MK ;
21H 033 Франция keybFR DD/MM/YY 13:00:00 1 000,00 F ;
31H 049 Германия keybGR DD.MM.YY 13.00.00 DM1.000,00 ;
27H 039 Италия keybIT DD/MM/YY 13:00:00 1.000,Lit. ;
3ccH 972 Израиль DD/MM/YY 13:00:00 Щ 1,000.00 ,
311H 785 Средний Восток DD/MM/YY 01:00:00 PM 1.000,000 $ ;
1fH 031 Нидерланды DD-MM-YY 13:00:00 Я1.000,00 ;
2fH 047 Норвегия DD/MM/YY 13.00.00 KR 1.000,00 ;
15fH 351 португалия DD/MM/YY 13:00:00 1.000$00 ;
22H 034 Испания keybSP DD/MM/YY 13:00:00 1.000,00 Ю ;
2eH 046 Швеция YY-MM-DD 13.00.00 SEK 1.000,00 ;
29H 041 Швейцария DD.MM.YY 13.00.00 Fr 1,000.00 ,
2cH 044 Великобритания keybUK DD-MM-YY 13:00:00 Ь1,000.00 ,
1 001 Соединенные Штаты MM-DD-YY 01:00:00 PM $1,000.00 ,



INT 21H - Сервис DOS Fn 39H - Создать новое оглавление -- MKDIR
Вход
AH = 39H
DS:DX = адрес строки ASCIIZ с именем оглавления
Выход
AX = код ошибки если CF установлен
Описание:
DS:DX указывает на строку ASCIIZ в формате: "d:\путь\имяоглавл",0 если диск и/или корневой путь опущены, то принимаются по умолчанию. Подоглавление создается и связывается с существующим деревом. если флаг CF установлен при возврате, то AX содержит код ошибки, и оглавление не создается.



INT 21H - Сервис DOS Fn 3aH - Удалить оглавление -- RMDIR
Вход
AH = 3aH
DS:DX = адрес строки ASCIIZ с именем оглавления
Выход
AX = код ошибки если CF установлен
Описание:
DS:DX указывает на строку ASCIIZ в формате: "d:\путь\имяоглавл",0. если диск и/или корневой путь опущены, то принимаются по умолчанию. Подоглавление удаляется из структуры оглавления. если флаг CF установлен при возврате, то AX содержит код ошибки, и оглавление не удаляется.

Замечание:
оглавление не должно содержать файлов и подоглавлений и не должно быть связано возможными ограничениями DOS (например, не должно быть задействовано в активных командах JOIN или SUBST).



INT 21H - Сервис DOS Fn 3bH - Установить умалчиваемое оглавление DOS -- CHDIR
Вход
AH = 3bH
DS:DX = адрес строки ASCIIZ с именем оглавления
Выход
AX = код ошибки если CF установлен
Описание:
DS:DX указывает на строку ASCIIZ в формате: "d:\путь\имяоглавл",0. если диск и/или корневой путь опущены, то принимаются по умолчанию. указанное подоглавление для указанного диска становится текущим (умалчиваемым) оглавлением DOS для этого (или текущего) диска. если флаг CF установлен при возврате, то AX содержит код ошибки, и текущее оглавление для выбранного диска не изменяется.



INT 21H - Сервис DOS Fn 3cH - Создать файл через описатель
Вход
AH = 3cH
DS:DX = адрес строки ASCIIZ с именем файла
CX = атрибут файла
Выход
AX = код ошибки если CF установлен и описатель файла если ошибки нет
Описание:
DS:DX указывает на строку ASCIIZ в формате: "d:\путь\имяфайла",0. если диск и/или путь опущены, они принимаются по умолчанию.

файл создается в указанном (или умалчиваемом) оглавлении
файл открывается в режиме доступа чтение/запись
вы должны созранить описатель (handle) для последующих операций
если файл уже существует:
при открытии файл усекается до нулевой длины
если атрибут файла - только чтение, открытие отвергается (атрибут можно изменить функцией 43H изменить атрибут)
CONFIG.SYS специфицирует число доступных описателей в системе
используйте функцию 5bH создать Новый файл, если вы не хотите перекрывать (усекать) существующий файл.



INT 21H - Сервис DOS Fn 3dH - Открыть описатель файла
Вход
AH = 3dH
DS:DX = адрес строки ASCIIZ с именем файла
AL = режим открытия
Выход
AX = код ошибки если CF установлен и описатель файла если нет ошибки.
Описание:
DS:DX указывает на строку ASCIIZ в формате: "d:\путь\имяфайла",0. Если диск и/или путь опущены, они принимаются по умолчанию.

файл должен существовать. См. функцию 3cH (создать файл).
файл открывается в выбранном режиме доступа / режиме открытия для совместимости с DOS 2.x и избежания сетевых режимов, задавайте:
AL = 0 чтобы открыть для чтения
AL = 1 чтобы открыть для записи
AL = 2 чтобы открыть для чтения и записи
указатель чтения/записи устанавливается в 0. См. 42H (LSEEK)
вы должны сохранить описатель (handle) для последующих операций
разделение файлов должно быть активизировано (команда DOS SHARE), если запрашивается открытие в одном из режимов разделения.
CONFIG.SYS специфицирует число доступных описателей файлов.



INT 21H - Сервис DOS Fn 3eH - Закрыть описатель файла
Вход
AH = 3eH
BX = описатель файла
Выход
AX = код ошибки если CF установлен
Описание:
BX содержит описатель файла (handle), возвращенный при открытии. файл, представленный этим описателем, закрывается, его буфера сбрасываются, и оглавление обновляется корректными размером, временем и датой.

Из-за нехватки описателей файлов (максимум 20, по умолчанию 8), вам может понадобиться закрыть часть умалчиваемых описателей, как, например, описатель 3 (стандартный AUX).



INT 21H - Сервис DOS Fn 3fH - Читать файл через описатель
Вход
AH = 3fH
BX = описатель файла
DS:DX = адрес буфера для чтения данных
CX = число считываемых байт
Выход
AX = код ошибки если CF установлен или число действительно прочитанных байт
Описание:
CX байт данных считываются из файла или устройства с описателем, указанным в BX. данные читаются с текущей позиции указателя чтения/записи файла и помещаются в буфер вызывающей программы, адресуемый через DS:DX.

Используйте функцию 42H LSEEK, чтобы установить указатель файла, если необходимо (OPEN сбрасывает указатель в 0). Модифицирует указатель чтения/записи файла, подготавливая его к последующим операциям чтения или записи.

Вы должны всегда сравнивать возвращаемое значение AX (число прочитанных байт) с CX (запрошенное число байт):

если AX = CX, (и CF сброшен) - чтение было корректным без ошибок
если AX = 0, достигнут конец файла (EOF)
если AX < CX (но ненулевой):
при чтении с устройства - входная строка имеет длину AX байт
при чтении из файла - в процессе чтения достигнут EOF
Замечания:
Эта функция превосходит сложные и неудобные FCB-функции. Она эффективно сочетает произвольный и последовательный доступ, позволяя пользователю выполнять свое собственное блокирование. Удобно использовать эту функцию для чтения стандартных описателей, таких как описатели стандартного в/в, взамен многочисленных буферизующих и посимвольных FCB-функций ввода. Когда вы читаете с устройства, AX возвращает длину считанной строки с учетом завершающего возврата каретки CR (ASCII 0dH).



INT 21H - Сервис DOS Fn 40H - Писать в файл через описатель
Вход
AH = 40H
BX = описатель файла
DS:DX = адрес буфера, содержащего записываемые данные
CX = число записываемых байт
Выход
AX = код ошибки если CF установлен
AL = число реально считанных байт (лучший тест для ошибок)
Описание:
CX байт данных записывается в файл или на устройство с описателем, заданным в BX. данные берутся из буфера, адресуемого через DS:DX. данные записываются, начиная с текущей позиции указателя чтения/записи файла.

Используйте функцию 42H LSEEK, чтобы установить указатель файла, если необходимо (OPEN сбрасывает указатель в 0). Обновляет указатель чтения/записи файла, чтобы подготовиться к последующим операциям последовательного чтения или записи.

Вы должны всегда сравнивать возвращаемое значение AX (число записанных байт) с CX (запрошенное число байт для записи).

если AX = CX, запись была успешной
если AX < CX, встретилась ошибка (скорее всего, переполнение)
Замечание:
Эта функция превосходит сложные и неудобные FCB-функции. Она эффективно сочетает произвольный и последовательный доступ, позволяя пользователю осуществлять собственное блокирование. Удобно использовать эту функцию для вывода на умалчиваемые устройства, такие как стандартный вывод, взамен использования различных функций вывода текста.



INT 21H - Сервис DOS Fn 41H - Удалить файл
Вход
AH = 41H
DS:DX = адрес строки ASCIIZ с именем файла
Выход
AX = код ошибки если CF установлен
Описание:
DS:DX указывает на строку ASCIIZ в формате: "d:\путь\имяфайла",0. Если диск и/или путь опущены, они принимаются по умолчанию. имя файла не может содержать обобщенные символы ('?' и '*'). файл удаляется из заданного оглавления заданного диска. если файл имеет атрибут только чтение, то перед удалением необходимо изменить этот атрибут через функцию 43H CHMOD.



INT 21H - Сервис DOS Fn 42H - Установить указатель файла -- LSEEK
Вход
AH = 42H
BX = описатель файла
CX:DX = на сколько передвинуть указатель: (CX * 65536) + DX
AL = 0 переместить к началу файла + CX:DX
AL = 1 переместить к текущей позиции + CX:DX
AL = 2 переместить к концу файла + CX:DX
Выход
AX = код ошибки если CF установлен
DX:AX = новая позиция указателя файла (если нет ошибки)
Описание:
перемещает логический указатель чтения/записи к нужному адресу. Очередная операция чтения или записи начнется с этого адреса.

Замечение:
Вызов с AL=2, CX=0, DX=0 возвращает длину файла в DX:AX. DX здесь старшее значащее слово: действительная длина (DX * 65536) + AX.



INT 21H - Сервис DOS Fn 43H - Установить или опросить атрибут файла -- CHMOD
Вход
AH = 43H
DS:DX = адрес строки ASCIIZ с именем файла
AL = код подфункции: 0 = извлечь текущий атрибут файла
AL = 1 = установить атрибут файла
CX = новый атрибут файла (для подфункции 01H)
Выход
AX = код ошибки если CF установлен
CX = текущий атрибут файла (для подфункции 00H)
Описание:
DS:DX указывает на строку ASCIIZ в формате: "d:\путь\имяфайла",0. Если диск и/или путь опущены, они принимаются по умолчанию. атрибут файла извлекается или устанавливается, согласно коду в AL.

Замечание:
чтобы спрятать оглавление, используйте CX=02H (а не 12H, как вы, возможно, ожидали).



INT 21H - Сервис DOS Fn 44H - управление устройством в-в -- IOCTL
Вход
AH = 43H
AL = код подфункции:
AL = 00H - дать информацию устр-ва
AL = 01H - уст. информацию устр-ва
AL = 02H - читать с симв. устр-ва
AL = 03H - писать на симв. устр-во
AL = 04H - читать с блочного устр.
AL = 05H - писать на блочное устр.
AL = 06H - дать статус ввода
AL = 07H - дать статус вывода
AL = 08H - запрос съемн носителя
AL = 09H - запрос лок/удал устр-ва
AL = 0aH - запрос лок/удал описателя
AL = 0bH - счет повторов разделения
AL = 0cH - (зарезервировано)
AL = 0dH - общий IOCTL [DOS 3.2+]
AL = 0eH - дать логич устр-во [DOS 3.2+]
AL = 0fH - уст логич устр-во [DOS 3.2+]
прочие = (в зависимости от подфункции)
Выход
AX = код ошибки если CF установлен или иное значение (в зависимости от подфункции)
Описание:
IOCTL предоставляет метод взаимодействия с устройствами и получения информации о файлах. входные параметры и выходные значения варьируются в зависимости от кода подфункции в регистре AL.

Версии:
подфункции 0-7 ............ DOS 2.1+
подфункции 8,0bH .......... DOS 3.0+
подфункции 9,0aH .......... DOS 3.1+
подфункции 0dH,0eH,0fH .... DOS 3.2+

--------------------------------------------------------------------------------

Подфукция 00H: Запросить флаги информации об устройстве
вход: BX= описатель файла (устройство или дисковый файл)
выход: DX= IOCTL Инф об устр
--------------------------------------------------------------------------------

Подфукция 01H: установить флаги информации об устройстве
вход:
BX = описатель файла (устройство или дисковый файл)
DX = IOCTL Инф об устр (DH должен быть нулевым)
выход: DX= IOCTL Инф об устр
--------------------------------------------------------------------------------

Подфукция 02-03: читать (AL=02H) или писать (AL=03H) строку IOCTL на СИМВОЛЬНОЕ устр
вход:
DS:DX = адрес буфера (чтение) или данных (запись)
CX= число передаваемых байт
BX= описатель файла (только устройство -- не файл!)
выход: AX= код ошибки если CF установлен
--------------------------------------------------------------------------------

Подфукция 04-05: читать (AL=04H) или писать (AL=05H) строку IOCTL на БЛОЧНОЕ устр
вход:
DS:DX = адрес буфера (чтение) или данных (запись)
CX = число передаваемых байт
BL = ID диска (0=текущий, 1=A, и т.д.)
выход:
AX = код ошибки если CF установлен
AX =действительное число переданных байт (если CF=NC=0)

--------------------------------------------------------------------------------

Подфукция 06-07: дать статус ввода (AL=06H) или статус вывода (AL=07H)
вход: BX= описатель файла (устройство или дисковый файл)
выход:
AL= 0ffH=не конец файла; 0=EOF (для дисковых описателей)
AL= 0ffH=готово; 0=не готово (для устройств)

--------------------------------------------------------------------------------

Подфукция 08H: использует ли блочное устройство съемный носитель? [DOS 3.0+]
вход: BL= ID диска (0=текущий, 1=A, и т.д.)
выход:
AX = 00H - съемный носитель (т.е. флоппи-диск)
AX = 01H - не съемный (твердый диск или RAM-диск)
AX = 0fH - код ошибки если BL содержит неверный диск

--------------------------------------------------------------------------------

Подфукция 09H: Является ли устройство съемным в сети? [DOS 3.1+]
вход: BL = ID диска (0=текущий, 1=A, и т.д.)
выход: DX = атрибут устройства для диска. если бит 12=1 (т.е., DX & 1000H = 1000H), то устройство съемное.
--------------------------------------------------------------------------------

Подфукция 0aH: принадлежит ли описатель файла локальному или удаленному устройству в сети? [DOS 3.1+] Нам посоветовали не использовать эту подфункцию. Вместо этого трактуйте удаленные устройства как локальные.
вход: BX = описатель файла (только устройство -- не файл)
выход: DX = атрибут устройства для диска. если бит 15=1 (т.е., DX & 8000H = 8000H), то устройство удаленное.
--------------------------------------------------------------------------------

Подфукция 0bH: контроль повтора/задержки при разделении и блокировке файлов. 3.0+
вход:
DX= число попыток перед вызовом INT 24H "Критическая ошибка"
CX= счетчик цикла между попытками
выход: AX= код ошибки если CF установлен
замечание: умолчание - 3 попытки и счетчик цикла 1.
--------------------------------------------------------------------------------

Подфукция 0dH: Общий вызов IOCTL отрабатывает разнообразные функции управления. Начиная с DOS 3.2, можно создавать драйверы устройств, работающие на уровне дорожек (форматирование, чтение/запись). [DOS 3.2+] Код действия в регистре CL определяет "подподфункцию":
вход:
CL = код действия
40H = установить параметры устройства
60H = дать параметры устройства
41H = писать дорожку логического устройства
61H = читать дорожку логического устройства
42H = форматировать дорожку с верификацией
62H = Верифицировать дорожку логического устройства
DS:DX=> адрес пакета данных IOCTL
выход:
AX= код ошибки если CF установлен
DS:DX=> пакет данных может содержать информацию возврата.

--------------------------------------------------------------------------------

Подфукция 0eH: Выяснить, назначил ли драйвер устройства несколько логических устройств одному физическому устройству. [DOS 3.2+]
вход: BL= ID диска (0=текущий, 1=A, и т.д.)
выход: AX= код ошибки если CF установлен
AL = 0 если ровно одна буква диска назначена устройству BL
AL = (1=A, 2=B и т.д.) если назначено несколько логических устройств, AL содержит ID текущего назначенного диска

--------------------------------------------------------------------------------

Подфукция 0fH: Сообщить драйверу блочного устройства ID устройства для обработки. когда с физическим устройством ассоциируется несколько логических, DOS выдает сообщение "Insert diskette for drive X:...". Эта функция позволяет вам сообщать DOS, что диск с указанным ID уже установлен, тем самым обходя сообщение. [DOS 3.2+]
вход: BL= ID диска (0=текущий, 1=A, и т.д.)
выход:
AX= код ошибки если CF установлен
AL = 0 если ровно один ID назначен устройству BL
AL = (1=A, 2=B и т.д.) ID выбранного устройства, которое будет использоваться в последующих операциях в/в.
Замечание: Эта функция должна вызываться перед любой операцией в/в на логическом устройстве. Иначе DOS может выдать сообщение.


INT 21H - Сервис DOS Fn 45H - Дублировать описатель файла -- DUP
Вход
AH = 45H
BX = существующий описатель файла
Выход
AX = новый описатель файла, дублирующий оригинал или код ошибки если CF установлен.
Описание:
Создает дополнительный описатель файла, ссылающийся на тот же поток в/в, что и существующий описатель. Любое продвижение указателя чтения/записи для одного описателя действует на его дубликат -- включая любые операции чтения, записи или перемещения указателя посредством функции 42H LSEEK. Новый описатель наследует ограничения режима открытия оригинала. Эта функция используется с одной главной целью: вы можете закрыть описатель, заставляя DOS записать файловые буфера. такой способ DUP/CLOSE - быстрее, чем закрытие и повторное открытие файла.



INT 21H - Сервис DOS Fn 46H - Переназначить описатель -- FORCDUP
Вход
AH = 46H
BX = целевой описатель файла (должен уже существовать)
CX = исходный описатель файла (должен уже существовать)
Выход
AX = код ошибки если CF установлен
Описание:
Заставляет описатель файла (handle) ссылаться на другой файл или устройство. описатель в CX (источник) закрывается, если он открыт, а затем становится дубликатом описателя в BX (назначения). Иными словами, описатели в CX и BX будут ссылаться на один и тот же физический файл или устройство.

используется для переназначения стандартного в/в. пример:

Откроем файл "C:\STDOUT.TXT" через функцию 3dH Open File и получим описатель (например, 05).
установим BX=05, CX=01 и вызовем эту функцию. (замечание: описатель 01 - это предопределенный описатель "стандартного выходного устройства").
Теперь можно вызвать функцию 3eH Close File и закрыть handle 05. можно обращаться к файлу STDOUT.TXT через описатель 01.
Стало быть, дисковый файл "C:\STDOUT.TXT" будет отныне получать весь вывод, создаваемый всеми процессами (текущим и порожденными) через любую функцию символьного в/в DOS, так же как и любой вывод в описатель файла 01 через функцию DOS 40H.
когда вы выходите в COMMAND.COM, предопределенные описатели устанавливаются на обычные устройства (например, описатель 01 устанавливается на "CON").


INT 21H - Сервис DOS Fn 47H - Дать умалчиваемое оглавление DOS
Вход
AH = 47H
DS:SI = адрес локального буфера для результирующего пути (64 байта)
DL = номер диска (0=текущий, 1=A, и т.д.)
Выход
AX = код ошибка если CF установлен
Описание:
В пользовательский буфер по адресу DS:SI помещается в форме ASCIIZ путь текущего умалчиваемого оглавления для диска, указанного в DL. Путь возвращается в формате: "путь\оглавление",0. Не подставляется впереди буква диска, а сзади не подставляется символ "\". например, если текущим является корневое оглавление, эта функция вернет вам пустую строку (DS:[SI] = 0).



INT 21H - Сервис DOS Fn 48H - Распределить память (дать размер памяти)
Вход
AH = 48H
BX = запрошенное количество памяти в 16-байтовых параграфах
Выход
AX = код ошибки если CF установлен
BX = размер доступной памяти в параграфах (если памяти нехватает)
AX = сегментный адрес распределенного блока (если нет ошибок)
Описание:
распределяет блок памяти длиной BX параграфов, возвращая сегментный адрес этого блока в AX (блок начинается с AX:0000). если распределение неудачно, взводится Carry-флаг, в AX возвращается код ошибки, а BX содержит максимальный размер доступной для распределения памяти (в параграфах).

Чтобы определить наибольший доступный кусок, общепринято устанавливать BX=0ffffH перед вызовом. распределение завершится с ошибкой, возвратив размер максимального блока памяти в BX.

Замечание:
когда процесс получает управление через функцию 4bH EXEC, вся доступная память уже распределена ему.



INT 21H - Сервис DOS Fn 49H - Освободить распределенный блок памяти
Вход
AH = 49H
ES = сегментный адрес (параграф) освобождаемого блока памяти
Выход
AX = код ошибки если CF установлен
Описание:
Освобождает блок памяти, начинающийся с адреса ES:0000. этот блок становится доступным для других запросов системы. Вообще говоря, вы должны освобождать лишь те блоки памяти, которые вы получили через функцию 48H распределить память. Родитель отвечает за освобождение памяти порожденных процессов. Тем не менее, ничто не препятствует вам освобождать память чужих проыессов.



INT 21H - Сервис DOS Fn 4aH - Сжать или расширить блок памяти
Вход
AH = 4aH
ES = сегмент распределенного блока памяти
BX = желаемый размер блока в 16-байтовых параграфах
Выход
AX = код ошибки если CF установлен
BX = наибольший доступный блок (если расширение неудачно)
Описание:
Изменяет размер существующего блока памяти. Когда программа получает управление, функция 4bH EXEC уже распределила блок памяти, начиная с PSP, который содержит всю доступную память. чтобы освободить память для запуска порождаемых процессов, блок памяти, начинающийся с PSP, необходимо сначала сжать.

Замечание:
функция 31H (KEEP) и INT 27H (TSR) сжимают блок по адресу PSP.



INT 21H - Сервис DOS Fn 4bH - Выполнить или загрузить программу -- EXEC
Вход
AH = 4bH
DS:DX = адрес строки ASCIIZ с именем файла, содержащего программу
ES:BX = адрес EPB (EXEC Parameter Block - блока параметров EXEC)
AL = 0 = загрузить и выполнить
AL = 3 = загрузить программный оверлей
Выход
AX = код ошибки если CF установлен
Описание:
предоставляет средства одной программе (родителю) вызвать другую программу (ребенка), которая по завершению возвратит управление родителю.

DS:DX указывает на строку ASCIIZ в форме: "d:\путь\имяфайла",0. если диск или путь опущены, они подразумеваются по умолчанию.

ES:BX указывает на блок памяти, подготовленный как EPB, формат которого зависит от запрошенной подфункции в AL.

AL=0 EXEC: так как родительская программа первоначально получает всю доступную память в свое распоряжение, вы должны освободить часть памяти через функцию 4aH до вызова EXEC (AL=0). обычная последовательность:

Вызовите функцию 4aH с ES=сегменту PSP и BX=минимальному объему памяти, требуемой вашей программе (в параграфах).
Подготовьте строку ASCIIZ с именем вызываемого программного файла и установите DS:DX на первый символ этой строки.
Подготовьте блок параметров EXEC со всеми необходимыми полями.
Сохраните текущие значения SS, SP, DS, ES и DTA в переменных, адресуемых через регистр CS (CS - это единственная точка для ссылок после того, как EXEC вернет управление от ребенка).
Выдайте вызов EXEC с AL=0.
Восстановите локальные значения SS и SP.
Проверьте флаг CF, чтобы узнать, не было ли ошибки при EXEC.
Восстановите DS, ES и локальную DTA, если необходимо.
Проверьте код выхода через функцию 4dH WAIT (если надо).
Все открытые файлы дублируются, так что ребенок может обрабатывать данные как через описатели файлов, так и через стандартный в/в. режимы доступа описателей дублируются, но любые активные блокировки файлов не будут относиться к ребенку. См. функцию 5cH. после возврата из ребенка, векторы INT 22H Terminate, INT 23H Ctrl-Break и INT 24H Critical Error восстанавливаются в их предыдущие значения.

AL=3 LOAD: Эта подфункция используется для загрузки "оверлея".

DS:DX указывает на ASCIIZ имя файла, а ES:BX указывает на "LOAD"-версию блока параметров EXEC. Главное значение этой подфункции в том, что она считывает заголовок EXE и выполняет необходимые перемещения сегментов, как это требуется для программ .EXE.

Замечания:
Эта функция использует программу-загрузчик из COMMAND.COM, который транзитен в DOS 2.x (и, возможно, уже перекрыт программой). В этом случае возникнет ошибка, если DOS не найдет файл COMMAND.COM. Вы должны обеспечить корректную строку COMSPEC= в окружении перед вызовом этой функции.

Вместо разбора собственных FCB (как требуется для EPB), вы можете найти удобным загрузить и выполнить вторичную копию файла COMMAND.COM, используя опцию /C. например, чтобы выполнить программу FORMAT.COM, установите DS:DX на адрес строки ASCIIZ: "\command.com",0 и установите EPB+2 на сегмент и смещение следующей строки команд: 0eH,"/c format a:/s/4",0dH такой вторичный интерпретатор команд использует очень мало памяти (около 4K). Вы можете поискать в окружении DOS строку COMSPEC=, чтобы установить точное местоположение файла COMMAND.COM.




INT 21H - Сервис DOS Fn 4cH - Завершить программу -- EXIT
Вход
AH = 4cH
AL = код выхода
Выход
нет = (неприменим)
Описание:
возвращает управление от порожденного процесса его родителю, устанавливая код выхода, который можно опросить функцией 4dH WAIT. Управление передается по адресу завершения в PSP завершающейся программы. векторы Ctrl-Break и Critical Error восстанавливаются к старым адресам, сохраненнмы в родительском PSP.

Замечание:
значение ERRORLEVEL (используемое в пакетных файлах DOS) можно использовать для проверки кода выхода самой последней программы.



INT 21H - Сервис DOS Fn 4dH - Дать код выхода программы -- WAIT
Вход
AH = 4dH
Выход
AL = код выхода последнего завершившегося процесса
AH = 0 - нормальное завершение
AH = 1 - завершение через Ctrl-Break
AH = 2 - завершение по критической ошибке устройства
AH = 3 - завершение через функцию 31H KEEP
Описание:
возвращает код выхода последнего из завершившихся процессов. Эта функция возвращает правильную информацию только однажды для каждого завершившегося процесса.



INT 21H - Сервис DOS Fn 4eH - Найти 1-й совпадающий файл
Вход
AH = 4fH
DS:DX = адрес строки ASCIIZ с именем файла (допускаются ? и *)
CX = атрибут файла для сравнения
Выход
AX = код ошибки если CF установлен
DTA = заполнена данными (если не было ошибки)
Описание:
DS:DX указывает на строку ASCIIZ в форме: "d:\путь\имяфайла",0. Если диск и/или путь опущены, они подразумеваются по умолчанию. Обобщенные символы * и ? допускаются в имени файла и расширении. DOS находит имя первого файла в оглавлении, которое совпадает с заданным именем и атрибутом, и помещает найденное имя и другую информацию в DTA, как показано ниже:


Замечания:
Атрибут файла обычно используется во "включающем" поиске. если вас интересуют как файлы, так и оглавления, установите бит атрибута 4 (т.е. attr | 10H). См. атрибут файла для полной информации.

Типичная последовательность, используемая для поиска всех подходящих файлов:

используйте вызов 1aH, чтобы установить DTA на локальный буфер (или используйте умалчиваемую DTA в PSP по смещению 80H)
уст. CX=атрибут, DS:DX => ASCIIZ диск, путь, обобщенное имя
вызовите функцию 4eH (Найти 1-й)
если флаг CF указывает ошибку, вы закончили (нет совпадений)
уст. DS:DX => DTA (или на данные, которые вы скопировали из DTA после вызова функции 4eH)
повторять
обработать имя файла и данные по адресу DS:DX
вызвать функцию 4fH (Найти следующий)
пока Carry-флаг не покажет, что совпадений больше нет


INT 21H - Сервис DOS Fn 4fH - Найти следующий совпадающий файл
Вход
AH = 4fH
DS:DX = адрес данных, возвращенных предыдущей 4eH Найти 1-й файл
Выход
AX = код ошибки если CF установлен
DTA = заполнена данными
Описание:
DS:DX указывает на 2bH-байтовый буфер с информацией, возвращенной функцией 4eH Найти 1-й (либо DTA, либо буфер, скопированный из DTA).

Используйте эту функцию после вызова 4eH. следующее имя файла, совпадающее по обобщенному имени и атрибуту файла, копируется в буфер по адресу DS:DX вместе с другой информацией (см. функцию 4eH о структуре файловой информации в буфере, заполняемом DOS).



INT 21H - Сервис DOS Fn 54H - Дать переключатель верификации DOS
Вход
AH = 54H
Выход
AL = 0 если верификация выключена (OFF)
AL = 1 если верификация включена (ON)
Описание:
Возвращает текущий статус верификации записи DOS. Если в AL возвращается 1, то DOS считывает обратно каждый сектор, записываемый на диск, чтобы проверить правильность записи. функция DOS 2eH позволяет установить/изменить режим верификации.



INT 21H - Сервис DOS Fn 56H - Переименовать или переместить файл
Вход
AH = 56H
DS:DX = адрес старого ASCIIZ имени (путь/имя существующего файла)
ES:DI = адрес нового ASCIIZ имени (новые путь/имя)
Выход
AX = код ошибки если CF установлен
Описание:
DS:DX и ES:DI указывают на строки ASCIIZ: "d:\путь\имяфайла",0. Старое имя DS:DX должно отвечать существующему файлу и не может содержать обобщенных символов. диск и путь необязательны (если опущены, они принимаются по умолчанию).

Новое имя ES:DI должно описывать НЕ существующий файл. если указан диск, он должен быть тем же, что и в старом имени. если диск или путь опущены, принимаются текущие умолчания.

Если старое и новое имя содержат разные пути (явно или принятые по умолчанию), то элемент оглавления для файла ПЕРЕМЕЩАЕТСЯ в оглавление, указанное в новом имени.

Замечание:
если ID диска в старом имени отличается от текущего диска DOS, не забывайте указывать такой же ID диска в новом имени.



INT 21H - Сервис DOS Fn 57H - Установить или опросить дату или время файла
Вход
AH = 57H
AL = 0 чтобы получить дату/время файла
= 1 чтобы установить дату/время файла
BX = описатель файла (handle)
CX = (если AL=1) новая отметка времени в формате время/дата файла
DX = (если AL=1) новая отметка даты в формате время/дата файла
Выход
AX = код ошибки если CF установлен
CX = отметка времени файла в формате время/дата файла
DX = отметка даты файла в формате время/дата файла
Описание:
BX должен содержать описатель открытого файла (см. 3cH или 3dH ).

Укажите подфункцию, 0 или 1, в регистре AL. DX и CX задаются в формате памяти; например, младшие 8 бит даты находятся в DH.



INT 21H - Сервис DOS Fn 59H - Дать расширенную информацию об ошибке
Вход
AH = 59H DOS 3.0+
BX = 0000H (номер версии: 0000H для DOS 3.0, 3.1 и 3.2)
Выход
AX = расширенный код ошибки (0, если не было ошибки)
BH = класс ошибки
BL = предлагаемое действие
CH = сфера (где произошла ошибка)
Описание:
используйте эту функцию, чтобы уточнить, что предпринять после сбоя функции DOS по ошибке (только DOS 3.0+ ). вызывайте ее:

в обработчике критических ошибок INT 24H
после любой функции INT 21H , возвратившей Carry-флаг
после вызова FCB-функции, возвратившей AL=0ffH
Версии:
Эта функция отсутствует в версиях до DOS 3.00. В DOS 2.x, когда флаг CF указывает на ошибку, используйте логику вашей программы, чтобы отреагировать на ошибку. В DOS 3.0+, когда функция возвращает CF=1, рекомендуем вам игнорировать код ошибки, возвращенный в AX, вызвать эту функцию и выполнить действие, предложенное в BL.



INT 21H - Сервис DOS Fn 5aH - Создать уникальный временный файл
Вход
AH = 5aH DOS 3.0+
DS:DX = адрес строки ASCIIZ с диском и путем (заканчивается \)
CX = атрибут файла
Выход
AX = код ошибки если CF установлен и описатель файла (если нет ошибки)
DS:DX = (не изменяется) становится полным ASCIIZ-именем нового файла
Описание:
открывает (создает) файл с уникальным именем в оглавлении, указанном строкой ASCIIZ, на которую указывает DS:DX. COMMAND.COM использует эту функцию, когда создает временные "канальные" файлы, используемые при переназначении ввода-вывода. Описание пути должно быть готово к присоединению в его конец имени файла. Вы должны обеспечить минимум 12 байт в конце строки. Сама строка должна быть заполнена в одной из форм:

"d:\путь\",0 (указаны диск и путь)
ИЛИ "d:",0 (умалчиваемое оглавление диска)
ИЛИ "d:\",0 (корневое оглавление диска)
ИЛИ "",0 (умалчиваемые диск и оглавление)
После возврата строка DS:DX будет дополнена именем файла.

Замечания:
DOS создает имя файла из шестнадцатеричных цифр, получаемых из текущих даты и времени. если имя файла уже существует, DOS продолжает создавать новые имена, пока не получит уникальное имя. создаваемые таким способом файлы - по существу НЕ ВРЕМЕННЫЕ, и их следует удалять посредством функции DOS 41H , когда они не нужны.

Версии:
доступна, начиная с DOS 3.0



INT 21H - Сервис DOS Fn 5bH - Создать новый файл
Вход
AH = 5bH DOS 3.0+
DS:DX = адрес строки ASCIIZ с именем файла
CX = атрибут файла
Выход
AX = код ошибки если CF установлен и описатель файла если ошибок нет
Описание:
DS:DX указывает на строку ASCIIZ в форме: "d:\путь\имяфайла",0. Если диск и/или путь опущены, они принимаются по умолчанию. Этот вызов идентичен функции DOS 3cH CREATE, с тем исключением, что он вернет ошибку, если файл с заданным именем уже существует. Файл открывается для чтения/записи в совместимом режиме доступа



INT 21H - Сервис DOS Fn 5cH - Блокировать или разблокировать доступ к файлу
Вход
AH = 5cH DOS 3.0+
AL = подфункция: 0 = заблокировать область файла
= 1 = разблокировать ранее захваченную область
BX = описатель файла (handle)
CX:DX = смещение ((CX * 65536) + DX) от начала файла
SI:DI = длина блокируемой области ((SI * 65536) + DI) байт
Выход
AX = код ошибки если CF установлен
Описание:
блокирует или освобождает доступ к участку файла, идентифицируемого описателем в BX. область файла, начинающаяся по логическому смещению CX:DX и имеющая длину SI:DI, блокируется (захватывается) или разблокируется (освобождается). смещение и длина обязательны. Разделение файлов ДОЛЖНО быть активизировано (командой SHARE), иначе функция вернет код ошибки "неверный номер функции." Блокировка действует на операции чтения, записи и открытия со стороны порожденного или конкурирующего процесса. при попытке такого доступа (и режиме доступа , определенном при OPEN как "режим разделения", который запрещает такой доступ), DOS отвергает операцию через вызов INT 24H (обработчик критических ошибок) после трех попыток. DOS при этом выдает сообщение "Abort, Retry, Ignore". Рекомендуемое действие - НЕ пытаться читать файл и ожидать кода ошибки. Вместо этого попытайтесь заблокировать область и действуйте в соответствии с кодом возврата. это позволяет избежать довольно неустойчивого состояния DOS, связанного с выполнением INT 24H. Блокировка за концом файла не является ошибкой. Вы можете захватить весь файл, задав CX=0, DX=0, SI=0ffffH, DI=0ffffH и AL=0. при освобождении, смещение и длина участка должны точно совпадать со смещением и длиной захваченного участка.

Замечания:
Дублирование описателя через 45H или 46H дублирует и блокировки. Даже если во время OPEN выбран режим доступа Inherit, механизм блокировки не даст никаких привилегий доступа порожденным процессам, созданным функцией 4bH EXEC (они трактуются как отдельные). Важно, чтобы все блокировки файла были сняты до завершения программы. если вы используете блокировку, особо отслеживайте вызовы INT 23H (выход Ctrl-Break) и INT 24H (выход по критической ошибке), чтобы снять блокировки до действительного завершения программы. Рекомендуется освобождать блокировки как можно скорее. всегда блокируйте, обрабатывайте файл и освобождайте блокировку одной операцией.

Версии:
доступна, начиная с DOS 3.0




INT 21H - Сервис DOS Fn 5eH - Разные сетевые функции
Вход
AH = 5eH DOS 3.1+
AL = подф.: 0=дать имя машины (узла) в сети
AL = 2=установить стартовую строку сетевого принтера
AL = 3=извлечь стартовую строку сетевого принтера
прочие = (зависят от подфункции)
Выход
AX = код ошибки если CF установлен
прочие = (зависят от подфункции)
Описание:
Эти функции доступны при установленной IBM PC Network Program.

Версии:
доступны, начиная с DOS 3.1


--------------------------------------------------------------------------------

подф. 00H: Извлекает имя машины (узла), как оно известно в сети.
вход: DS:DX=> буфер пользователя для ASCIIZ сетевого имени
выход:
DS:DX=> буфер, содержащий сетевое имя
CH= 0=имя не определено; иначе=имя определено
CL= номер имени NETBIOS (если CH ненулевой)
AX= код ошибки если CF установлен
Замеч: Сетевое имя - 15-симв. (дополненная пробелами) строка ASCIIZ
--------------------------------------------------------------------------------

подф. 02H: Задает настроечную строку, посылаемую на принтер каждый раз, когда эта машина выдает результаты на сетевой принтер.
вход:
DS:SI=> буфер, содержащий настроечную строку (до 64 байт)
CX= длина настроечной строки
BX= индекс в списке назначений, отвечающий принтеру
выход: AX= код ошибки если CF установлен
--------------------------------------------------------------------------------

подф. 03H: Извлекает настроечную строку принтера, заданную ранее посредством DOS Fn 5eH подф. 02H.
вход:
DS:DI=> 64-байтовый буфер пользователя для результата BX= индекс принтера в списке назначений
выход:
ES:DI=> буфер, заполненный настроечной строкой
CX= длина настроечной строки
AX= код ошибки если CF установлен
Замеч: Поскольку индекс в списке назначений может измениться в любой момент, используйте функцию 5fH подф. 02H, чтобы получить индекс непосредственно перед вызовом этой функции.


INT 21H - Сервис DOS Fn 5fH - Переназначение устройств в сети
Вход
AH = 5fH DOS 3.1+
AL = подф.: 2=получить элемент списка переназначений устройств
= 3=переназначить сетевое устройство
= 4=отменить переназначение сетевого устройства
прочие = (зависят от подфункции)
Выход
AX = код ошибки если CF установлен
Описание:
Эти функции доступны при установленной IBM PC Network Program.

Версии:
доступны, начиная с DOS 3.1


--------------------------------------------------------------------------------

подф. 02H: Извлекает элемент из списка переназначений сетевых устройств.
вход:
DS:DI=> 128-байтовое ASCIIZ локальное имя устр. ("LPT1",0)
ES:DI=> 128-байтовый буфер с ASCIIZ сетевым именем
BX= индекс в списке назначений
выход:
DS:DI=> ASCIIZ локальное имя устройства (напр., "LPT1",0)
ES:DI=> ASCIIZ сетевое имя
BL= тип устр: 3=принтер; 04=файл 'устройство'
BH= статус устр: бит 0=1 -неверное устр.; 0=верное
CX= сохраненный параметр (при NETBIOS, всегда 0)
AX= код ошибки если CF установлен
DX,BP = (изменены)
Замеч: обычно эту функцию вызывают с BX=0, затем повторяют вызовы, увеличивая значение BX, пока DOS не вернет ошибку 12H (больше нет файлов).
--------------------------------------------------------------------------------

подф. 03H: этот вызов определяет имена оглавлений для сети и перенаправляет доступ на сетевые принтеры. Замеч: доступ к принтеру переназначается на уровне ROM-BIOS INT 17H.
вход:
DS:SI = ASCIIZ имя исходного устройства
ES:DI = ASCIIZ назначение (сетевой путь с паролем)
BL= тип устр: 03=принтер; 04=файл 'устройство'
CX= параметр для вызывающего (задавайте 0 для NETBIOS)
выход: AX= код ошибки если CF установлен
Замеч: если BL=03, то источник задает ASCIIZ-имя принтера (например, "LPT1",0). Назначение кодируется в форме: [\\computername\{shortname|printdevice}],0,[password],0. Если пароль начинается с 00, считается, что пароля нет. Если BL=04, то источник задает ASCIIZ-имя диска (например, "F:",0), а назначение - ASCIIZ-имя пути. после вызова этой функции, локальные обращения к этому диску переназначаются на выбранные имя компьютера и путь.
--------------------------------------------------------------------------------

подф. 04H: Отменить сетевое переназначение для указанного устройства.
вход: DS:SI=> ASCIIZ-имя устройства или ID диска
выход: AX= код ошибки если CF установлен
Замеч: если DS:SI указывает на PRN, LPT1, LPT2 или LPT3, и устройство связано с сетью, то сетевое обслуживание этого устройства прекращается. Если DS:SI указывает на ID диска и пароль (например, "F:",0,"mypswrd",0), то переназначение этого диска прекращается, и ID диска восстанавливает свое предыдущее значение.


INT 21H - Сервис DOS Fn 62H - Дать адрес PSP
Вход
AH = 62H DOS 3.0+
Выход
BX = сегментный адрес PSP выполняющейся программы
Описание:
Эта функция возвращает в BX адрес PSP текущей программы. используется, чтобы получить адрес параметров командной строки, адрес окружения DOS и другой полезной информации в PSP.

Версии:
доступна, начиная с DOS 3.0



INT 22H - Адрес завершения
Адрес в этом векторе (0000:0088) представляет собой место, куда будет передано управление, когда текущая программа завершится по одной из следующих функций:

INT 20H (традиционный выход в DOS)
Функция DOS 00H
Функция DOS 4cH (EXIT)
INT 27H (TSR: завершиться, но остаться резидентным)
Функция DOS Fn 31H (KEEP)
DOS принимает во внимание этот вектор при снятии через INT 24H (критич.ошибка). Адрес в этом векторе копируется в поле PSP Terminate Address функциями DOS 26H (создать PSP) и 4bH (EXEC).

Не выдавайте INT 22h и не вызывайте этот адрес непосредственно.



INT 23H - Адрес выхода по Ctrl-Break
Адрес в этом векторе (0000:008c) - это адрес, по которому передается управление, когда DOS распознает, что пользователь нажал Ctrl-Break. Адрес по вектору INT 23H копируется в поле PSP Ctrl-Break Address функциями DOS 26H (создать PSP) и 4cH (EXEC). Исходное значение адреса обработчика Ctrl-Break восстанавливается из PSP при завершении программы. таким образом, по завершении порожденного процесса будет восстановлен адрес обработчика Ctrl-Break из родительского процесса.

Распознавание
DOS вызывает INT 23H, когда распознает, что нажата комбинация Ctrl-Break. Уровень чувствительности DOS к Ctrl-Break может быть проверен или установлен посредством функции 33H:

Если Break=ON, DOS распознает Ctrl-Break в течение всех функций, за исключением 06H и 07H.
Если Break=OFF, DOS распознает Ctrl-Break лишь во время операций ввода-вывода с консолью, принтером и последовательными портами.
Обработка
Обычная системная обработка Ctrl-Break вызывает немедленное снятие программы. чтобы перехватить обработку Ctrl-Break и передать ее вашей программе, воспользуйтесь следующими советами:

Вызовите функцию 25H , чтобы установить вектор INT 23H на ваш программный код.
При входе в ваш обработчик Ctrl-Break все регистры сохраняют те значения, которые они имели при входе в функцию DOS, распознавшую Ctrl-Break.
Если вы хотите игнорировать Ctrl-Break, просто выдайте IRET.
Если вы хотите что-нибудь сделать (скажем, прекратить повторение цикла), сохраните все регистры перед вашим действием и восстановите после действия. Выходите через IRET. Не существует ограничений для вашего обработчика - можно использовать все функции DOS. Однако, если обработчик Ctrl-Break сам выполняет символьный в/в, а пользователь вновь нажмет Ctrl-Break в это время, то DOS катастрофически сбивается.
Если вы хотите снять процесс (выйти в родительский процесс), установите флаг CF и выдайте FAR RET. это заставляет DOS выполнить обычную процедуру выхода в порождающий процесс.
Самый легкий способ убедиться, что процесс распознает нажатие Ctrl-Break - это время от времени вызывать функцию DOS 0bH.


INT 24H - Обработчик критических ошибок
Этот вектор (0000:0090) хранит адрес, по которому передается управление, когда драйвер устройства DOS обнаруживает критическую ошибку. адрес по этому вектору копируется в PSP функицями 26H (создать PSP) и 4bH (EXEC). При выходе родительские значения восстанавливаются в векторе INT 24H из родительского PSP.

Нормальный обработчик INT 24H - это код, который выдает сообщение:

Abort, Retry, Ignore? _

которое вы видите при неготовности дискеты или принтера.

Наиболее сложные программы предоставляют собственный обработчик критических ошибок.

Вход
При входе в обработчик INT 24H регистры содержат следующие данные:

BP:SI => заголовок устройства , позволяющий определить сбойное устройство
DI = биты 0-7 содержат код ошибки (биты 8-15 не определены)
AL = если в AH бит 7=0, то в AL номер диска (0=A, 1=B, и т.д.)
AH = информация об ошибке:

Вы можете обработать ошибку, запросив действие пользователя (например, подготовить дискету или включить принтер). функции DOS выше 0cH не следует использовать (исключая функцию 59H , которая работает нормально). Вы можете получить дополнительную информацию через функцию 59H и/или через блок заголовка устройства, адресуемый через BP:SI.

Выход
После обработки ошибки вы можете загрузить в регистр AL код действия и вернуться в DOS, указав одно из следующих действий:

AL=0: игнорировать ошибку
AL=1: повторить операцию
AL=2: снять. завершить через адрес INT 23H (как при Ctrl-Break)
AL=3: вернуться в приложение, индицируя сбившуюся функцию DOS
DOS 3.x проверьте AH при входе, чтобы определить допустимые действия. Опция AL=3 кажется идеальной. например, если операция "открыть файл" вызвала ошибку из-за отсутствия диска в устройстве, вы можете предоставить вашему приложению самому обработать эту ситуацию. Однако эта опция имеет недостатки:

Опция AL=3 НЕДОСТУПНА в версиях DOS младше 3.0
DOS всегда возвращает код ошибки 53H, который не очень информативен
Стек
При входе в обработчик INT 24H, стек имеет состояние, описанное ниже:

IP - адрес для возврата в DOS через IRET
CS - адрес для возврата в DOS через IRET
Flags
AX,BX,CX,DX,SI,DI,BP,DS,ES - регистры прикладной программы перед INT 21H
IP - адрес для возврата непосредственно в приложение
CS - адрес для возврата непосредственно в приложение
Flags - регистр флагов приложения
Эту информацию можно использовать, чтобы определить сбившуюся функцию (через AH в стеке) и любые параметры (через другие регистры). Но более существенно то, что ваш обработчик INT 24H может восстановить регистры и осуществить возврат непосредственно в прикладную программу.

Обычно ваш обработчик будет имитировать DOS, загружая AX кодом ошибки DOS и взводя флаг CF, чтобы индицировать ошибку (хорошие программы так и поступают). Когда вы возвращаетесь в приложение таким способом, то, как утверждается в документации, DOS будет в "неустойчивом" состоянии до тех пор, пока не будет вызвана функция с номером старше 0cH. Тем не менее, такая техника успешно используется многими программами.

Вектор INT 24H ИГНОРИРУЕТСЯ для дисковых ошибок, встречающихся при INT 25H/26H




INT 25H или 26H - Прямая дисковая операция чтения или записи
Вход
AL = номер диска (0=A, 1=B, и т.д.)
CX = счетчик считываемых или записываемых секторов
DX = начальный сектор (логический номер сектора DOS)
DS:BX = адрес данных (исходный или целевой буфер)
Выход
Выход
AX = код ошибки, если взведен флаг переноса (CF=1) (см. ниже)
значения всех регистров портятся, за исключением DS,ES,SS,SP ВАЖНО: эти функции оставляют одно лишнее слово в стеке
Этот сервис DOS предоставляет прямой доступ к любому сектору диска, доступному через DOS-BIOS или устанавливаемые драйверы устройств.

INT 25H читает секторы
INT 26H записывает секторы
Логические секторы DOS начинаются с корневого сектора . первый сектор в разделе DOS - это логический сектор 0. номера логических секторов возрастают сначала для каждого сектора на цилиндре, затем по каждой головке, и наконец по каждому цилиндру на устройстве.

Заметьте, что Главная корневая запись и любые другие секторы вне раздела DOS недоступны через этот сервис. прерывание INT 13H - это единственный сервис, который предоставляет полный доступ к любой части твердого диска.

Ошибки
Ошибки, возникающие в процессе INT 25H/26H, НЕ обрабатываются обработчиком кртических ошибок INT 24H . при выходе из INT 25H/26H, DOS-BIOS взводит флаг переноса (CF=1), когда встречается ошибка. Если установлен флаг CF:

AL = ошибка устройства (0-0cH) - аналогично битам 0-7 в DI для INT 24H - это
AL = один из кодов ошибок 13H-1fH (без 13H) в списке кодов ошибок DOS
AH = 80H = attachment failed to respond
AH = 40H = ошибка операции поиска на диске
AH = 08H = неверная контрольная сумма (CRC) при чтении дискеты
AH = 04H = запрошенный сектор не найден
AH = 03H = попытка записи на защищенную от записи дискету
AH = 02H = ошибка, отличная от перечисленных выше
Пример
Участок программы, читающий корневой сектор дискеты:

mov al,0 ;выбрать диск A
mov dx,0 ;выбрать корневой сектор DOS и BPB
mov cx,1 ;читать один сектор ...
lea bx,my_buf ; ... в буфер по адресу DS:BX
int 25H
pop dx ;удалить лишнее слово из стека
jnc no_err
...и т.д. ;обработать любую ошибку диска (код в AX)
no_err: ...и т.д. ;продолжить (ошибок нет)

Замечание:
Не следует предполагать, что сектор содержит ровно 512 байт. Используйте функции 1cH или 32H либо прочитайте корневой сектор , чтобы определить истинный размер секторов.

32 мегабайта?
Утверждается, что DOS поддерживает максимальный объем диска в 32 Мб, но, строго говоря, это неправда. для стандартных драйверов устройств размер сектора равен 512K. Очвидно, что, поскольку наибольший номер сектора, который можно поместить в DX для INT 25H/26H, равен 65535, максимальный размер диска получается равным 32767K, или 32M.

Однако не-IBM'овские драйверы (или будущие драйверы IBM) могут поддерживать размер сектора, больший 512 байт. Поэтому для размера диска нет практических ограничений. Даже для сегодняшних драйверов, 32-мегабайтный максимум относится лишь к единственному разделу DOS.



INT 27H - Завершиться, но остаться резидентным
Вход:
DX = адрес первого байта за резидентным участком программы (DX интерпретируется как смещение от PSP (DS/ES при запуске)
Выход:
нет
Возвращает управление DOS, оставляя часть памяти распределенной, так что последующие программы не будут перекрывать программный код или данные в этой памяти.

INT 27H - это традиционный метод установки программ обслуживания прерываний и пользовательских таблиц данных. Функция 31H (KEEP) - гибкая альтернатива этому.

INT 27H (и все типы выходов в DOS) восстанавливает векторы INT 22H-24H из PSP завершающейся программы. Поэтому этот сервис нельзя использовать для установки постоянного обоаботчика критических ошибок или обработчика Ctrl-Break.



INT 28H - DOS Квант времени DOS (нет в документации)
Зто НЕДОКУМЕНТИРОВАННОЕ прерывание DOS использует, когда ждет нажатия клавиши, а также перед вызовом некоторых функций DOS с номерами до 0ch включительно. PRINT (спулер DOS) перехватывает этот вектор, чтобы найти квант времени для чтения файлов и вывода на принтер. это прерыание используется также различными резидентными popup-программами (TSR).

Обычно TSR использует INT 28H как одну из нескольких своих точек входа. То есть, TSR перехватывает нажатия клавиш и/или другие триггерные события, и устанавливает флаг, если требуется активизация. затем, в процессе обработки INT 28H, TSR вызывает исходный обработчик этого прерывания, и, если флаг запроса установлен, активизирует свой код.

ВАЖНО:
Popup-программа НЕ должна использовать функций DOS с номерами вплоть до 0cH, пока она выполняется внутри INT 28H.



INT 2eH - Выполнить команду DOS (нет в документации)
Вход:
DS:SI = адрес выполняемой команды DOS в форме "Lstring" (должна быть доступная память для загрузки программы)
Выход:
SS,SP = разрушены
?? = не ясно, как получить статус выполненного запроса
Это НЕДОКУМЕНТИРОВАННОЕ прерывание выполняет команду DOS, как если бы эта команда была введена в ответ на подсказку DOS.

При входе DS:SI указывает на строку, в первом байте которой содержится длина строки, а в последнем байте - 0dH (символ 0dH не входит в подсчет длины).

DB 0fH, "set PROMPT=$p$g", 0dH ; ** строка длиной 0fH байт **

Этот пример иллюстрирует основное использование этого сервиса -- он позволяет устанавливать значения в главном (корневом) окружении DOS. В любых других случаях предпочтительнее функция DOS 4bH (например, выполнить COMMAND.COM, передав как параметр строку "/c dos_cmd"), поскольку она полностью документирована.
Замечание:
Не забывайте сначала сжать текущий MCB посредством функции DOS 4aH. Оставляйте МНОГО памяти для стека -- DOS буквально пожирает стек. SS и SP должны быть сохранены перед вызовом и восстановлены после. Этот сервис покрыт тайной. Он явно не используется ни одной программой DOS, включая COMMAND.COM. Из-за этой загадочности мы рекомендуем не использовать его.



INT 2fH - Мультиплексное прерывание
Вход:
AH = номер мультиплексного процесса
01H = резидентная порция команды DOS 'PRINT'
02H = резидентная порция команды DOS 'ASSIGN'
10H = резидентная порция команды DOS 'SHARE'
03H-7fH (зарезервировано)
80H-0ffH (доступно для других процессов)
AL = номер подфункции
прочие = зависят от подфункций и конкретных мультиплексных процессов
Выход:
AX = код ошибки, если взведен флаг CF (для процессов DOS)
AL = статус установки (для процессов DOS)
00H = не установлен. можно устанавливать
01H = не установлен. Нельзя устанавливать
ffH = установлен
Этот вектор (0000:00bc) предоставляет средства управления процессами, доступные всей системе из любого приложения.

Каждый процесс должен включить себя в цепочку прерываний с этим кодом, и каждый процесс в цепочке должен проверять AH на свой мультиплексный номер процесса. Если запрос относится к другому процессу, активный процесс должен передать управление по первоначальному адресу прерывания 2fH (по адресу, который был в векторе 0:00bc перед тем, как текущий процесс установил себя).

Версии DOS:
INT 2fH не определено для более ранних версий, чем DOS 3.0 В DOS 3.0, INT 2fH определено ТОЛЬКО для PRINT, и значение AH (которое определяет номер процесса) не определено. В DOS 3.2, этот вектор определен так, как описано выше.

Print Spooler:
AH=1 (или AH=что угодно для DOS 2.x) это - интерфейс, определяемый для фоновой печати (печатного спулинга) после выполнения команды DOS 'PRINT'.
AL - номер подфункции (0-5). все подфункции могут возвращать ошибки (см. ниже).
AL = 0: опросить статус установки процесса
Выход:
AL = 00H = не установлен, можно устанавливать
AL = 01H = не установлен, нельзя устанавливать
AL = ffH = установлен

AL = 1: направить файл к спулеру
DS:DX => направляемый пакет
смещение 0 =уровень (всегда 0 для DOS 3.0, 3.1 и 3.2)
смещение 1 =DWORD адрес (смещение,сегмент) строки ASCIIZ, содержащей диск, путь и имя файла, направляемого в очередь печати (глобальные - обобщенные - имена НЕ допускаются)

AL = 2: снять выбранные файлы
DS:DX => строка ASCIIZ с именем удаляемого из очереди файла (глобальные символы допускаются в имени)

AL = 3: Снять все файлы (удалить все файлы из очереди и остановить печать)

AL = 4: статус. возвращает счетчик ошибок и задерживает очередь для изучения.
используйте подфункцию 5, чтобы освободить очередь.

Возвращает: DS:SI => блок описания файла в очереди. Один или несколько блоков с ASCIIZ-именами файлов. Конец блока отмечается именем, начинающимся с 00H.

DX = счетчик последовательных ошибок, встретившихся при попытке вывода последнего символа.

AL = 5: конец статуса. Освобождает очередь для продолжения печати.

AL = 0f8H-0ffH: (резервируется для DOS)
Ошибки спулера:
Если установлен флаг CF, то AX содержит код ошибки:

AX = 1 - неверный номер функции
AX = 2 - файл не найден
AX = 3 - Путь не найден
AX = 4 - Слишком много файлов (нет доступных описателей)
AX = 5 - доступ отвергнут
AX = 6 - неверный описатель (handle)
AX = 8 - переполнение очереди
AX = 9 - Занято
AX = 0Ch - Путь и имя файла превышают 64 символа
AX = 0Fh - неверный диск
Assign
AH=2 - мультиплексный номер для резидентной порции команды DOS 'ASSIGN'. Определена только подфункция AL=0 (дать статус установки).

Share
AH=10H - мультиплексный номер резидентной порции команды DOS 'SHARE'. Определена только подфункция AL=0 (дать статус установки).

Создание собственного процесса
Руководство DOS Tech Ref разъясняет, что вы можете использовать INT 2fH как вход для установки и доступа к вашему собственному резидентному процессу. Идея состоит в следующем: если вы произвольно используете вектор прерывания для вашего собственного доступа, то вы подвергаетесь определенному риску, особенно в мультизадачной системе. если же вы используете предлагаемую мультиплексную "цепочку", то DOS знает о вас, и ваш вектор не будет перекрыт другим обработчиком. Одна возможная проблема: нет предопределенного способа определить мультиплексный номер вашего процесса (регистр AH). Плохо привязываться к конкретному числу, ибо нет гарантии, что другой процесс не будет использовать этот же номер. Вы должны предусмотреть какую-то логику, гарантирующую вам четкое опознание вашего процесса.

Ваш процесс должен по меньшей мере использовать подфункцию AL=0, чтобы вы могли выяснить, не был ли процесс уже установлен ранее.

Замечание:
Если ваш процесс использует сервис DOS, или выполняется с незамаскированными прерываниями, то он должен быть реентерабельным.



Данный файл сгенерирован программой Rec Office

22.03.2009-1:17:39