ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Читання даних з файла або від пристрою

Для пересилання заданої кількості байтів у буфер із файла або пристрою символьної обробки (клавіатури) використовується функція 3Fh переривання INT 21h. Для виклику цієї функції необхідно помістити у регістри таку інформацію:

На вході:

AH = 3Fh;

BX = номер каналу відкритого файла;

СХ = кількість байтів, що передаються;

DS:DX = адреса буфера для даних.

На виході:

АХ = кількість переданих байтів або код помилки, якщо передача даних не відбулася.

 

Запис даних у файл або на пристрій

Для пересилання заданої кількості байтів із буфера у файл або на пристрій символьної обробки (дисплей) використовується функція INT 40h переривання 21h. Для виклику цієї функції необхідно помістити таку інформацію у регістри:

На вході:

AH = 40h;

BX = номер каналу відкритого файла;

СХ = кількість байтів, що передаються;

DS:DX = адреса буфера для даних.

На виході:

АХ = кількість переданих байтів або код помилки, якщо передача даних не відбулася.

 

Вилучення файла

Файл може бути вилучено функцією 41h переривання 21h. Специ­фікація цієї функції наведена нижче.

На вході:

AH = 41h;

DS:DX = ASCIІ-рядок з іменем файла;

CL = атрибути файла, що вилучається.

На виході:

якщо прапорець CF = 1, тоді AX містить код помилки:

АХ = 2 – файл не знайдено;

АХ = 3 – невірно задано шлях;

АХ = 5 – відказано в доступі.

Функція 41h не дозволяє вилучати файли з атрибутом “тільки для читання”. В цьому випадку слід змінити атрибути файла, що вилучається, за допомогою функції 43h.

 

Приклад програми роботи з файлом

 

Нехай, наприклад, необхідно створити файл FILE3.DAT у підкаталозі Е:\ТОМ і записати в нього п’ять однорозрядних чисел, розділених пропусками.

Для розв'язання вказаної задачі необхідно спочатку створити файл, потім переслати в нього 9 символів (цифри разом із пропусками), а після цього закрити файл. Така програма буде мати вигляд, наведений нижче.

NAME PROG2

SSTACK SEGMENT STACK

DB 128 DUP (?)

SSTACK ENDS

DATA SEGMENT

ADDR DB “E:\TOM\FILE3.DAT”,0

BUF DB “3 5 7 9 1”

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:SSTACK

START PROC FAR

PUSH DS

SUB AX,AX

PUSH AX

MOV AX, DATA

MOV DS, AX

CALL MAIN

RET

START ENDP

MAIN PROC

MOV AH, 03Ch

MOV CX, 0

MOV DX, OFFSET ADDR

INT 21h

MOV BX, AX

MOV AH, 40h

MOV CX, 9

MOV DX, OFFSET BUF

INT 21h

MOV AH, 03Fh

INT 21h

RET

MAIN ENDP

CODE ENDS

END START

Методи доступу до файлів

Існує два основних методи доступу до файлів: послідовний і прямий.

У файлах із послідовним методом доступу (їх називають також послідовними файлами) елементи даних (рядки) можуть бути змінної довжини і розділятися між собою парою символів: спочатку символом CR повернення каретки (ASCII-код - 13), а потім символом LF переведення рядка (ASCII-код – 11).

У файлах з прямим доступом заздалегідь відводять фіксоване місце під кожний елемент даних. Якщо деякий елемент не займає все відведене під нього місце, то залишок заповнюється пропусками. У цьому випадку, знаючи розмір, який відводиться під елемент даних, досить легко визна­чити місце розташування будь-якого елемента даних за його номером.

Для пошуку потрібного елемента даних використовується файловий покажчик, який може бути встановлений у потрібну позицію за допомогою функції 42h переривання INT 21h. Для виклику цієї функції необхідно заповнити регістри такою інформацією:

На вході:

AH = 42h;

AL = вид доступу:

0 – абсолютне зміщення від початку файла;

1 – зміщення від поточної позиції;

2 – зміщення відносно кінця файла;

СХ = старший байт зміщення;

DX = молодший байт зміщення;

ВХ = номер каналу файла.

На виході:

DX = перший байт поточної позиції покажчика,

АХ = молодший байт покажчика або код помилки при невиконанні функції.

За допомогою цієї функції можна визначити розмір файла, що досить корисно для послідовних файлів.

 

Алгоритм запису даних у послідовний файл

 

Для запису даних у послідовний файл слід виконати такі дії:

1) Створити файл за допомогою функції 3Сh.

2) Ввести дані (з клавіатури або з іншого файла) в область буфера:

BUF DB 30 DUP (?), 13, 10

(тут під елемент відводиться 30 байтів).

3) Виконати запис даних у файл за допомогою функції 40h.

4) Закрити файл за допомогою функції 3Eh.

Для додавання даних в існуючий файл необхідно виконати такі дії:

1) Відкрити файл за допомогою функції 3Dh.

2) Установити покажчик файла в його кінець за допомогою функції 42h;

3) Ввести дані в область буфера.

4) Виконати запис даних у файл за допомогою функції 40h.

5) Закрити файл за допомогою функції 3Eh.

 

Алгоритм читання даних із послідовного файла

При читанні даних із послідовного файла необхідно виконати таку послідовність дій:

1) Відкрити файл за допомогою функції 3Dh.

2) Визначити довжину файла за допомогою функції 42h шляхом встановлення покажчика на його кінець.

3) Встановити покажчик файла на його початок за допомогою функції 42h.

4) Переслати дані з файла в область буфера за допомогою функції 3Fh.

5) Вивести дані з буфера на пристрій або в інший файл за допомогою функції 40h.

6) Закрити файл за допомогою функції 3Eh.

Якщо потрібно здійснити операцію введення-виведення в середину послідовного файла, тоді n-й елемент даних знаходиться методом підрахунку n розділювачів CR/LF.

 

Операції читання та запису даних

У файлах прямого доступу

 

Операції читання та запису даних у файлах прямого доступу відрізняється від аналогічних операцій з послідовними файлами лише способом пошуку потрібного елемента даних. Позиція n-го елемента даних дорівнює добутку розміру місця, що відводиться під елемент даних, на число (n-1).

 

Приклад програми читання даних із послідовного файла

Нехай, наприклад, необхідно вивести на екран дисплея вміст файла D:\TOM\PRIM.ASM. Така програма буде мати вигляд, наведений нижче.

NAME PROG3

SSTACK SEGMENT STACK

DB 128 DUP (?)

SSTACK ENDS

DATA SEGMENT

ADDR DB “D:\TOM\PRIM.ASM”,0

BUF DB 1000 DUP (?)

HANDLE DW ?

SIZE1 DW ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:SSTACK

START PROC FAR

PUSH DS

SUB AX, AX

PUSH AX

MOV AX, DATA

MOV DS,AX

CALL MAIN

RET

START ENDP

MAIN PROC

; відкриття файла

MOV AH, 03Dh

MOV AL, 0C2h

MOV DX, OFFSET ADDR

INT 21h

MOV HANDLE, AX

; визначення розміру файла

MOV BX, AX

MOV AH, 42h

MOV AL, 2

MOV CX, 0

MOV DX, 0

INT 21h

MOV SIZE1, AX

; установлення покажчика на початок файла

MOV AH, 42h

MOV AL, 0

MOV CX, 0

MOV DX, 0

INT 21h

; пересилання даних із файла у буфер

MOV AH, 03Fh

MOV CX, SIZE1

MOV SX, OFFSET BUF

INT 21h

; виведення даних із буфера на екран дисплея

MOV BX, 1

MOV AH, 040h

MOV CX, SIZE1

MOV DX, OFFSET BUF

INT 21h

; закриття файла

MOV BX, HANDLE

MOV AH, 03Fh

INT 21h

RET

MAIN ENDP

CODE ENDS

END START

 

Дана програма по суті виконує команду DOS, яка видає вміст файла PRIM.ASM на екран дисплея:

 

TYPE D:\TOM\PRIM.ASM

 

Робота з атрибутами файлів

