Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие Макушкиной по МОЯ.doc
Скачиваний:
49
Добавлен:
16.11.2019
Размер:
1.33 Mб
Скачать

7.4 Чтение, запись и переименование файла

Чтение из файла или устройства

Ввод:

АН = 3Fh ВХ = идентификатор СХ = число байт DS:DX = адрес буфера для приема данных

Вывод:

CF = 0 и АХ = число считанных байт, если не произошла ошибка CF = 1 и АХ = 05h, если доступ запрещен, 06h, если неправильный идентификатор

Пример:

mov bx,ax ; идентификатор файла в ВХ

mov cx,1 ; считывать один байт

mov dx,offset buffer ; начало буфера - в DX

mov ah,3Fh ; чтение файла

int 21h

Если при чтении из файла число фактически считанных байт в АХ меньше, чем заказанное число в СХ, при чтении был достигнут конец файла. Каждая следующая операция чтения, так же как и записи, начинается не с начала файла, а с того байта, на котором остановилась предыдущая операция чтения/записи. Если требуется считать (или записать) произвольный участок файла, используют функцию 42h (функция lseek в С).

7.5 Перемещение указателя чтения/записи

Ввод:

АН = 42h ВХ = идентификатор CX:DX = расстояние, на которое надо переместить указатель (со знаком) AL = перемещение от:

0 — от начала файла 1 — от текущей позиции 2 — от конца файла

Вывод:

CF = 0 и CX:DX = новое значение указателя (в байтах от начала файла), если не произошла ошибка CF = 1 и АХ = 06h, если неправильный идентификатор

Пример:

mov ax,4201h ; переместить указатель файла от текущей

dec cx ; позиции назад на 1

dec cx ; CX = FFFFh

mov dx,cx ; DX = FFFFh

int 21h

Указатель можно установить за реальными пределами файла: если указатель устанавливается в отрицательное число, следующая операция чтения/записи вызовет ошибку; если указатель устанавливается в положительное число, большее длины файла, следующая операция записи увеличит размер файла. Эта функция также часто используется для определения длины файла — достаточно вызвать ее с СХ = 0, DX = 0, AL = 2, и в CX:DX будет возвращена длина файла в байтах.

7.6 Запись в файл или устройство

Ввод:

АН = 40h ВХ = идентификатор СХ = число байт DS:DX = адрес буфера с данными

Вывод:

CF = 0 и АХ = число записанных байт, если не произошла ошибка CF = 1 и АХ = 05h, если доступ запрещен, 06h, если неправильный идентификатор

Если при записи в файл указать СХ = 0, файл будет обрезан по текущему значению указателя. При записи в файл на самом деле происходит запись в буфер DOS, данные из которого сбрасываются на диск при закрытии файла или если их количество превышает размер сектора диска. Для немедленного сброса буфера можно использовать функцию 68h (функция fflush в С).

Пример: с переносом указателя и записью в файл

mov ax,4201h ; переместить указатель файла от текущей

dec cx ; позиции назад на 1

dec cx ; CX = FFFFh

mov dx,cx ; DX = FFFFh

int 21h

mov ah,40h ; записать в файл