Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KPiYaP_Shpory.doc
Скачиваний:
46
Добавлен:
11.05.2015
Размер:
309.76 Кб
Скачать

61. Операции с файлами: создание, открытие, закрытие.

Метод дескриптора файла:

Для открытия файлов используйте функцию 3DH прерывания 21H.

DS:DX должны указывать на строку, дающую путь и имя файла, включая имя нкакопителя, если это необходимо.

Вся строка должна быть не длиннее 63-х байтов и завершаться символом ASCII 0. В AL надо поместить код доступа, причем 0 открывает файл для чтения, 1 - для записи, а 2 - для чтения/записи. При возврате AX будет содержать 16-битный номер файла, по которому файл впоследствии идентифицируется. Файловый указатель устанавливается на начало файла.

Размер записи устанавливается равным 1 байту - это связано с тем, что операции прямого доступа при использовании метода дескриптора файла не имеют специальных буферов: на самом деле файлы с прямым доступом рассматриваются как последовательные и с ними работают одни и те же функции. Эта функция позволяет открывать как обычные, так и спрятанные файлы. При возврате флаг переноса равен 0,если файл открыт успешно. В противном случае флаг переноса устанавливается, а AX содержит 2 - если файл не найден, 4 - если программа хочет открыть слишком много файлов, 6 - при ошибке на диске и 12 - если неправильно указан код доступа в AL.

Вот пример:

;---в сегменте данных

PATH DB 'A:LEVEL1\FILENAME.EXT',0

;---открываем файл для чтения/записи

MOV AH,3DH ;номер функции

MOV AL,2 ;открываем для чтения/записи

LEA DX,PATH S:DX указывают на путь

Int 21h ;открываем файл

JC OPEN_ERROR ;уход на обработку ошибок

MOV HANDLE,AX ;сохраняем номер файла

Функция 3EH прерывания 21H закрывает файл, открытый методом дескриптора файла. Надо просто поместить номер файла в BX и выполнить функцию.

При возврате флаг переноса равен 0, если все в порядке, иначе он равен 1, а AX = 6, если указан неверный номер файла.

;---закрытие файла

MOV AH,3EH ;номер функции

MOV BX,HANDLE ;номер файла

Int 21h ;закрываем файл

JC CLOSE_ERROR ;уход на обработку ошибки

Функция 45H прерывания 21H создает второй дескриптор файла из существующего открытого дескриптора. В BX должен быть указан существующий номер, а в AX будет возвращен новый. Функция 46H прерывания 21H связывает второй дескриптор (помещаемый в CX) с открытым файлом (номер которого в BX) таким образом, что первый будет относиться к тому же файлу и устройству, что и последний.

62. Операции с файлами: чтение и запись данных.

BIOS использует функцию 2 прерывания 13H для чтения секторов и функцию 3 прерывания 13H для записи секторов. В обоих случаях DL должен содержать номер накопителя от 0 до 3, где 0 = A, 1 = B и т.д., DH - номер головки (стороны), 0-1. CH должен содержать номер дорожки от 0 до 39, а CL - номер сектора от 0 до 8. AL содержит число секторов, которое необходимо считать.

Допускается сразу читать не более восьми секторов, что более чем достаточно для большинства целей. ES:BX должны указывать на начало буфера в памяти, куда будут помещаться данные или откуда они будут браться.

При возврате AL будет содержать число прочитанных или записанных секторов. Если операция успешна, то флаг переноса будет равен нулю. Если он равен 1, то AH будет содержать байт статуса дисковой операции, описанный в [5.4.8].

;---в сегменте данных

BUFFER DB 4000 DUP(?) ;создаем буфер

;---читаем сектора

MOV AX,SEG BUFFER ;ES:BX должны указывать на буфер

MOV ES,AX ;

MOV BX,OFFSET BUFFER ;

MOV DL,0 ;номер накопителя

MOV DH,0 ;номер головки

MOV CH,0 ;номер дорожки

MOV CL,1 ;номер сектора

MOV AL,1 ;число секторов для чтения

MOV AH,2 ;номер функции чтения

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]