Assembler - язык неограниченных возможностей

         

Чтение и запись в файл


Функция DOS 3Fh — Чтение из файла или устройства

Ввод: АН = 3Fh
ВХ = идентификатор
СХ = число байт
DS:DX = адрес буфера для приема данных
Вывод: CF = 0 и АХ = число считанных байт, если не произошла ошибка
CF = 1 и АХ = 05h, если доступ запрещен, 06h, если неправильный идентификатор

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

Функция DOS 42h — Переместить указатель чтения/записи

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

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

Функция DOS 40h — Запись в файл или устройство

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

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


Функция DOS 68h — Сброс файловых буферов DOS на диск

Ввод: АН = 68h
ВХ = идентификатор
Вывод: CF = 0, если операция выполнена
CF = 1, если произошла ошибка (АХ = код ошибки)
Для критических участков программ использовать более эффективную функцию 0Dh.

Функция DOS 0Dh — Сброс всех файловых буферов на диск

Ввод: АН = 0Dh
Вывод: никакого

Содержание раздела