SlideShare a Scribd company logo
1 of 36
Работа с файлами на языке
Ассемблера для ПЭВМ типа
IBM PC
Основные принципы
1. Используется метода дескриптора файла.
В программе файл, с которым
необходимо работать, определяется с
помощью ASCIIZ-строки , которая содержит
обозначение файла в виде, принятом для MS
DOS.
2. Прежде чем писать данные в файл или
читать данные из файла он должен быть, во-
первых, создан, а во-вторых - открыт.
Основные принципы
3. Если программе нужно открыть или создать файл она
должна поместить адрес ASCIIZ-строки, указывающей на
этот файл, в регистры DS:DX и после этого выполнить
операцию создания (или открытия) файла.
В случае успешного выполнения операции открытия
(или создания файла) через регистр AX программе
возвращается 16-битное значение - дескриптор файла,
который фактически является файловым номером,
назначенным операционной системой файлу. Этот номер
обычно сохраняется в переменной и затем используется
при всех обращениях к файлу.
4. При создании файла создается элемент каталога, в который
помещается вся необходимая информация. Длина файла
устанавливается равной 0.
Основные принципы
5. Программа может одновременно открыть
несколько файлов и работать одновременно с несколькими
файлами. Количество максимально открытых
одновременно файлов определяется на этапе загрузки
DOS через файл CONFIG.SYS параметром
FILES=<количество файлов>. Каждому из файлов
DOS назначает свой дескриптор файла. По
умолчанию приняты следующие номера
дескрипторов:
0 – устройство стандартного ввода (CON)
1 – устройство стандартного вывода (CON)
2 – стандартное устройство вывода сообщений
об ошибках (CON)
3 – стандартный порт ввода/вывода (COM1)
4 – стандартный принтер (PRN).
Основные операции над
файлами
• - создать файл;
• - удалить файл;
• - открыть файл;
• - закрыть файл;
• - прочитать данные из файла;
• - записать данные в файл;
• - установить указатель файла
• - переименовать файл
• - установить атрибут файла.
Создать файл
Создание нового файла и одновременное его открытие
Используется функция 3ch прерывания 21h.
Содержимое регистров.
DS:DX - указывать на ASCIIZ-строку с именем файла
CX - атрибут файла (0 для обычного файла).
Пример.
file db 'a:file.txt',0
handle dw ? ; дескриптор файла
....
mov ah,3ch
mov cx,00h
lea dx,file
int 21h
jc error
mov handle,ax
.....
Теперь HANDLE будет содержать файловый номер (дескриптор) файла.
При успешной операции CF=0.
В случае ошибки CF=1, причем AX содержит код ошибки и может содержать значения:
- 03 - путь доступа не найден;
- 04 - открыто слишком много файлов;
- 05 - нет места на диске или попытка создать файл, имя которого существует, но он
защищен атрибутом "только чтение".
“Создание” существующего файла
В том случае, когда имя файла, который пытаются создать, уже существует на
диске и файл не защищен атрибутом “Только чтение”, его длина урезается до
0 и тем самым файл разрушается.
Для предотвращения этого надо перед процедурой создания использовать
функцию 4eh прерывания 21h, которая позволяет найти первый
соответствующий файл.
Пример.
buff db 128 dup(?); область DTA
.....
mov ah,1ah
mov dx,seg buf
mov ds, dx
mov dx,offset buff
int 21h ; установить область DTA
....
mov ah,4eh
mov cx,00h ; обычный файл
lea dx, file
int 21h ; проверить наличие файла
jc error
.....
Если файл не найден, то AX = 02 - не найдено или 18 - конец поиска.
Создать файл и проверить его
наличие
Функция 5bh.
Она аналогична 3ch, но не выполняется, если
создаваемый файл уже существует (код
ошибки AH=50h).
Удалить файл.
При удалении файла информация из файла физически не удаляется.
Вместо этого:
- в каталоге файла в записи, соответствующей этому файлу первый
символ имени заменяется на код e5h;
- корректируется FAT-таблица, в которой кластеры, соответствующие
удаляемому файлу, отмечаются как свободные (код 000).
Файл может быть удален только после его закрытия.
Удалить файл:
Функция 41h прерывания 21h.
Содержимое регистров:
DS:DX – указатель на ASCIIZ-строку с именем файла. Джокеры в имени
файла не допускаются.
При успешном выполнении CF=0.
Если функция не выполнилась, то CF=1
Коды ошибок.
- AL=2 , если файл не найден
- AL=3, если путь не найден
- AL=5, если произошла ошибка на диске, например, если у файла
установлен атрибут "только чтение"
Пример.
file db 'a:file.txt',0
......
mov ah,41h
lea dx,file
int 21h
jc error
....
Проверить атрибут файла
Функция 43h прерывания 21h.
Содержимое регистров:
DS:DX - указатель на ASCIIZ-строку с именем удаляемого файла,
AL=0.
При возврате текущий атрибут файла устанавливается в CX.
Пример.
.....
mov ah,43h
lea dx,file
mov al,0
int 21h
.....
Групповое удаление файлов
1. Найти первый файл (4eh)
2. Если файл не найден, то конец процедуры.
3. Указать на найденное имя парой DS:DX
4. Удалить файл (41h)
5. Найти следующий файл (4fh)
6. Если файл не найден (AX=18), то конец
процедуры
7. Идти к п.3. (самостоятельно).
Открыть файл
Открыть файл - это значит инициализировать определенные области памяти
некоторой информацией о файле.
Открытие существующего файла.
Функция 3dh прерывания 21h.
Содержимое регистров.
DS:DX - адрес ASCIIZ-строки с именем файла
AL - код доступа, с которым открывается файл:
- 0 - только для чтения;
- 1 - только для записи;
- 2 -для записи/чтения.
При возврате AX содержит файловый номер (дескриптор) и при этом:
- размер записи устанавливается равным 1;
- файловый указатель (т.е. указатель на номер записи в файле) устанавливается на
начало файла.
При успешном выполнении операции CF=0, в противном случае CF=1 и AX равен
- 2 - файл не найден;
- 4 - слишком много файлов открывается;
- 6 - ошибка на диске;
- 12 - неправильный код доступа.
Пример.
....
mov ah,3dh
lea dx,file
mov al,0 ; открыть только для чтения
int 21h
jc error
mov handle, ax ;сохранить номер файла
Закрыть файл
При закрытии файла DOS обновляет информацию в
каталоге о файле (размер файла, дата и время
изменения), очищает все системные буферы,
связанные с файлом, посылая на диск оставшуюся
информацию. Если файл не закрывается нормально,
то это может привести к потере данных.
Закрыть файл
Функция 3eh прерывания 21h.
Содержимое регистров:
BX – дескриптор (файловый номер) файла, полученный
при выполнении операции открытия или создания
файла.
При возврате CF=0, если все в порядке, иначе - CF=1,
AX=6, если указан неверный номер файла.
Пример.
.....
mov ah, 3eh
mov bx,handle
int 21h
jc error
....
Запись данных в файл
Методы доступа к данным
С точки зрения доступа к данным файлы делятся на :
• файлы последовательного доступа
(последовательные файлы)
• файлы прямого доступа.
Отличаются друг от друга способом размещения
данных.
На самом деле это деление достаточно условно и к
файлу прямого доступа можно получить
последовательный доступ, а к последовательному
файлу - прямой.
Файлы последовательного доступа
(последовательные файлы)
Свойства.
1. Хранят элементы данных один за другим,
независимо от их длины, разделяя эти элементы
данных каким-либо разделителем. Часто таким
разделителем является пара символов "возврат
каретки" (CR - код 13) и "перевод строки" (LF - код
10).
2. Элементы данных имеют переменную длину
3. Невозможно заранее определить, где в файле
расположен определенный элемент данных.
4.Чтобы найти элемент данных с заданным номером,
необходимо читать файл с самого начала,
отсчитывая нужное число разделителей.
Преимущества и недостатки
Преимущества.
1. Данные в файле располагаются
“плотно”, за счет чего эффективно
используется память диска.
Недостатки.
1. Медленный поиск элементов данных.
Файлы прямого доступа
Свойства
1. При создании такого файла заранее отводят
фиксированное место под каждый элемент
данных.
2. Для файла прямого доступа сразу известно
месторасположение элемента данных с
заданным номером.
Преимущества и недостатки
Преимущества.
1. Быстрый поиск в файле за счет
возможности установки файлового
указателя на начало определенного
элемента данных.
Недостатки.
1. Неэффективное использование места на
диске. Любой элемент данных занимает все
отведенное для него место.
Файловый указатель (ФУ)
Специальный механизм, поддерживаемый
файловой системой, который указывает
на позицию данных в файле
1. При открытии файла ФУ устанавливается
на начало файла.
2. После операции чтения/записи ФУ
устанавливается в позицию, следующую за
последним обработанным байтом.
Установка файлового указателя в
файле
Выполняется функцией 42h прерывания 21h.
Содержимое регистров.
AL=<код метода установки файлового указателя>
0 – смещение файлового указателя отсчитывается от начала
файла
1 - смещение файлового указателя отсчитывается от текущей
позиции указателя в файле
2- смещение файлового указателя отсчитывается от конца
файла.
CX – старшая половина смещения
DX – младшая половина смещения.
(Для записи в конец файла – al=2, cx=0, dx=0);
BX - файловый номер (дескриптор) файла;
При возврате
СX:DX - новое положение указателя
Запись данных в файл
Функция 40h прерывания int 21h.
Содержимое регистров
• bx- файловый номер;
• cx - число записываемых байтов;
• ds:dx - адрес области выводимых данных
• ah - 40h
При возврате
• AX - число реально записанных байтов.
• CF индицирует об ошибке и в этом случае AX содержит
код возврата.
Если CF=0, но AX<CX, то либо диск полон, либо в данных
встретился символ CTRL/Z.
Запись в последовательные
файлы
Запись в новый файл (или полная
перезапись существующего файла)
Алгоритм:
1. Открыть файл с помощью функции
3ch прерывания 21h; в этом случае его
длина будет равной 0, и файловый
указатель встанет на начало файла;
2. Проверить наличие места на диске.
3. Записать данные в файл
4. Закрыть файл.
Проверка наличия места на диске.
Функция 36h прерывания 21h.
Регистры:
DL - номер накопителя ( 0- текущий, 1 - А и т.д.).
При возврате
- bx - число доступных кластеров
- ax - число секторов в кластере
- сx - количество байтов в секторе
При возврате AX=ffffh, если произошла ошибка
дисковода.
Пример.
file db 'a:file.txt',0
buf db 2000 dup(?)
razd db 13,10 ;разделители CR и LF
....
;открыть файл
.....
mov ah,40h
mov cx,1000 ; длина одной записи
lea dx,buf
mov bx,handle
int 21h
jc error
;Добавить разделители записей
mov ah,40h
mov cx, 2 ;
lea dx,razd
mov bx,handle
int 21h
jc error
…………….
Добавление данных в существующий
последовательный файл
Алгоритм.
1. Открыть файл (функция 3dh
прерывания 21h);
2. Установить файловый указатель (ФУ)
на конец файла (функция 42h).
3. Проверить наличие места на диске
(функция 36h прерывания int 21h)
4. Записать данные в файл (функция
40h прерывания int 21h):
5. Закрыть файл.
Пример
file db 'a:file.txt',0
buf db 2000 dup(?)
....
;открыть файл
.....
; установить файловый указатель на конец файла
mov bx,handle
mov cx,0
mov dx,0
mov al,2
mov ah,42h
int 21h
jc erro2
; добавить 300 байт
mov ah,40h
mov cx,300 ; длина одной записи
lea dx,buf
mov bx,handle
int 21h
jc error
cmp ax,300
jne full_disk
; добавить символы-разделители
Запись в файл прямого доступа
Алгоритм.
1. Открыть файл (функция 3dh)
2. Вычислить позицию в файле, с которой
будет начинаться запись
3.Установить файловый указатель на
нужную позицию в файле (функция
42h);
4. Проверить место на диске (функция
36h)
5. Записать данные в файл (функция 40h)
6. Закрыть файл (функция 3еh).
Пример.
file db 'a:file.txt',0
buf db 2000 dup(?)
....
;открыть файл
.....
; вычислить позицию в файле
mov ax,30 ; длина записи 30 байт
mov cx, 54 ; найдем позицию 55 записи
mul cx ; dx:ax содержит начало 55 записи
mov cx,dx
mov dx,ax
; установить файловый указатель
mov bx,handle
mov al,0
mov ah,42h
int 21h
jc erro2
; добавить одну запись
mov ah,40h
mov cx,30 ; длина одной записи
lea dx,buf
Mov bx,handle
int 21h
jc error
cmp ax,30
jne full_disk
Чтение данных.
Функция 3fh прерывания int 21h.
Содержимое регистров.
DS:DX – буфер в программе для ввода данных
BX - файловый номер (дескриптор) файла
CX - число читаемых байтов
AH=3fh
При возврате
AX - число прочитанных байт.
Если во время операции чтения количество прочитанных
байт меньше, чем было запрошено (AX<CX), то это
означает, что достигнут конец файла.
Чтение данных из
последовательного файла
Алгоритм.
1. Открыть файл (функция 3dh)
2. Считать порцию данных в буфер в
программе (функция 3fh)
3. Закрыть файл.
Чтение данных из файла прямого
доступа.
Алгоритм.
1. Открыть файл (функция 3dh)
2. Вычислить позицию в файле, с которой будет
начинаться чтение
3.Установить файловый указатель на нужную
позицию в файле (функция 42h);
4. Прочитать данные из файла (функция 3fh)
6. Закрыть файл (функция 3еh).
Переименование файла
Выполняется функцией 56h.
Регистры:
DS:DX – указатель на имя исходного
файла
ES:DI – указатель на новое имя файла.

More Related Content

Similar to НуП_Лекция 8. Работа с файлами на Ассемблере.ppt

Lecture14
Lecture14Lecture14
Lecture14Muuluu
 
Анализ и оценка систем адресации данных в современных ЭВМ
Анализ и оценка систем адресации данных в современных ЭВМАнализ и оценка систем адресации данных в современных ЭВМ
Анализ и оценка систем адресации данных в современных ЭВМSergey Gerasimov
 
Linux files, file systems, block devices.
Linux files, file systems, block devices.Linux files, file systems, block devices.
Linux files, file systems, block devices.Vikentsi Lapa
 
Презентация на тему: Файлы и файловая система
Презентация на тему: Файлы и файловая системаПрезентация на тему: Файлы и файловая система
Презентация на тему: Файлы и файловая система2berkas
 
загрузить в DSpace
загрузить в DSpaceзагрузить в DSpace
загрузить в DSpaceFedor Krasnov
 
Fajlovye sistemy
Fajlovye sistemyFajlovye sistemy
Fajlovye sistemy1nlp
 
презентация файлы и папки
презентация файлы и папкипрезентация файлы и папки
презентация файлы и папкиANSevrukova
 
файловая система
файловая системафайловая система
файловая системаEkaterina
 
05 хранение информации
05 хранение информации05 хранение информации
05 хранение информацииSergey Lomakin
 
File input/output in VHDL
File input/output in VHDLFile input/output in VHDL
File input/output in VHDLvitaliykulanov
 
структура данных на магнитных дисках
структура данных на магнитных дискахструктура данных на магнитных дисках
структура данных на магнитных дискахmasik22
 

Similar to НуП_Лекция 8. Работа с файлами на Ассемблере.ppt (20)

Lecture14
Lecture14Lecture14
Lecture14
 
Анализ и оценка систем адресации данных в современных ЭВМ
Анализ и оценка систем адресации данных в современных ЭВМАнализ и оценка систем адресации данных в современных ЭВМ
Анализ и оценка систем адресации данных в современных ЭВМ
 
1
11
1
 
Linux files, file systems, block devices.
Linux files, file systems, block devices.Linux files, file systems, block devices.
Linux files, file systems, block devices.
 
ЛР 3.docx
ЛР 3.docxЛР 3.docx
ЛР 3.docx
 
file handling in c++
file handling in c++file handling in c++
file handling in c++
 
Презентация на тему: Файлы и файловая система
Презентация на тему: Файлы и файловая системаПрезентация на тему: Файлы и файловая система
Презентация на тему: Файлы и файловая система
 
Step 6
Step 6Step 6
Step 6
 
загрузить в DSpace
загрузить в DSpaceзагрузить в DSpace
загрузить в DSpace
 
Fajlovye sistemy
Fajlovye sistemyFajlovye sistemy
Fajlovye sistemy
 
презентация файлы и папки
презентация файлы и папкипрезентация файлы и папки
презентация файлы и папки
 
Administrarea DSpace
Administrarea DSpaceAdministrarea DSpace
Administrarea DSpace
 
файловая система
файловая системафайловая система
файловая система
 
05 хранение информации
05 хранение информации05 хранение информации
05 хранение информации
 
Презентация 4
Презентация 4Презентация 4
Презентация 4
 
Команды Ms dos
Команды Ms dosКоманды Ms dos
Команды Ms dos
 
File system7
File system7File system7
File system7
 
89
8989
89
 
File input/output in VHDL
File input/output in VHDLFile input/output in VHDL
File input/output in VHDL
 
структура данных на магнитных дисках
структура данных на магнитных дискахструктура данных на магнитных дисках
структура данных на магнитных дисках
 

More from dinarium2016

НуП_Лекция 5. Управление видеосистемой.ppt
НуП_Лекция 5. Управление видеосистемой.pptНуП_Лекция 5. Управление видеосистемой.ppt
НуП_Лекция 5. Управление видеосистемой.pptdinarium2016
 
НуП_Лекция 2. Управление программами.ppt
НуП_Лекция 2. Управление программами.pptНуП_Лекция 2. Управление программами.ppt
НуП_Лекция 2. Управление программами.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L09s.ppt
Проектирование_и_архитектура_ПС_2022_L09s.pptПроектирование_и_архитектура_ПС_2022_L09s.ppt
Проектирование_и_архитектура_ПС_2022_L09s.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L08s.ppt
Проектирование_и_архитектура_ПС_2022_L08s.pptПроектирование_и_архитектура_ПС_2022_L08s.ppt
Проектирование_и_архитектура_ПС_2022_L08s.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L07s.ppt
Проектирование_и_архитектура_ПС_2022_L07s.pptПроектирование_и_архитектура_ПС_2022_L07s.ppt
Проектирование_и_архитектура_ПС_2022_L07s.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L06.ppt
Проектирование_и_архитектура_ПС_2022_L06.pptПроектирование_и_архитектура_ПС_2022_L06.ppt
Проектирование_и_архитектура_ПС_2022_L06.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L05s.ppt
Проектирование_и_архитектура_ПС_2022_L05s.pptПроектирование_и_архитектура_ПС_2022_L05s.ppt
Проектирование_и_архитектура_ПС_2022_L05s.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L04s.ppt
Проектирование_и_архитектура_ПС_2022_L04s.pptПроектирование_и_архитектура_ПС_2022_L04s.ppt
Проектирование_и_архитектура_ПС_2022_L04s.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L03s.ppt
Проектирование_и_архитектура_ПС_2022_L03s.pptПроектирование_и_архитектура_ПС_2022_L03s.ppt
Проектирование_и_архитектура_ПС_2022_L03s.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L02s.ppt
Проектирование_и_архитектура_ПС_2022_L02s.pptПроектирование_и_архитектура_ПС_2022_L02s.ppt
Проектирование_и_архитектура_ПС_2022_L02s.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L01.ppt
Проектирование_и_архитектура_ПС_2022_L01.pptПроектирование_и_архитектура_ПС_2022_L01.ppt
Проектирование_и_архитектура_ПС_2022_L01.pptdinarium2016
 

More from dinarium2016 (11)

НуП_Лекция 5. Управление видеосистемой.ppt
НуП_Лекция 5. Управление видеосистемой.pptНуП_Лекция 5. Управление видеосистемой.ppt
НуП_Лекция 5. Управление видеосистемой.ppt
 
НуП_Лекция 2. Управление программами.ppt
НуП_Лекция 2. Управление программами.pptНуП_Лекция 2. Управление программами.ppt
НуП_Лекция 2. Управление программами.ppt
 
Проектирование_и_архитектура_ПС_2022_L09s.ppt
Проектирование_и_архитектура_ПС_2022_L09s.pptПроектирование_и_архитектура_ПС_2022_L09s.ppt
Проектирование_и_архитектура_ПС_2022_L09s.ppt
 
Проектирование_и_архитектура_ПС_2022_L08s.ppt
Проектирование_и_архитектура_ПС_2022_L08s.pptПроектирование_и_архитектура_ПС_2022_L08s.ppt
Проектирование_и_архитектура_ПС_2022_L08s.ppt
 
Проектирование_и_архитектура_ПС_2022_L07s.ppt
Проектирование_и_архитектура_ПС_2022_L07s.pptПроектирование_и_архитектура_ПС_2022_L07s.ppt
Проектирование_и_архитектура_ПС_2022_L07s.ppt
 
Проектирование_и_архитектура_ПС_2022_L06.ppt
Проектирование_и_архитектура_ПС_2022_L06.pptПроектирование_и_архитектура_ПС_2022_L06.ppt
Проектирование_и_архитектура_ПС_2022_L06.ppt
 
Проектирование_и_архитектура_ПС_2022_L05s.ppt
Проектирование_и_архитектура_ПС_2022_L05s.pptПроектирование_и_архитектура_ПС_2022_L05s.ppt
Проектирование_и_архитектура_ПС_2022_L05s.ppt
 
Проектирование_и_архитектура_ПС_2022_L04s.ppt
Проектирование_и_архитектура_ПС_2022_L04s.pptПроектирование_и_архитектура_ПС_2022_L04s.ppt
Проектирование_и_архитектура_ПС_2022_L04s.ppt
 
Проектирование_и_архитектура_ПС_2022_L03s.ppt
Проектирование_и_архитектура_ПС_2022_L03s.pptПроектирование_и_архитектура_ПС_2022_L03s.ppt
Проектирование_и_архитектура_ПС_2022_L03s.ppt
 
Проектирование_и_архитектура_ПС_2022_L02s.ppt
Проектирование_и_архитектура_ПС_2022_L02s.pptПроектирование_и_архитектура_ПС_2022_L02s.ppt
Проектирование_и_архитектура_ПС_2022_L02s.ppt
 
Проектирование_и_архитектура_ПС_2022_L01.ppt
Проектирование_и_архитектура_ПС_2022_L01.pptПроектирование_и_архитектура_ПС_2022_L01.ppt
Проектирование_и_архитектура_ПС_2022_L01.ppt
 

НуП_Лекция 8. Работа с файлами на Ассемблере.ppt

  • 1. Работа с файлами на языке Ассемблера для ПЭВМ типа IBM PC
  • 2. Основные принципы 1. Используется метода дескриптора файла. В программе файл, с которым необходимо работать, определяется с помощью ASCIIZ-строки , которая содержит обозначение файла в виде, принятом для MS DOS. 2. Прежде чем писать данные в файл или читать данные из файла он должен быть, во- первых, создан, а во-вторых - открыт.
  • 3. Основные принципы 3. Если программе нужно открыть или создать файл она должна поместить адрес ASCIIZ-строки, указывающей на этот файл, в регистры DS:DX и после этого выполнить операцию создания (или открытия) файла. В случае успешного выполнения операции открытия (или создания файла) через регистр AX программе возвращается 16-битное значение - дескриптор файла, который фактически является файловым номером, назначенным операционной системой файлу. Этот номер обычно сохраняется в переменной и затем используется при всех обращениях к файлу. 4. При создании файла создается элемент каталога, в который помещается вся необходимая информация. Длина файла устанавливается равной 0.
  • 4. Основные принципы 5. Программа может одновременно открыть несколько файлов и работать одновременно с несколькими файлами. Количество максимально открытых одновременно файлов определяется на этапе загрузки DOS через файл CONFIG.SYS параметром FILES=<количество файлов>. Каждому из файлов DOS назначает свой дескриптор файла. По умолчанию приняты следующие номера дескрипторов: 0 – устройство стандартного ввода (CON) 1 – устройство стандартного вывода (CON) 2 – стандартное устройство вывода сообщений об ошибках (CON) 3 – стандартный порт ввода/вывода (COM1) 4 – стандартный принтер (PRN).
  • 5. Основные операции над файлами • - создать файл; • - удалить файл; • - открыть файл; • - закрыть файл; • - прочитать данные из файла; • - записать данные в файл; • - установить указатель файла • - переименовать файл • - установить атрибут файла.
  • 6. Создать файл Создание нового файла и одновременное его открытие Используется функция 3ch прерывания 21h. Содержимое регистров. DS:DX - указывать на ASCIIZ-строку с именем файла CX - атрибут файла (0 для обычного файла). Пример. file db 'a:file.txt',0 handle dw ? ; дескриптор файла .... mov ah,3ch mov cx,00h lea dx,file int 21h jc error mov handle,ax ..... Теперь HANDLE будет содержать файловый номер (дескриптор) файла. При успешной операции CF=0. В случае ошибки CF=1, причем AX содержит код ошибки и может содержать значения: - 03 - путь доступа не найден; - 04 - открыто слишком много файлов; - 05 - нет места на диске или попытка создать файл, имя которого существует, но он защищен атрибутом "только чтение".
  • 7. “Создание” существующего файла В том случае, когда имя файла, который пытаются создать, уже существует на диске и файл не защищен атрибутом “Только чтение”, его длина урезается до 0 и тем самым файл разрушается. Для предотвращения этого надо перед процедурой создания использовать функцию 4eh прерывания 21h, которая позволяет найти первый соответствующий файл. Пример. buff db 128 dup(?); область DTA ..... mov ah,1ah mov dx,seg buf mov ds, dx mov dx,offset buff int 21h ; установить область DTA .... mov ah,4eh mov cx,00h ; обычный файл lea dx, file int 21h ; проверить наличие файла jc error ..... Если файл не найден, то AX = 02 - не найдено или 18 - конец поиска.
  • 8. Создать файл и проверить его наличие Функция 5bh. Она аналогична 3ch, но не выполняется, если создаваемый файл уже существует (код ошибки AH=50h).
  • 9. Удалить файл. При удалении файла информация из файла физически не удаляется. Вместо этого: - в каталоге файла в записи, соответствующей этому файлу первый символ имени заменяется на код e5h; - корректируется FAT-таблица, в которой кластеры, соответствующие удаляемому файлу, отмечаются как свободные (код 000). Файл может быть удален только после его закрытия. Удалить файл: Функция 41h прерывания 21h. Содержимое регистров: DS:DX – указатель на ASCIIZ-строку с именем файла. Джокеры в имени файла не допускаются. При успешном выполнении CF=0. Если функция не выполнилась, то CF=1 Коды ошибок. - AL=2 , если файл не найден - AL=3, если путь не найден - AL=5, если произошла ошибка на диске, например, если у файла установлен атрибут "только чтение"
  • 10. Пример. file db 'a:file.txt',0 ...... mov ah,41h lea dx,file int 21h jc error ....
  • 11. Проверить атрибут файла Функция 43h прерывания 21h. Содержимое регистров: DS:DX - указатель на ASCIIZ-строку с именем удаляемого файла, AL=0. При возврате текущий атрибут файла устанавливается в CX. Пример. ..... mov ah,43h lea dx,file mov al,0 int 21h .....
  • 12. Групповое удаление файлов 1. Найти первый файл (4eh) 2. Если файл не найден, то конец процедуры. 3. Указать на найденное имя парой DS:DX 4. Удалить файл (41h) 5. Найти следующий файл (4fh) 6. Если файл не найден (AX=18), то конец процедуры 7. Идти к п.3. (самостоятельно).
  • 13. Открыть файл Открыть файл - это значит инициализировать определенные области памяти некоторой информацией о файле. Открытие существующего файла. Функция 3dh прерывания 21h. Содержимое регистров. DS:DX - адрес ASCIIZ-строки с именем файла AL - код доступа, с которым открывается файл: - 0 - только для чтения; - 1 - только для записи; - 2 -для записи/чтения. При возврате AX содержит файловый номер (дескриптор) и при этом: - размер записи устанавливается равным 1; - файловый указатель (т.е. указатель на номер записи в файле) устанавливается на начало файла. При успешном выполнении операции CF=0, в противном случае CF=1 и AX равен - 2 - файл не найден; - 4 - слишком много файлов открывается; - 6 - ошибка на диске; - 12 - неправильный код доступа.
  • 14. Пример. .... mov ah,3dh lea dx,file mov al,0 ; открыть только для чтения int 21h jc error mov handle, ax ;сохранить номер файла
  • 15. Закрыть файл При закрытии файла DOS обновляет информацию в каталоге о файле (размер файла, дата и время изменения), очищает все системные буферы, связанные с файлом, посылая на диск оставшуюся информацию. Если файл не закрывается нормально, то это может привести к потере данных. Закрыть файл Функция 3eh прерывания 21h. Содержимое регистров: BX – дескриптор (файловый номер) файла, полученный при выполнении операции открытия или создания файла. При возврате CF=0, если все в порядке, иначе - CF=1, AX=6, если указан неверный номер файла.
  • 16. Пример. ..... mov ah, 3eh mov bx,handle int 21h jc error ....
  • 17. Запись данных в файл Методы доступа к данным С точки зрения доступа к данным файлы делятся на : • файлы последовательного доступа (последовательные файлы) • файлы прямого доступа. Отличаются друг от друга способом размещения данных. На самом деле это деление достаточно условно и к файлу прямого доступа можно получить последовательный доступ, а к последовательному файлу - прямой.
  • 18. Файлы последовательного доступа (последовательные файлы) Свойства. 1. Хранят элементы данных один за другим, независимо от их длины, разделяя эти элементы данных каким-либо разделителем. Часто таким разделителем является пара символов "возврат каретки" (CR - код 13) и "перевод строки" (LF - код 10). 2. Элементы данных имеют переменную длину 3. Невозможно заранее определить, где в файле расположен определенный элемент данных. 4.Чтобы найти элемент данных с заданным номером, необходимо читать файл с самого начала, отсчитывая нужное число разделителей.
  • 19. Преимущества и недостатки Преимущества. 1. Данные в файле располагаются “плотно”, за счет чего эффективно используется память диска. Недостатки. 1. Медленный поиск элементов данных.
  • 20. Файлы прямого доступа Свойства 1. При создании такого файла заранее отводят фиксированное место под каждый элемент данных. 2. Для файла прямого доступа сразу известно месторасположение элемента данных с заданным номером.
  • 21. Преимущества и недостатки Преимущества. 1. Быстрый поиск в файле за счет возможности установки файлового указателя на начало определенного элемента данных. Недостатки. 1. Неэффективное использование места на диске. Любой элемент данных занимает все отведенное для него место.
  • 22. Файловый указатель (ФУ) Специальный механизм, поддерживаемый файловой системой, который указывает на позицию данных в файле 1. При открытии файла ФУ устанавливается на начало файла. 2. После операции чтения/записи ФУ устанавливается в позицию, следующую за последним обработанным байтом.
  • 23. Установка файлового указателя в файле Выполняется функцией 42h прерывания 21h. Содержимое регистров. AL=<код метода установки файлового указателя> 0 – смещение файлового указателя отсчитывается от начала файла 1 - смещение файлового указателя отсчитывается от текущей позиции указателя в файле 2- смещение файлового указателя отсчитывается от конца файла. CX – старшая половина смещения DX – младшая половина смещения. (Для записи в конец файла – al=2, cx=0, dx=0); BX - файловый номер (дескриптор) файла; При возврате СX:DX - новое положение указателя
  • 24. Запись данных в файл Функция 40h прерывания int 21h. Содержимое регистров • bx- файловый номер; • cx - число записываемых байтов; • ds:dx - адрес области выводимых данных • ah - 40h При возврате • AX - число реально записанных байтов. • CF индицирует об ошибке и в этом случае AX содержит код возврата. Если CF=0, но AX<CX, то либо диск полон, либо в данных встретился символ CTRL/Z.
  • 26. Запись в новый файл (или полная перезапись существующего файла) Алгоритм: 1. Открыть файл с помощью функции 3ch прерывания 21h; в этом случае его длина будет равной 0, и файловый указатель встанет на начало файла; 2. Проверить наличие места на диске. 3. Записать данные в файл 4. Закрыть файл.
  • 27. Проверка наличия места на диске. Функция 36h прерывания 21h. Регистры: DL - номер накопителя ( 0- текущий, 1 - А и т.д.). При возврате - bx - число доступных кластеров - ax - число секторов в кластере - сx - количество байтов в секторе При возврате AX=ffffh, если произошла ошибка дисковода.
  • 28. Пример. file db 'a:file.txt',0 buf db 2000 dup(?) razd db 13,10 ;разделители CR и LF .... ;открыть файл ..... mov ah,40h mov cx,1000 ; длина одной записи lea dx,buf mov bx,handle int 21h jc error ;Добавить разделители записей mov ah,40h mov cx, 2 ; lea dx,razd mov bx,handle int 21h jc error …………….
  • 29. Добавление данных в существующий последовательный файл Алгоритм. 1. Открыть файл (функция 3dh прерывания 21h); 2. Установить файловый указатель (ФУ) на конец файла (функция 42h). 3. Проверить наличие места на диске (функция 36h прерывания int 21h) 4. Записать данные в файл (функция 40h прерывания int 21h): 5. Закрыть файл.
  • 30. Пример file db 'a:file.txt',0 buf db 2000 dup(?) .... ;открыть файл ..... ; установить файловый указатель на конец файла mov bx,handle mov cx,0 mov dx,0 mov al,2 mov ah,42h int 21h jc erro2 ; добавить 300 байт mov ah,40h mov cx,300 ; длина одной записи lea dx,buf mov bx,handle int 21h jc error cmp ax,300 jne full_disk ; добавить символы-разделители
  • 31. Запись в файл прямого доступа Алгоритм. 1. Открыть файл (функция 3dh) 2. Вычислить позицию в файле, с которой будет начинаться запись 3.Установить файловый указатель на нужную позицию в файле (функция 42h); 4. Проверить место на диске (функция 36h) 5. Записать данные в файл (функция 40h) 6. Закрыть файл (функция 3еh).
  • 32. Пример. file db 'a:file.txt',0 buf db 2000 dup(?) .... ;открыть файл ..... ; вычислить позицию в файле mov ax,30 ; длина записи 30 байт mov cx, 54 ; найдем позицию 55 записи mul cx ; dx:ax содержит начало 55 записи mov cx,dx mov dx,ax ; установить файловый указатель mov bx,handle mov al,0 mov ah,42h int 21h jc erro2 ; добавить одну запись mov ah,40h mov cx,30 ; длина одной записи lea dx,buf Mov bx,handle int 21h jc error cmp ax,30 jne full_disk
  • 33. Чтение данных. Функция 3fh прерывания int 21h. Содержимое регистров. DS:DX – буфер в программе для ввода данных BX - файловый номер (дескриптор) файла CX - число читаемых байтов AH=3fh При возврате AX - число прочитанных байт. Если во время операции чтения количество прочитанных байт меньше, чем было запрошено (AX<CX), то это означает, что достигнут конец файла.
  • 34. Чтение данных из последовательного файла Алгоритм. 1. Открыть файл (функция 3dh) 2. Считать порцию данных в буфер в программе (функция 3fh) 3. Закрыть файл.
  • 35. Чтение данных из файла прямого доступа. Алгоритм. 1. Открыть файл (функция 3dh) 2. Вычислить позицию в файле, с которой будет начинаться чтение 3.Установить файловый указатель на нужную позицию в файле (функция 42h); 4. Прочитать данные из файла (функция 3fh) 6. Закрыть файл (функция 3еh).
  • 36. Переименование файла Выполняется функцией 56h. Регистры: DS:DX – указатель на имя исходного файла ES:DI – указатель на новое имя файла.