Операційна система дозволяє отримати для аналізу і при необхідності змінити ім’я файла, атрибути файла, дату і час його останньої модифікації. Для цього призначені функції 43h, 56h, 57h переривання 21h. При цьому для функції 43h підфункція 00 призначена для отримання, а підфункція 01 – для встановлення слова атрибутів файла. Аналогічно для функції 57h підфункції 00 та 01 дозволяють отримати та змінити дату і час відповідно.

Отримання атрибутів файла

На вході:

AX = 4300h;

DS:DX = ASCII-рядок з повним іменем файла.

На виході:

якщо прапорець CF = 0, тоді в регістрі CX слово атрибутів файла, причому його формат такий:

7-й біт – розділяється в NovellNetWare;

6-й біт – не використовується;

5-й біт – архівний;

4-й біт – каталог;

3-й біт – мітка тома;

2-й біт – системний;

1-й біт – прихований;

0-й біт – тільки для читання.

якщо CF = 1, тоді AX містить код помилки:

АХ = 1 – невірне значення в AL;

АХ = 2 – файл не знайдено;

АХ = 3 – вказаний шлях не існує;

АХ = 5 – доступ заборонено.

Наведемо фрагмент коду, що демонструє отримання атрибутів файла.

. . .

.data

fname db "MyFile.asm"

Address dd fname

. . .

.code

. . .

lds dx, ADDRESS

mov ax,4300h ;номер функції DOS

int 21h

jc exit ;Перехід у випадку помилки

. . .

; Тепер в CX – атрибути файла

. . .

exit:

. . .

Встановлення атрибутів файла

На вході:

AX = 4301h;

CX = нове слово атрибутів файла;

DS:DX = ASCII-рядок з повним іменем файла.

На виході:

якщо прапорець CF = 1, тоді AX містить код помилки:

АХ = 1 – невірне значення в AL;

АХ = 2 – файл не знайдений;

АХ = 3 – вказаний шлях не існує;

АХ = 5 – доступ заборонений.

Перейменування файла

На вході:

AH = 56h;

DS:DX = ASCII-рядок з іменем існуючого файла;

ES:DI = ASCII-рядок з іменем нового файла;

На виході:

якщо прапорець CF = 0, тоді перейменування файла виконано успішно;

якщо прапорець CF = 1, тоді AX містить код помилки:

АХ = 1 – невірне значення в AL;

АХ = 2 – файл не знайдений;

АХ = 3 – вказаний шлях не існує;

АХ = 5 – доступ заборонений;

АХ = 11h – у разі, якщо пристрої для нового і старого файлів не збігаються.

Дана функція дозволяє здійснити переміщення між каталогами, не змінюючи пристрою. Наведемо фрагмент коду, що демонструє переміщення між каталогами, не змінюючи пристрою.

 

. . .

.data

OLDNAME db "Myfile1.asm",0

addrold dd oldname

newname db "e:\myfile1.asm",0

addrnew dd newname

. . .

.code

. . .

lds dx, addrold

les di, ADDRnew

mov ah,56h

int 21h

jc exit ;Перехід у випадку помилки

. . .

exit:

. . .

Отримання дати і часу створення або останньої модифікації файла

 

На вході:

AX = 5700h;

BX = дескриптор файла.

На виході:

якщо прапорець CF = 0, тоді в CX і DX інформація про час і дату (табл.12):

CX = час;

DX = дата.

якщо прапорець CF = 1, тоді AX містить код помилки:

AX = 1 – заборонений номер підфункції в AL;

АХ = 6 – заборонений дескриптор.

 

Таблиця12 – Формат часу і дати створення або модифікації файла

Час Дата
Біти Опис Біти Опис
15-11 Години (0-23) 15-9 Рік
10-5 Хвилини 8-5 Місяць
4-0 Секунди 4-0 День

Встановлення дату і час створення або останньої модифікації файла

На вході:

AX = 5701h;

BX = дескриптор файла;

CX = новий час;

DX = нова дата.

На виході:

якщо прапорець CF = 0, тоді в CX і DX інформація про встановлені час і дату:

CX = час;

DX = дата.

якщо прапорець CF = 1, тоді AX містить код помилки:

AX = 1 – недопустимий номер підфункції в AL;

АХ = 6 – недопустимий дескриптор.

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти