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

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

Если блоки байтов файла фиксированной длины, то можно выполнить произвольное чтение любого блока, либо можно выбрать определенный блок для перезаписи. Для организации произвольного доступа к файлы используется системная функция 42h.

Пример 2.3. Программа чтения из файла greet.txt байта со смещение 20 от начала.

use16

org 100h

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

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

mov al,00

mov dx,myfile

int 21h

jc all

push ax

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

pop bx

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

mov al,00

mov cx,00

mov dx,20 ;Смещение 20

int 21h

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

mov ah,3Fh ;читать байт

mov cx,01 ;для чтения

mov dx,buffer ;буфер ввода

int 21h

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

mov ah,02 ;вывести буфер

mov dl,[buffer]

int 21h

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

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

mov ah,08h

int 21h

mov ax,4c00h

int 21h

Пример 2.4. Программа, заменяющая символ H строки на символ #.

use16

org 100h

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

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

mov al,01

mov dx,myfile

int 21h

jc all ;ошибка открытия

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

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

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

mov ah,42h

mov al,00

mov cx,00

mov dx,20 ;смещение к байту

int 21h

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

;Заменить байт

mov ah,40h

mov cx,01

mov dx,buffer

int 21h

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

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

mov ah,08h

int 21h

mov ax,4c00h

int 21h

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

myfile db 'greet.txt',0

buffer db '#'

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

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

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

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

Имена каталогов, так же указываются в ASCIIZ формате.

Пример 3.1. Работа с атрибутами файла. Проверка наличие атрибута у файла «только – чтение».

use16

org 256

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

mov AH,43h ;получить атрибуты

mov AL,0

mov DX,myfile

int 21h

jc fin ;ошибка?

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

and CX,01 ;нет, R?

jz fin ;нет,конец работы

mov AH,09 ;да,вывести сообщение

mov DX,mesR

int 21h

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

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

mov AH,08

int 21h

mov AX,4c00h

int 21h

mesR db 'R - OK !',10,13,'$'

myfile db 'test.txt',0 ;тестируемый файл.

Сеанс работы с программой показан на рисунке 3.1. Файл с кодом программы tstr.com. Файл должен быть предварительно создан в текущем каталоге программным способом либо средствами ОС. Например, с помощью команды copy con test.txt.

Рис.3.1. Сеанс работы с программой

Для просмотра и установки атрибутов используется консольная команда attrib. Если атрибут не найден, то программа завершает свою работу без вывода контрольного сообщения.

Пример 3.2. Создание каталога в текущем каталоге.

use16

org 256

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

mov AH,39h ;создать каталог

mov DX,myDIR

int 21h

jnc ok ;каталог создан?

jmp fin ;нет, конец работы

ok:

mov AH,09;контрольное сообщение

mov DX,mes

int 21h

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

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

mov AH,08

int 21h

mov AX,4c00h

int 21h

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

mes db 'Created !',10,13,'$'

myDIR db 'TESTDR',0

Пример 3.3. Организация поиска файла.

use16

org 256

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

mov AH,4eh ;поиск файла

mov CX,0

mov DX,testmask

int 21h

jc fin ;нет файла !

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

mov BX,9eh ;PSP->80h+1eh

go: ;читать байты имени файла

mov dl,[bx]

cmp dl,0

je fin

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

int 21h

inc bx ;следующий байт

jmp go

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

fin:

mov AH,08

int 21h

mov AX,4c00h

int 21h

testmask db "*.txt",0;маска поиска