Создание дискового файла

Для создания нового файла или переписывания старого файла используется функция 3Ch. При этом регистр DX должен содержать адрес ASCIIZ-строки, а регистр CX - необходимый атрибут; для обычного файла значение атрибута - 0.

Рассмотрим пример создания обычного файла:

MOV AH,3CH; Запрос на создание

MOV CX,00; обычного файла

LEA DX,PATHNM1; ASCIIZ строка

INT 21H; Вызов DOS

JC error; Переход по ошибке

MOV HANDLE1,AX; Сохранение файлового номера в DW

При правильном открытии операция создает элемент оглавления с данным атрибутом, очищает флаг CF и устанавливает файловый номер в регистре AX. Этот номер должен использоваться для всех последующих операций. Если создаваемый файл уже существует (т.е. имя файла присутствует в оглавлении), то длина этого файла устанавливается в 0 для перезаписи.

В случае возникновения ошибки операция устанавливает флаг CF в 1 и помещает в регистр AX код возврата: 03, 04 или 05. Код 05 свидетельствует либо о переполнении оглавления, либо о защите существующего файла атрибутом "только чтение". При завершении операции необходимо сначала проверить флаг CF, так как при создании файла возможна установка в регистре AX файлового номера 0005, который можно легко спутать с кодом ошибки 05 (нет доступа).

Для записи файла используется функция 40h. При этом в регистре BX должен быть установлен файловый номер, в регистре CX - число записываемых байт, а в регистре DX - адрес области вывода. В следующем примере происходит запись 256 байт из области OUTREC:

HANDLE1 DW?

OUTREC DB 256 DUP (' ')

MOV AH,40H; Запрос записи

MOV BX,HANDLE1; Файловый номер

MOV CX,256; Длина записи

LEA DX,OUTREC; Адрес области вывода

INT 21H; Вызов DOS

JC error2; Проверка на ошибку

CMP AX,256; Все байты записаны?

JNE error3

Правильная операция записывает из памяти на диск все данные (256 байт), очищает флаг CF и устанавливает в регистре AX число действительно записанных байтов. Если диск переполнен, то число записанных байтов может отличаться от заданного числа. В случае неправильной операции флаг CF устанавливается в 1, а в регистр AX заносится код 05 (нет доступа) или 06 (ошибка файлового номера).

После завершения записи файла необходимо установить файловый номер в регистр BX и, используя функцию 3Eh, закрыть файл. Эта операция записывает все оставшиеся еще данные из буфера на диск и корректирует оглавление и таблицу FAT.

MOV AH,3EH; Запрос на закрытие файла

MOV BX,HANDLE1; Файловый номер

INT 21H; Вызов DOS

В случае ошибки в регистре AX устанавливается код 06 (неправильный файловый номер).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: