На этом шаге мы перечислим некоторые дополнительные функции, используемые при работе с файлами в расширенной версии DOS.
Перечислим другие дисковые функции в расширенной версии DOS.
1. Получение размера свободного дискового пространства (функция 36H). Данная функция выдает информацию о дисковой памяти. Для выполнения функции необходимо загрузить в регистр DL номер дисковода (0 - текущий дисковод, 1 - A, 2 - B и т.д.):
MOV AH,36H ; Функция выдачи свободного пространства. MOV DL,0 ; Текущий дисковод. INT 21H ; Вызов DOS-прерывания.
При указании неправильного номера дисковода операция возвращает в регистре AX FFFFH. Если номер дисковода правильный, то возвращаются:
2. Удаление файла (функция 41H). В регистр DX необходимо загрузить ASCIIZ-строку, содержащую путь доступа и имя файла:
MOV AH,41H ; Запрос на удаление. LEA DX,PATHNAM ; ASCIIZ-строка. INT 21H ; Вызов DOS-прерывания.
В случае ошибки в регистре AX возвращается код 02 (файл не найден) или 05 (нет доступа).
3. Управление файловым указателем (функция 42H). Система DOS имеет файловый указатель, который при открытии файла устанавливается в 0 и увеличивается на 1 при последовательных операциях записи или чтения. Для доступа к любым записям внутри файла можно менять файловый указатель с помощью этой функции, получая прямой доступ к требуемым записям файла.
Для установки файлового указателя необходимо поместить в регистр BX файловый номер и в регистровую пару CX:DX - требуемое смещение в байтах. Для смещений до 65535 в регистре CX устанавливается 0, а в DX - смещение. В регистре AL должен быть установлен один из кодов, который определяет точку отсчета смещения:
В следующем примере устанавливается файловый указатель на смещение 1024 байта от начала файла:
MOV AH,42H ; Установка указателя MOV AL,00 ; от начала файла. MOV BX,HANDLE1 ; Установка файлового номера. MOV CX,00 ; Смещение на MOV DX,1024 ; 1024 байта. INT 21H ; Вызов DOS-прерывания. JC error
Правильно выполненная операция сбрасывает флаг CF и возвращает новое положение указателя в регистровой паре DX:AX. Неправильная операция устанавливает флаг CF в 1 и возвращает в регистре AX код 01 (ошибка кода отсчета) или 06 (ошибка файлового номера).
4. Переименование файла (функция 56H). В регистр AH помещается значение функции. При этом в регистр DX должен быть загружен адрес ASCIIZ-строки, содержащей старые значения дисковода, пути доступа, имени и типа файла, а в регистр DI (в действительности ES:DI) - адрес ASCIIZ-строки, содержащей новые значения дисковода, пути доступа, имени и типа файла. Если указывается номер дисковода, то он должен быть одинаков в обоих строках. Путь доступа может быть различным, поэтому данная операция может не только переименовывать файл, но и переносить его в другое подоглавление:
MOV AH,56H ; Запрос на переименование файла. LEA DX,oldstring ; DS:DX LEA DI,newstring ; ES:DI INT 21H ; Вызов DOS-прерывания.
В случае ошибки регистр AX возвращает коды 03 (путь доступа не найден), 05 (нет доступа) и 17 (разные дисководы).
На следующем шаге мы рассмотрим пример, иллюстрирующий использование некоторых из перечисленных функций.