Перед вызовом прерывания требуется записать в регистры следующие значения:
· в АН – значение 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 |


