Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4_FASM_Файлы.doc
Скачиваний:
29
Добавлен:
03.06.2015
Размер:
211.97 Кб
Скачать

Fasm. Работа с файловой системой

Оглавление

Оглавление 2

1. Получение дескриптора файла 3

2. Запись и чтение данных из файла 4

2.1. Организация вывода 4

2.2. Чтение содержания файла 5

2.3. Произвольный доступ к данным файла 6

3. Обслуживание файловой системы 8

5. Практические задания 11

6.1. Файловый ввод-вывод 12

6.2. Обслуживание файловой системы 14

Приложение №1. Функции обслуживания файловой системы 18

Приложение №2. Команды консоли MS Windows 24

1. Получение дескриптора файла

Дескриптор файла – числовой код целого типа, который ос присваивает открытому физическому файлу. Операции ввода – вывода выполняются через дескриптор файла. В операционной системе MS Windows имеется набор системных дескрипторов.

Стандартные дескрипторы:

1 – вывод CON

2 – стандартная ошибка CON

3 – порт AUX (COM1)

4 – PRN (LPT1)

Для получения дескриптора файла его нужно открыть или создать с помощью соответствующей системной функции. Эти функции приводятся в приложении. При работе с файловыми функциями имена файлов и каталогов задаются в ASCIIZ формате. В таком формате последний код имени файла – 0. Для контроля за работой файловых системных функций используется бит CF регистра флагов процессора. Если значение бита равно 1, то функция отработала с ошибкой. Условный переход по значению бита выполняется с помощью команд JC (CF=1) и JNC (CF=0)

Пример 1.1. Создание файла без атрибутов.

use16

org 256

;=========================

mov AH,3Ch

mov CX,0 ;нет атрибутов

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

int 21h

jc fin ;создан ?

;=========================

push AX ;да, дескриптор в стек

fin: ;нет !

mov AX,4c00h

int 21h

myfile db 'test.txt',0

2. Запись и чтение данных из файла

2.1. Организация вывода

Занесение данных в файл по известному дескриптору выполняется с помощью функции 40h. Для занесения данных необходимо байты поместить в буфер. При создании текстовых файлов в операционной системе MS Windows строки символов должны замыкаться управляющими кодами LF(10) и CR (13).

Пример 2.1. Программа создания текстового файла из трех строк.

use16

org 256

;======================

mov AH,3Ch ;создать файл

mov CX,0

mov DX,myfile

int 21h

jc fin ;ошибка ?

push AX ;нет, дескриптор в стек

;======================

mov AH,40H ;записать строки в файл

pop BX ;дескриптор из стека

mov CX,n ;число байтов строк

mov DX,strings; адрес буфера вывода

int 21h

;======================

fin: ;выход в ОС

mov AX,4c00h

int 21h

;======================

myfile db 'greet.txt',0 ;файл

;буфер вывода:

strings db '================',10,13 ;

db '==Hello World !=',10,13

db '================',10,13

n=$-strings ;число байтов строк

2.2. Чтение содержания файла

На низком уровне любой файл это последовательность блоков байтов. Обычно эти блоки являются фиксированного размера. В этом случае файлы являются двоичными источниками данных. Структура двоичного файла с блоками фиксированной длины показана на рисунке.

Минимальной единицей – блоком данных является 1 – байт. В случае текстового файла это код символа, либо управляющие коды.

Выполнить чтение из файла блоков байтов можно с помощью с помощью системной функции 3Fh. Для контроля за работой функции используется содержание регистра AX, в него записывается количество байтов, полученных за одну операцию ввода-вывода.

Пример 2.2. Программа посимвольного чтения содержания файла, созданного в примере.

use16

org 100h

;=============================

mov ah,3dh ;открыть файл

mov dx,myfile

int 21h

jc all ;файл открыт?

push ax ;да, дескриптор в стек

;=============================

pop bx ;извлечь дескриптор

go: ;читать байты

mov ah,3Fh

mov cx,1 ;читать один байт

mov dx,buffer ;буфер хранения байта

int 21h

cmp AX,1 ;прочитан один байт ?

jne all ;нет больше байтов

mov ah,02h ;вывести байт на консоль

mov dl,[buffer] ;код байта из буфера

int 21h

jmp go

all: ;конец работы

;=============================

mov ah,08h

int 21h

mov ax,4c00h

int 21h

;=============================

myfile db 'greet.txt',0 ;файл с текстом

buffer db 0 ;буфер хранения байта

Результат работы программы показан на рисунке.

Рис.2.1. Вывод содержания файла на экран