Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 3Eh;

·  в ВХ – дескриптор файла. Возможный код ошибки: 06h.

Прерывание Int 21h, функция 3Fh: чтение информации из файла

Функция считывает данные из файла в указанный буфер. Считывание начинается с текущей позиции указателя файла.

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 3Fh;

·  в ВХ – дескриптор файла;

·  в СХ – число байтов, подлежащих считыванию;

·  в DS: DX – указатель на буфер, в который должна быть занесена считанная информация.

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

Возможные коды ошибки: 05h, 06h.

Прерывание Int 21h, функция 40h: запись информации в файл

Функция записывает данные из указанного буфера в файл. Запись начинается с текущей позиции указателя файла. )'»

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 40h; i

·  в ВХ'– дескриптор файла; :

·  в СХ.– число байтов, подлежащих записи; •

·  в DS: DX – указатель на буфер, информация из которого записывается в файл.

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

НЕ нашли? Не то? Что вы ищете?

Возможные коды ошибки: 05h, 06h.

Прерывание Int 21h, функция 41 h: удалить файл

Удаляет указанный файл.

Функция не допускает групповых операций и не удаляет файлы, имеющие атрибут «только для чтения» (этот атрибут нужно изменить при помощи функции 43h, чтобы файл можно было удалить).

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 41 h;

·  в DS:DX – указатель на имя файла в виде строки ASCIIZ.

Возможные коды ошибки: 02h, 03h, 05h.

Прерывание Int 21h, функция 42h: изменить положение указателя файла

Функция смещает указатель на заданное число байтов.

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 42 h;

·  в AL – код точки отсчета положения указа– отсчет ведется от начала файла, 1 – от текущего положения указателя, 2 – от конца файла);

·  в ВХ – дескриптор файла;

·  в СХ – старшая часть смещения;

·  в DX – младшая часть смещения.

В случае успешного завершения операции функция возвращает в регистрах DX и АХ новое положение указателя относительно начала файла:

·  в DX – старшая часть значения положения указателя

·  в АХ – младшая часть значения.

Возможные коды ошибки: 01h, 06h.

Прерывание Int 21h, функция 43h, подфункция 00h: получить атрибуты файла

Подфункция определяет атрибуты указанного файла.

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АХ – значение 4300h;

·  в DS: DX – указатель на имя файла в виде строки ASCIIZ.

В случае успешного завершения операции функция возвращает в регистре СХ слово атрибутов файла (см. табл. 6.8).

Возможные коды ошибки: 01h,02h,03h,05h.

Прерывание Int 21h, функция 43h, подфункция 01 h: изменить атрибуты файла

Подфункция изменяет атрибуты указанного файла.

Функция не может изменить атрибуты метки тома или каталога.

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АХ – значение 4301h;

·  в СХ – новые значения атрибутов файла (см. табл. 6.8);

·  в DS: DX – указатель на имя файла в виде строки ASCIIZ.

Возможные коды ошибки: 01h,02h, 03h, 05h.

Прерывание Int 21h, функция 47h: определить имя текущего каталога на указанном устройстве

Выдает имя текущего (рабочего) каталога на указанном логическом диске. Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 47h;

·  в DL – код логического диска (0 – диск, используемый по умолчанию (текущий), 1 – диск «А:», 2 – диск «В:» и т. д.);

·  в DS:SI – указатель на буфер размером 64 байта, выделенный для записи имени каталога.

В случае успешного выполнения функции в буфер будет записан путь от корневого каталога до текущего в виде строки ASCIIZ. Описание пути не включает в себя идентификатор диска и начальный обратный слэш «\».

Возможный код ошибки: 0Fh.

Прерывание Int 21h, функция 4Eh: найти первый файл заданного типа

Функция ищет в указанном каталоге первый файл, соответствующий заданной спецификации.

Получить адрес области обмена с диском DTA можно при помощи функции 2Fh.

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 4Eh;

·  в СХ – маску атрибутов файла (см. табл. 6.8);

·  в DS: DX – указатель на спецификацию файла в виде строки ASCIIZ (спецификация может включать в себя путь и шаблоны).

В случае успешного завершения функция возвращает в области DTA блок данных для первого найденного файла. Формат блока данных приведен в табл. 6.10.

