Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Обзор системных функций работы с файлами




Все эти функции относятся к расширенной версии DOS, где обращение к файлам осуществляется с помощью дескриптора. Дескриптор или логический номер файла, присваивается операционной системой файлу в результате создания или открытия файла, заданного в формате ASCIIZ-строки. ASCIIZ-строка - символьная строка, завершающаяся нулем. Дескриптор файла записывается в регистр АХ и его следует сохранить в ячейке памяти.

Первые пять номеров (0-4) присвоены стандартным устройствам:

0 - стандартный ввод (CON).

1 - стагндартный вывод (CON).

2 - стандартная ошибка (CON).

3 - стандартный вспомогательный порт (AUX).

4 - стандартный принтер (PRN).

Мы можем использовать дескриптор 0 для ввода с клавиатуры, дескрипторы 1 или 2 - для вывода на экран.

При работе с файлами успешная операция устанавливает флаг CF в 0. Если операция не выполнилась, то флаг CF устанавливается в 1, а в регистр AX помещается код ошибки.

Коды ошибок:

 

Код ошибки Описание Код ошибки Описание
ошибка номера функции файл не найден путь доступа не найден открыто слишком много файлов доступ не разрешен ошибка файлового номера блок управления памятью разрушен недостаточно памяти ошибка адреса ошибка оборудования ошибка формата ошибка кода доступа ошибка данных ошибка дисковода попытка удалить оглавление не то устройство нет больше файлов

 

Функции 3Ch и 5Bh позволяют создать файл, с заданной спецификацией (путь и имя файла в формате ASCIIZ-строки). Различие функций в том, что функция 3Ch уничтожает имеющийся файл и создает новый с тем же именем, а функция 5Bh завершается с CF=1, если файл с таким именем существует.

Пример:

; в сегмент данных поместить имя файла и зарезервировать ячейку для дескриптора

fname DB 'F1.TXT',0

handle DW ?

. . .

mov AH, 3Ch ; запрос на создание

mov CX, 0 ; обычного файла

lea DX, fname ; адрес имени файла

int 21h

jc err ; переход по ошибке

mov handle, AX; сохранить дескриптор

В этом примере в регистр CX заносится атрибут файла. Могут использоваться следующие атрибуты:

01h - файл только для чтения

02h - скрытый файл

04h - системный файл

Функция 3Dh - позволяет открыть уже имеющийся файл.

Пример:

mov AH, 3Dh ; функция открытия файла

mov AL, 02 ; для ввода-вывода

lea DX, fname

int 21h

mov handle, AX

При открытии файла в регистр AL заносится код доступа:

0 - открыть файл только для ввода;

1 - открыть файл только для вывода;

2 - открыть файл для ввода и вывода.

Функция 42h используется для организации прямого доступа к произвольному месту файла. Указатель можно установить на начало файла (AL=0), в текущее положение (AL=1) и в конце файла (AL=2). Кроме того, значение смещения указателя (со знаком) заносится в регистры CX (старшая половина) и DX (младщая половина).

Пример:

mov BX, handle

mov AH, 42h ; установить указатель

mov AL, 2 ; на конец файла

mov CX, 0

mov DX, 0

int 21h

Функция 3Fh используется для чтения из файла или устройства. При попытке чтения за концом файла AX=0.

Пример:

mov AH, 3Fh ; функция чтения

mov BX, handle ; установить дескриптор

mov CX, 80 ; сколько читать

lea DX, buf ; и куда

int 21h

mov CX, AX ; сколько фактически прочитали

Функция 40h используется для записи в файл или на устройство.

Пример:

mov AH, 40h ; функция записи

mov BX, handle

mov CX, 80 ; сколько писать

lea DX, buf ; откуда

int 21h

Функция 43h используется для получения (AL=0) или установки (AL=1) атрибутов файла.

Пример:

mov AH, 43h ; функция работы с атрибутами

mov AL, 1 ; установка атрибутов

mov CX, 1 ; "только для чтения"

mov DX, offset fname ; адрес имени файла

int 21h

Функция 56h используется для переименования файла.

Пример:

; настроить сегментный регистр ES на сегмент данных

push DS

pop ES

; переименовать файл

mov AH, 56h ; функция переименования

mov DX, offset oldname ; адрес старого имени

mov DI, offest newname ; адрес нового имени

int 21h

; в сегмент данных

oldname db 'fl.txt',0

newnamt db 'newf.txt',0

Функция 57h используется для получения (AL=0) и установки (AL=1) даты и времени создания файла. Время записывается в регистр СХ и вычисляется по формуле:

CX= часы*2048+ минуты*32+секунды/2

Дата записывается в регистр DX и вычисляется по формуле:

DX=(год-1980)*512+месяц*32+день.

Пример:

; изменить время и дату создания файла

mov AH, 57h ; функция даты/времени

mov AL, 1 ; установить дату/время

mov BX, hаndle ; установить дескриптор

mov CX, 0 ; очистить cx

or CX, seс ; добавить секунды

or CX, min ; добавить минуты

or CX, hour ; добавить часы

xor DX, DX ; очистить DX

or DX,day ; добавить день

or DX, mon ; добавить месяц

or DX, year ; добавить год

int 21h

; в сегмент данных

sec DW 6/2 ; 6 секунд

min DW 15 * 32 ; 15 минут

hour DW 16*2048 ; 16 часов

day DW 25 ; 25 число

mon DW 3*32 ; Март

year DW 25*512 ; 25 лет от 1980г, т.е. 2005 г.

Функция 3Eh используется для закрытия файла. Эта операция необходима для коррекции оглавления и таблицы FAT.

Пример:

mov AH, 3Eh ; функция закрытия

mov BX, handle

int 21h

Функция 41h используется для удаления файлов (за исключением файлов с атрибутом 'только чтение')

mov AH, 41h ; функция удаления

lea DX, fname ; адрес имени файла

int 21h ; вызов DOS

Работа с файлами может состоять из нескольких этапов:

1) Создания и открытие файла;

2) Установить указатель;

3) Определение длины файла;

4) Чтение нужного байта, блока,з апись байта, блока, до полнение файла;

5) Закрытие файла;

6) Удаление файла.

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

Пример. Прочитать 10-й байт, открыть файл для чтения/записи

...

; установить указатель на 10 байт

mov AH, 42h ; установить указатель

mov BX, handle

mov AL, 00 ; на начало файла

mov CX, 00

mov DX, 10 ; на 10-й байт

int 21h

; Прочитать нужный байт

mov ah, 3fh

mov bx, HANDLE

lea dx, BUF

mov cx, 1

int 21h

; в сегмент данных

BUF DB ?

Пример 2. Найти символ "а" и определить его номер

;открыть файл

....

;определить длину файла

mov AH, 42h ; установить указатель

mov BX, HANDLE

mov AL, 2 ; на конец файла

mov CX, 00 ; старшая половина смещения

mov DX, 00 ; младшая половина смещения

int 21h;

mov FLEN, AX ; запомнить длину файла

;установить указатель на начало файла

....

;прочитать файл в bufin

....

;поиск символа "а"

cld ; поиск осуществляется слева направо

mov CX, FLEN ; длина файла

mov AL, 'A' ; искомый символ

lea DI, BUFIN ; адрес строки

repne scasb ; сканировать

jnz m ; символ найден?

dec DI ; да - уменьшить адрес

... ; вывести номер на экран m: ...

; вывести сообщение что символ не найден

; закрыть файл

...

Основная литература– 2[131-134,140-150,182-187], 3[85-94, 103-119]

Контрольные вопросы.

1. Чем отличаются функции 1, 7, 8 int 21h?

2. Что записывается в первый и во второй байт буфера при использовании ф.0Ah int 21h?

3. Как выполняется ввод при нажатии функциональной клавиши?

4. Чем отличается выполнение ф.0 int 16h и ф.7 int 21h?

5. Чем отличаются ф.0Ah и ф.3Fh int 21h?

6. С какого байта в буфере начинаются данные после использования ф.0Ah int 21h?

7. Чему равно значение последнего байта строки после использования ф.0Ah int 21h?

8. Фунцкии вывода символа на экран.

9. Функции вывода строки на экран.

10. Как определяется конец строки при использовании ф.9 и ф.40h int 21h?

11. Какие функции не перемещают курсор при выводе символа?

12. Какая функция вывода на дисплей меняет атрибут символа?

13. Что такое дескриптор файла?

14. Что такое ASCIIZ строка?

15. Дескрипторы стандартного ввода и стандартного вывода.

16. Как определяется успешность завершения какой-либо файловой операции?

17. Атрибуты файла.

18. Коды доступа при открытии файла.

19. Как определить длину файла?

20. Что делает функция закрытия файла?

21. Какие файлы нельзя удалить с помощью функции 41h?

 



Поделиться:

Дата добавления: 2015-09-15; просмотров: 55; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты