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


ЧТЕНИЕ ИЗ ФАЙЛА И ЗАПИСЬ ДАННЫХ В ФАЙЛ
Метод доступа к дисковой памяти, поддерживающий использова-ние оглавления, «блокирование», «разблокирование» записей, обес-печивается прерыванием DOS 21H. Более низкий уровень, обеспечи-вающий абсолютную адресацию дисковых секторов (также через DOS), выполняется посредством прырываний 25H и 26H. Самый низкий уро-вень обеспечивается прерыванием BIOS 13H, которое позволяет вы-полнить произвольную адресацию в дисковой памяти по номеру дорож-ки и сектора.
В расширенной версии функций DOS операции создания и откры-тия файла устанавливают в регистре AX двухбайтовое число, пред-ставляющее собой файловый номер. Этот номер используется для дальнейшего доступа к файлу.
Для доступа к диску при создании или открытии файла ис-пользуется ASCIIZ-строка, в которой указывается полное имя файла, и функции DOS 3СН или 3DH. Успешная операция устанавливает флаг CF в 0 и помещает файловый номер в регистр AX. Этот номер необхо-димо сохранить в элементе данных DW и использовать для всех пос-ледующих операций над дисковым файлом.
При неуспешной операции флаг CF устанавливается в 1, а в ре-гистр AX помещается код ошибки, зависящий от операции:
02 — Файл не найден
03 — Путь доступа не найден
04 — Открыто слишком много файлов
05 — Доступ не разрешен
06 — Ошибка файлового номера
08 — Недостаточно памяти
10 — Ошибка оборудования
12 — Ошибка кода доступа

1. Создание файла на диске.
Для создания нового файла или при переписывании старого файла используется функция 3CH. При этом регистр DX должен содер-жать адрес ASCIIZ-строки, а регистр CX — необходимый атрибут:
00 — обычный файл
01 — файл можно только читать
02 — «спрятанный» файл
04 — системный файл DOS
20 — архивный файл
При правильном открытии опeрация создает элемент оглавле-ния с данным атрибутом, очищает флаг CF и устанавливает файловый номер в регистре AX. Если создаваемый файл уже существует, то длина его устанавливается в 0. В случае возникновения ошибки ус-танавливается флаг CF в 1 и в AX код возврата 03, 04 или 05.
MOV AH,3CH
MOV CX,00
LEA DX,NAMEFILE ;имя файла
INT 21H
JC ERROR
MOV NUMBER,AX ;файловый номер

2. Закрытие файла.
По окончании работы с файлом необходимо закрыть файл. Для этого в регистр BX записывается номер файла и указывается фун-кция DOS 3EH. Эта операция записывает все оставшиеся данные из буфера на диск и корректирует оглавление и таблицу FAT. Единствен-ным кодом ошибки, возвращаемым этой функцией, является 06.
MOV AH,3EH
MOV BX,NUMBER ;файловый номер
INT 21H

3. Последовательная запись файла.
Для записи файла используется функция DOS 40H. При этом в регистре BX должен быть установлен файловый номер, в регистре CX — число записываемых байтов, а в регистре DX — адрес области вы-вода.
По окончании операции в регистре AX устанавливается число записанных байтов. В случае неправильной операции флаг CF уста-навливается в 1, а в регистр AX заносится код 05 (нет доступа) или 06 (ошибка номера).
MOV AH,40H
MOV BX,NUMBER ;файловый номер
MOV CX,256
LEA DX,BUFF ;адрес области вывода
INT 21H
JC ERROR1
CMP AX,256
JNE ERROR2

4. Открытие дискового файла.
Если в программе требуется прочитать дисковй файл, то преж-де нужно его открыть, используя функцию 3DH. Эта операция прове-ряет правильность имени файла и его наличие на диске. При откры-тии регистр DX должен содержать адрес ASCIIZ-строки, а регистр AL — код доступа.
0 — Открыть файл только для ввода.
1 — Открыть файл только для вывода.
2 — Открыть файл для ввода и вывода.
Если файл с необходимым именем существует, то операция откры-тия устанавливает длину записи равной 1, принимает существующий атрибут, сбрасывает флаг CF и заносит файловый номер в регистр AX. Файловый номер используется в дальнейшем для всех операций. Если файл отсутствует, то операция устанавливает флаг CF в 1 и заносит в регистр AX код ошибки: 02, 04, 05 или 12.
MOV AH,3DH
MOV AL,00
LEA DX,NAMEFILE
INT 21H
JC ERROR
MOV NUMBER,AX

5. Последовательное чтение файла.
Для чтения записей файла используется функция DOS 3FH. При этом необходимо установить в регистрае BX файловый номер, в ре-гистре CX — число байтов и в регистре DX — адрес области ввода. Правильно выполненная операция считывает запись в память. сбрасывает флаг CF и устанавливает в регистре AX число считанных байтов. Нулевое значение в регистре AX означает попытку чтения после конца файла. Ошибка при чтении из файла устанавливает флаг CF в 1 и возвращает в AX код ошибки 05 (нет доступа) или 06 (о-шибка файлового номера).
MOV AH,3FH
MOV BX,NUMBER ;файловый номер
MOV CX,256
LEA DX,BUFF ;адрес области вывода
INT 21H
JC ERROR1
CMP AX,00
JNE ERROR2

6. Управление файловым указателем.
Система DOS имеет файловый указатель, который при открытии файла устанавливается в 0 и увеличивается при последовательных операциях записи и считывания. Для доступа к любым записям внут-ри файла можно менять файловый указатель с помощью функции 42Н, получая в результате прямой доступ к записям файла. Для установки файлового указателя необходимо поместить в ре-гистр ВХ файловый номер и регистровую пару СХ:DX требуемое смеще-ние в байтах (в DX младшую часть). В регистре AL должен быть ус-тановлен один из кодов, который определяет точку отсчета смещения.
0 — от начала файла
1 — от текущего значения
2 — от конца файла.
Правильно выполненная операция сбрасывает флаг CF и устанав-ливает новый указатель в регистровой паре DX:AX. Неправильная операция устанавливает флаг CX в 1 и возвращает код ошибки в AX — 01 (ошибка кода отсчета) или 06 (ошибка файлового номера).
MOV AH,42H
MOV AL,00
LEA DX,BUFF ;адрес области вывода
MOV CX,00
MOV DX,1024
INT 21H
JC ERROR

ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ.
1. Создать на диске текстовый файл и записать в него 10 чисел, вводимых с клавиатуры.
2. Прочитать из файла на диске 10 чисел и вывести их на экран.
3. В файле на диске записаны 10 фамилий студентов. Прочитать фамилию 5-го студента на экран и ввести новую с клавиатуры. Записать изменения в файл.
4. Записать в файл небольшое четверостишье.
5. Считать из файла несколько чисел, вычислить их сумму и вывести результат на экран.
6. Дописать в существующий файл на диске свою фамилю и номер группы.
7. Прочитать из файла стихотворение и вывести его на экран.
8. Дан текстовый файл. Создать на диске его копию.
9. На диске имеются два текстовых файла. Слить их в один новый файл.
10. В файле на диске записаны фамилии, номер группы, и оценки по 4 экзаменам студентов. Внести изменения в оценки студентов.
11. Дан текстовый файл. Создать новый файл на диске и записать туда информацию в обратном порядке.
12. Файл содержит матрицу размером 4х4. Изменить в ней значения диагональных элементов. Числа вводить с клавиатуры.
13. Файл содержит таблицу чисел размером 4х10. Считать из файла и вывести на экран второй столбец таблицы.
14. В текстовый файл записано четверостишие. Прочитать и вывести его на экран в обратном порядке.

ВОПРОСЫ К ЗАЩИТЕ ЛАБОРАТОРНОЙ РАБОТЫ
1. Что такое файл?
2. Как организуется доступ к файлу в ассемблере?
3. С какими атрибутами можно открывать файл?
4. Какая функция создает файл на диске?
5. Какая функция открывает файл по чтению?
6. Какая функция закрывает файл?
7. Как организуется чтение из файла?
8. Как организуется запись в файл?
9. Что такое последовательный доступ к файлу? Чем он отличается от прямого доступа?
10. Как организуется прямой доступ к информации в файле?
11. Как осуществляется поиск имени файла в каталоге и считывание с диска в память?

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ:
1. Абель П. «Язык Ассемблера для IBM PC и программирования» М.: Высшая школа, 1992 — 447 c.
2. Джордейн Р. «Справочник программиста персональных компьютеров типа IBM PC, XT и AT» М.: Финансы и статистика, 1992. — 544 с.
3. П.Нортон, Р.Уилтон «IBM PC и PS/2. Руководство по прог-раммированию» М.: Радио и связь, 1994г. — 336 с.
4. Г.В.Майко «Ассемблер для IBM PC» Одесса, 1996г.

Ст. преподаватель
кафедры ПОВТ И.А.Васюткина

Загрузка...