Таблица 6.10. Формат блока данных файла для функций поиска

Смещение

Размер элемента

Описание

00h

BYTE

Буква логического диска

01h

11 байт

Шаблон для поиска

0Сh

BYTE

Атрибуты поиска

0Dh

WORD

Счетчик элементов внутри каталога

0Fh

WORD

Номер кластера начала родительского каталога

11h

4 байта

Зарезервировано

15h

BYTE

Атрибуты найденного файла

16h

WORD

Время создания файла:

биты 0-4 – двухсекундные приращения;

биты 5-10 –минуты;

биты 11-15 –часы

18h

WORD

Дата создания файла:

биты 0-4 – день;

биты 5-8 – месяц;

биты 9-15 – номер года (относительно 1980 г.)

1Ah

DWORD

Размер файла в байтах

1Eh

13 байт

Имя и расширение файла в виде строки ASCI1Z

Прерывание Int 21h, функция 56h: переименовать или переместить файл.

Функция изменяет текущее имя файла на заданное и может выполнить при этом перемещение файла из одного каталога в другой (в пределах одного логического диска). Возможно также переименование (но не перемещение) каталогов.

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 56h;

·  в DS: DX – указатель на спецификацию существующего файла в виде строки ASCIIZ (спецификация может включать в себя путь, но не должна включать шаблоны групповых операций);

·  в ES: ВХ – новое имя файла в виде строки ASCIIZ (может включать в себя путь, но не должна включать шаблоны).

Возможные коды ошибки: 02h, 03h, 05h, 11h.

Прерывание Int 21h, функция 5Ah: открыть существующий файл

Открывает файл для чтения, записи или дозаписи информации. Указатель при этом устанавливается в начало файла.

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 5Ah;

·  в СХ – атрибуты файла (см. табл. 6.2);

·  в DS: DX – указатель на путь в виде строки ASCIIZ (в конце строки должно находиться на менее 13 байт, заполненных нулями для получения сгенерированного имени).

В случае успешного завершения операции функция возвращает в регистре АХ дескриптор файла, открытого для чтения и записи в режиме совместимости; DS:DX при этом будет указывать на путь, дополненный сгенерированным именем файла.

Возможные коды ошибки: 03h, 04h, 05h.

Прерывание Int 21h, функция 5Bh: создать новый файл

Создает файл для записи. От функции 3Ch отличается тем, что завершается ошибкой, если файл с таким именем уже существует.

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 5Bh;

·  в СХ – атрибуты создаваемого файла (см. табл. 6.2);

·  в DS: DX – указатель на имя файла в виде строки ASCIIZ.

В случае успешного завершения операции функция возвращает в регистре АХ дескриптор файла.

Возможные коды ошибки: 03h, 04h, 05h, 50h.

Далее приведен пример программы, которая создает подкаталог Testing на диске d:\, а в нем каталог base. В каталоге base создается файл test2.txt, в который копируется 10 первых символов из файла test1.txt.

Пример работы с файловой системой

masm

model small

.stack 100h

.data

buffer db 10 dup (?) ; буфер для хранения считанной строки из файла

catalog1 db 'd:\Testing',0 ; имя каталога с указание имени корневого

; диска

catalog2 db 'base',0 ; имя каталога

catalog3 db 'd:\temp', 0

name1 db 'test1.txt',0 ; имя файла без указания корневого диска

name2 db 'test2.txt',0

descriptor dw 2 dup (?) ; массив из двух двухбайтных элементов

.code

prog:

; Очистка экрана

mov ah, 00h

mov al, 03h

int 10h

mov ax,@data

mov ds, ax

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

; Создать подкаталог Testing на диске d:\

mov dx, offset catalog1

mov ah,39h

int 21h

Так как имя подкаталога base не содержит явного указания на имя корневого диска, а также на имя каталога верхнего уровня требуется выбрать подкаталог d:\Testing в качестве базового. Только тогда в нем будет создан подкаталог base.

; Блок№1 ; Переход в подкаталог d:\Testing

lea dx, catalog1

mov ah,3bh

int 21h

Так как в качестве базового выбран каталог d:\Testing, в нем будет создан подкаталог base.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10