Работа с каталогами

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

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 13.08.2011
Размер файла 63,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

25

Размещено на http://www.allbest.ru/

1. Работа с каталогами и подкаталогами. Работа с файла

файл подкаталог переименование текстовый

В основе любой операционной системы лежит принцип организации работы внешнего устройства хранения информации. Несмотря на то, что внешняя память может быть технически реализована на разных материальных носителях (например, в виде гибкого магнитного диска или магнитной ленты), их объединяет принятый в операционной системе принцип организации хранения логически связанных наборов информации в виде так называемых файлов.

Файл - логически связанная совокупность данных или программ, для размещения которой во внешней памяти выделяется именованная область.

Файл служит учетной единицей информации в операционной системе. Любые действия с информацией в операционной системе осуществляются над файлами: запись на диск, вывод на экран, ввод с клавиатуры, печать, считывание информации CD-ROM и пр.

На диске файл не требует для своего размещения непрерывного пространства, обычно он занимает свободные кластеры в разных частях диска. Сведения о номерах этих кластеров хранятся в специальной FAT - таблице, о которой вы узнаете в подразд. 9.2. Кластер является минимальной единицей пространства диска, которое может быть отведено файлу. Самый маленький файл занимает один кластер, большие файлы - несколько десятков кластеров.

Сектор - 512 байт. На гибком диске обычно 80 дорожек. На каждой дорожке: для 5» диска- 9 секторов; для 3,5» диска - 18 секторов. Кластер - группа смежных секторов. Кластер для гибкого диска - 1,2 сектора (0,512, 1 Кбайт). Кластер для жесткого диска - 4, 8, 16 секторов (2-8 Кбайт).

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

Текстовая информация хранится в файле в кодах ASCII, в так называемом текстовом формате. Содержимое текстовых файлов можно просмотреть на экране дисплея с помощью разных программных средств.

Для характеристики файла используются следующие параметры:

 * полное имя файла;

 * объем файла в байтах;

 * дата создания файла;

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

 * тип файла;

 * специальные атрибуты файла: R (Read only) - только для чтения, Н (Hidden) - скрытый файл, S (System) - системный файл, A (Archive) - архивированный файл.

С понятием файла в операционной системе тесно связано понятие логического диска - Логический диск создается и управляется специальной программой (драйвером). Он имеет уникальное имя в виде одной латинской буквы, например С, D, E, F и т.д. Логический диск может реализовываться на жестком диске, на гибком диске, на CD-ROM, в оперативной памяти (электронный диск) и т.п. На одном физическом диске может быть создано несколько логических дисков.

СПОСОБЫ ОБРАЩЕНИЯ К ФАЙЛУ

К файлу можно обращаться с помощью имени, полного имени, спецификации. Для того чтобы воспользоваться одним из этих вариантов, надо знать ряд правил и соглашений, позволяющих унифицировать в операционной системе процедуру обращения к файлу. Рассмотрим эти варианты.

Правило образования имени. Имя файла всегда уникально и служит для отличия одного файла от другого. Имя фата образуется из символов, цифр, знаков подчеркивания, но в MS DOS используются только до 8 букв буквы латинского алфавита.

При образовании имени нельзя использовать символы.*?:;,<> =.

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

В качестве имени файла можно использовать символьное имя устройства

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

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

В полном имени недопустимы пробелы между именем и типом.

При образовании типа, так же как и имени, нельзя использовать русские буквы и символы.*?:;,<> = пробел.

При работе на персональном компьютере установлен ряд соглашений по заданию типа файла, некоторые из которых приведены в табл. 1.

Таблица 1. Соглашения по типу файлов

Тип

Назначение

ARJ

Архивный файл

ВАК

Копия файла, создаваемая при перезаписи файла оригинала

BAS

Программа на языке Бейсик

ВАТ

Командный файл

СОВ

Программа на языке Кобол

COD

Версия файла типа.OBJ на языке ассемблера

СОМ

Командный системный файл, исполняемый файл

DAT

Файл данных

DOC

Файл документов (текстовый)

EXE;

Исполняемый файл

FOR

Программа на языке Фортран

HEX

Символьное шестнадцатеричное представление двоичных данных в коде ASCII

HLP

Файл для справочной информации

LIB

Библиотека программ

OBJ

Скомпилированная объектная программа на машинном языке

OVL

Оверлейный файл прикладной программы

OVR

Оверлейный файл программы компилятора

PAS

Программа на языке Паскаль

PIC

Данные выводимого на экран изображения

PRN

Листинг (распечатка программы)

SYS

Файлы, расширяющие возможности операционной системы, например драйверы

SYM

Таблица символов для компилятора

TER

Описание терминала (для асинхронной передачи)

IMP

Временный файл

TXT

Текстовый файл

$$$

Временный файл

При обращении к файлу типа ВАТ, СОМ, ЕХЕ достаточно задать только его имя, тип не указывается. При одинаковых именах приоритет - в порядке, указанном выше.

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

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

Как обращаться к группе файлов?

Часто возникает ситуация, когда надо работать не с одним файлом, а с группой файлов.

Эти операции достаточно легко выполнить, пользуясь при формировании имен и типов файлов шаблоном.

Шаблон имени файла - специальная форма, в которой в полях имени и типа файла используются символы * или?

Символ * служит для замены любой последовательности символов. В шаблоне может быть использовано в поле имени и типа по одному символу *.

Символ? служит для замены одного символа. В шаблоне может быть использовано несколько таких символов.

ОРГАНИЗАЦИЯ ДОСТУПА К ФАЙЛУ

Структура каталога

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

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

Доступ - процедура установления связи с памятью и размещенным в ней файлом для записи и чтения данных

Имя логического диска, стоящее перед именем файла в спецификации, указывает логический диск, на котором следует искать файл. На этом же диске организован каталог, в котором хранятся полные имена файлов, а также их характеристики: дата и время создания; объем (в байтах); специальные атрибуты. По аналогии с библиотечной системой организации каталогов полное имя файла, зарегистрированное в каталоге, будет служить шифром, по которому операционная система находит месторасположение файла на диске.

Каталог - справочник файлов с указанием месторасположения на диске.

В операционной системе WINDOWS понятию каталог
соответствует понятие папка.

Различают два состояния каталога - текущее (активное) и пассивное.

Текущий (активный) каталог - каталог, в котором работа пользователя производится в текущее машинное время.

Пассивный каталог - каталог, с которым в данный момент времени не имеется связи.

В операционной системе принята иерархическая структура организации каталогов. На каждом диске всегда имеется единственный главный (корневой) каталог. Он находится на 0-м уровне иерархической структуры и обозначается символом «\». Корневой каталог создается при форматировании (инициализации, разметке) диска, имеет ограниченный размер. В главный каталог могут входить другие каталоги и файлы, которые создаются командами операционной системы и могут быть удалены соответствующими командами.

Родительский каталог - каталог, имеющий подкаталоги.

Подкаталог - каталог, который входит в другой каталог.

Таким образом, любой каталог, содержащий каталоги нижнего уровня, может быть, с одной стороны, по отношению к ним родительским, а с другой стороны, подчиненным по отношению к каталогу верхнего уровня. Как правило, если это не вызывает путаницы, употребляют термин «каталог», подразумевая или подкаталог, или родительский каталог в зависимости от контекста.

В структуре каталогов могут находиться каталоги, не содержащие ни одного файла или подкаталога. Такие подкаталоги называются пустыми.

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

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

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

Файловая система - часть операционной системы, управляющая размещением и доступом к файлам и каталогам на диске

С понятием файловой системы тесно связано понятие файловой структуры диска, под которой понимают, как размещаются на диске: главный каталог, подкаталоги, файлы, операционная система, а также какие для них выделены объемы секторов, кластеров, дорожек.

Первая программа для освоения нового языка программирования - программа, выводящая на экран текст «Hello world!». He будет исключением и эта книга, так как такая программа всегда была удобной отправной точкой для дальнейшего освоения языка.

Для этого необходимо набрать любом текстовом редакторе, который может записывать файлы как обычный текст (например: EDIT.COM в DOS, встроенный редактор в Norton Commander или аналогичной программе, NOTEPAD в Windows), следующий текст:

; hello-l.asm

; Выводит на экран сообщение «Hello World!» и завершается

model tiny; модель памяти, используемая для СОМ

code; начало сегмента кода

org 100h; начальное значение счетчика - 100h

start: mov ah, 9; номер функции DOS - в АН

mov dx, offset message; адрес строки - в DX

int 21h; вызов системной функции DOS

ret; завершение СОМ-программы

message db «Hello World!», 0Dh, 0Ah, '$'; строка для вывода

end start; конец программы

его необходимо сохранить как файл hello-l.asm. Можно также использовать готовый файл с этим именем. Чтобы превратить программу в исполнимый файл, сначала надо вызвать ассемблер, для того чтобы скомпилировать ее в объектный файл с именем hello-1.obj, набрав в командной строке следующую команду:

Для TASM:

tasm hello-1.asm

Для MASM:

ml /c hello-1.asm

Для WASM:

wasm hello-1.asm

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

Формат объектных файлов, используемых всеми тремя рассматриваемыми ассемблерами по умолчанию (OMF-формат), совпадает, так что можно пользоваться ассемблером из одного пакета и компоновщиком из другого.

Для TLINK:

tasm /t /x hello-1.obj

Для MASM (команда link должна вызывать 16-битную версию LINK.EXE):

link hello-1.obj, NUL,

exe2bin hello-1.exe hello-1.com

Для WASM:

wlink file hello-1.obj form DOS COM

Теперь получился файл HELLO-1.COM размером 23 байта. Если его выполнить, на экране появится строка «Hello World!» и программа завершится.

Первая строка определяет модель памяти TINY, в которой сегменты кода, данных и стека объединены. Эта модель предназначена для создания файлов типа СОМ.

Директива.CODE начинает сегмент кода, который в нащем случае также должен содержать и данные.

ORG 100h устанавливает значение программного счетчика в 100h, так как при загрузке СОМ-файла в память DOS занимает первые 256 байт (100h) блоком данных PSP и располагает код программы только после этого блока. Все программы, которые компилируются в файлы типа СОМ, должны начинаться с этой директивы.

Метка START располагается перед первой командой в программе и будет использоваться в директиве END, чтобы указать, с какой команды начинается программа.

Команда MOV АН, 9 помещает число 9 в регистр АН. Это - номер функции DOS «вывод строки».

Команда MOV DX, OFFSET MESSAGE помещает в регистр DX смешение метки MESSAGE относительно начала сегмента данных, который в нашем случае совпадает с сегментом кода.

Команда INT 21h вызывает системную функцию DOS. Эта команда - основное средство взаимодействия программ с операционной системой. В нашем примере вызывается функция DOS номер 9 - вывести строку на экран. Эта функция выводит строку от начала, адрес которого задается в регистрах DS:DX, до первого встреченного символа $. При загрузке СОМ-файла регистр DS автоматически загружается сегментным адресом программы, а регистр DX был загружен предыдущей командой.

Команда RET используется обычно для возвращения из процедуры. DOS вызывает СОМ-программы так, что команда RET корректно завершает программу.

На примере первой программы на ассемблере мы уже познакомились с одним из способов вывода текста на экран - вызовом функции DOS 09h. Это далеко не единственный способ вывода текста - DOS предоставляет для этого несколько функций.

Функция DOS 02h - Записать символ в STDOUT с проверкой на Ctrl-Break

Ввод:

АН = 02h
DL = ASCII-код символа

Вывод:

Никакого, согласно документации, но на самом деле: AL = код последнего записанного символа (равен DL, кроме случая, когда DL = 09h (табуляция), тогда в AL возвращается 20h).

Эта функция при выводе на экран обрабатывает некоторые управляющие символы - вывод символа BEL (07h) приводит к звуковому сигналу, символ BS (08h) приводит к движению курсора влево на одну позицию, символ НТ (09h) заменяется на несколько пробелов, символ LF (0Ah) опускает курсор на одну позицию вниз, и CR (0Dh) приводит к переходу на начало текущей строки.

Если в ходе работы этой функции была нажата комбинация клавиш Ctrl-Break, вызывается прерывание 23h, которое по умолчанию осуществляет выход из программы.

Все функции DOS вывода на экран используют устройство STDOUT, стандартный вывод. Это позволяет перенаправлять вывод программы в файл или на стандартный ввод другой программы. Например, если написать в командной строке

hello-1.com > hello-1.out

то на экран ничего выдано не будет, а в текущем каталоге появится файл hello-1.out, содержащий строку «Hello World!». Точно так же, если написать

dosout1.com > dosout1.out

то в файле dosout1.out окажутся все символы ASCII, причем символы BEL и BS не будут интерпретироваться и запишутся в файл как есть. Символы CR и LF тоже запишутся как есть, но так как они отмечают конец строки, редакторы и просмотрщики текстовых файлов будут разрывать первую строку символов.

Функция DOS 06h - Записать символ в STDOUT без проверки на Ctrl-Break

Ввод:

АН = 06h
DL = ASCII-код символа (кроме FFh)

Вывод:

Никакого, согласно документации, но на самом деле: AL = код записанного символа (копия DL)

Эта функция не обрабатывает управляющие символы (CR, LF, HT и BS выполняют свои функции при выводе на экран, но сохраняются при перенаправлении вывода в файл) и не проверяет нажатие Ctrl-Break. Можно заменить в программе dosoutl.asm команду MOV АН, 2 на MOV АН, 6 и перекомпилировать этот пример, чтобы получить более полную таблицу символов.

Функция DOS 09h - Записать строку в STDOUT с проверкой на Ctrl-Break

Ввод:

АН = 09h
DS:DX = адрес строки, заканчивающейся символом $ (24h)

Вывод:

Никакого, согласно документации, но на самом деле: AL = 24h (код последнего символа)

Действие этой функции полностью аналогично действию функции 02h, но выводится не один символ, а целая строка, как в программах hello-1.asm и hello-2.asm.

Функция DOS 40h - Записать в файл или устройство

Ввод:

АН = 40h
ВХ = 1 для STDOUT или 2 для STDERR
DS:DX = адрес начала строки
СХ = длина строки

Вывод:

CF = 0,
АХ = число записанных байт

Эта функция предназначена для записи в файл, но, если в регистр ВХ поместить число 1, функция 40h будет выводить данные на STDOUT, а если ВХ = 2 - на устройство STDERR. STDERR всегда выводит данные на экран и не перенаправляется в файлы. На этой функции основаны используемые в С функции стандартного вывода - фактически функция С fputs() просто вызывает это прерывание, помещая свой первый аргумент в ВХ, адрес строки (второй аргумент) - в DS:DX и длину - в СХ.

; dosout2.asm

; Выводит на экран строку «This function can print $»,

; используя вывод в STDERR, так что ее нельзя перенаправить в файл.

model tiny

code

org 100h; начало СОМ-файла

start:

mov ah, 40h; номер функции DOS

mov bx, 2; устройство STDERR

mov dx, offset message; DS:DX - адрес строки

mov cx, message_length; CX - длина строки

int 21h

ret; завершение СОМ-файла

message db «Эта функция может выводить знак $»

message_length = $-message; длина строки = текущий адрес

; минус адрес начала строки

end start

Если скомпилировать эту программу и запустить ее командой

dosout2.com > dosout2.out

то сообщение появится на экране, а файл dosout2.out окажется пустым.

Последняя функция DOS вывода на экран - недокументированное прерывание 29h.

INT 29h: Быстрый вывод символа на экран

Ввод:

AL = ASCII-код символа

В большинстве случаев INT 29h просто немедленно вызывает функцию BIOS «вывод символа на экран в режиме телетайпа», так что никаких преимуществ, кроме экономии байт при написании как можно более коротких программ, она не имеет.

Все, что изображено на мониторе - и графика, и текст, одновременно присутствует в памяти, встроенной в видеоадаптер. Для того чтобы изображение появилось на мониторе, оно должно быть записано в память видеоадаптера. Для этого отводится специальная область памяти, начинающаяся с абсолютного адреса B800h:0000h (для текстовых режимов) и заканчивающаяся на B800h:FFFFh. Все, что программы пишут в эту область памяти, немедленно пересылается в память видеоадаптера. В текстовых режимах для хранения каждого изображенного символа используются два байта: байт с ASCII-кодом символа и байт с его атрибутом, так что по адресу B800h:0000h лежит байт с кодом символа, находящимся в верхнем левом углу экрана; по адресу B800h:0001h лежит атрибут этого символа; по адресу B800h:0002h лежит код второго символа в верхней строке экрана и т.д.

Таким образом, любая программа может вывести текст на экран простой командой пересылки данных, не прибегая ни к каким специальным функциям DOS или BIOS.

; dirout.asm

; Выводит на экран все ASCII-символы без исключения,

; используя прямой вывод на экран

model tiny

code

386; будет использоваться регистр ЕАХ

; и команда STOSD

org 100h; начало СОМ-файла

start:

mov ax, 0003h

int 10h; видеорежим 3 (очистка экрана)

cld; обработка строк в прямом направлении

; подготовка данных для вывода на экран

mov еах, 1F201F00h; первый символ 00 с атрибутом 1Fh,

; затем пробел (20h) с атрибутом 1Fh

mov bx, 0F20h; пробел с атрибутом 0Fh

mov cx, 255; число символов минус 1

mov di, offset ctable; ES:DI - начало таблицы

cloop:

stosd; записать символ и пробел в таблицу ctable

inc al; AL содержит следующий символ

test cx, 0Fh; если СХ не кратен 16,

jnz continue_loop; продолжить цикл,

push cx; иначе: сохранить значение счетчика

mov cx, 80-32; число оставшихся до конца строки символов

xchg ax, bx

rep stosw; заполнить остаток строки пробелами

; с атрибутом 0F

xchg bx.ax; восстановить значение ЕАХ

pop cx; восстановить значение счетчика

continue_loop:

loop cloop

stosd; записать последний (256-й) символ и пробел

; собственно вывод на экран

mov ax, 0B800h; сегментный адрес видеопамяти

mov es, ax

xor di, di; DI = 0, адрес начала видеопамяти в ES:DI

mov si, offset ctable; адрес таблицы в DS:SI

mov cx, 15*80+32; 15 строк по 80 символов, последняя строка - 32

rep movsw; скопировать таблицу ctable в видеопамять

ret; завершение СОМ-файла

ctable:; Данные для вывода на экран начинаются сразу

; за концом файла. В ЕХЕ-файле такие данные

; определяют в сегменте.data?

end start

При подготовке данных для копирования в видеопамять в этой программе использовался тот факт, что в архитектуре Intel при записи слова (или двойного слова) в память старший байт располагается по старшему адресу. Так что при записи в память двойного слова 1F201F00h сначала записывается самый младший байт 00h (ASCII-код текущего символа), потом 1Fh, используемый в этом примере атрибут, потом 20h (код пробела) и потом, по самому старшему адресу, - самый старший байт, 1Fh, атрибут для этого пробела. Кроме того, в этом примере использовались некоторые 32-битные команды (MOV и STOSD). Этими командами можно пользоваться из 16-битной программы (разумеется, если процессор 80386 и выше), но не стоит этим злоупотреблять, так как каждая такая команда оказывается длиннее на 1 байт и выполняется дольше на 1 такт.

2. Вывод содержимого подкаталога на экран. Создание и удаление файла. Переименование файла. Чтение и запись файла. Вывод на экран последней строки текстового файла.

Найти нужный файл на диске намного сложнее, чем просто открыть его, - для этого требуются две функции при работе с короткими именами (найти первый файл и найти следующий файл) и три - при работе с длинными именами в DOS 7.0 (найти первый файл, найти следующий файл, прекратить поиск).

Функция DOS 4Eh - Найти первый файл

Ввод:

АН = 4Eh
AL используется при обращении к функции APPEND
СХ = атрибуты, которые должен иметь файл (биты 0 (только для чтения) и 5 (архивный бит) игнорируются, если бит 3 (метка тома) установлен, все остальные биты игнорируются)
DS:DX = адрес ASCIZ-строки с именем файла, которое может включать путь и маски для поиска (символы * и?)

Вывод:

CF = 0 и область DTA заполняется данными, если файл найден
CF = 1 и АХ = 02h, если файл не найден, 03h - если путь не найден, 12h - если неправильный режим доступа

Вызов этой функции заполняет данными область памяти DTA (область передачи данных), которая начинается по умолчанию со смещения 0080h от начала блока данных PSP (при запуске СОМ- и ЕХЕ-программ сегменты DS и ES содержат сегментный адрес начала PSP), но ее можно переопределить с помощью функции 1Ah.

Функция DOS 1Ah - Установить область DTA

Ввод:

АН = 1Ah
DS:DX = адрес начала DTA (128-байтный буфер)

Функции поиска файлов заполняют DTA следующим образом:

+00h: байт - биты 0 - 6: ASCII-код буквы диска; бит 7: диск сетевой

+01h: 11 байт - маска поиска (без пути)

+0СН: байт - атрибуты для поиска

+0Dh: слово - порядковый номер файла в каталоге

+0Fh: слово - номер кластера начала внешнего каталога

+11h: 4 байта - зарезервировано

+15h: байт - атрибут найденного файла

+16h: слово - время создания файла в формате DOS:

биты 15 - 11: час (0 - 23)

биты 10 - 5: минута

биты 4 - 0: номер секунды, деленный на 2 (0 - 30)

+18h: слово - дата создания файла в формате DOS:

биты 15 - 9: год, начиная с 1980

биты 8 - 5: месяц

биты 4 - 0: день

+1Ah: 4 байта - размер файла

+1Eh: 13 байт - ASCIZ-имя найденного файла с расширением

После того как DTA заполнена данными, для продолжения поиска следует вызывать функцию 4Fh, пока не будет возвращена ошибка.

Функция DOS 4Fh - Найти следующий файл

Ввод:

АН = 4Fh
DTA - содержит данные от предыдущего вызова функции 4Е или 4F

Вывод:

CF = 0 и DTA содержит данные о следующем найденном файле, если не произошла ошибка
CF = 1 и АХ = код ошибки, если произошла ошибка

Для случая длинных имен файлов (LFN) употребляется набор из трех подфункций функции DOS 71h, которые можно использовать, только если запущен IFSmgr (всегда запускается при обычной установке Windows 95, но не запускается, например, с загрузочной дискеты MS-DOS 7.0).

Функция LFN 4Eh - Найти первый файл с длинным именем

Ввод:

АХ = 714Eh
CL = атрибуты, которые файл может иметь (биты 0 и 5 игнорируются)
СН = атрибуты, которые файл должен иметь
SI = 0: использовать Windows-формат даты / времени
SI = 1: использовать DOS-формат даты / времени
DS:DX = адрес ASCIZ-строки с маской для поиска (может включать * и?. Для совместимости маска *.* ищет все файлы в каталоге, а не только файлы, содержащие точку в имени)
ES:DI = адрес 318-байтного буфера для информации о файле

Вывод:

CF = 0
АХ = поисковый идентификатор
СХ = Unicode-флаг:

бит 0: длинное имя содержит подчеркивания вместо непреобразуемых Unicode-символов
бит 1: короткое имя содержит подчеркивания вместо непреобразуемых Unicode-символов

CF = 1, АХ = код ошибки, если произошла ошибка (7100h - функция не поддерживается)

Если файл, подходящий под маску и атрибуты поиска, найден, область данных по адресу ES:DI заполняется следующим образом:

+00h: 4 байта - атрибуты файла

биты 0 - 6: атрибуты файла DOS

бит 8: временный файл

+04h: 8 байт - время создания файла

+0Ch: 8 байт - время последнего доступа к файлу

+14h: 8 байт - время последней модификации файла

+1Ch: 4 байта - старшее двойное слово длины файла

+20h: 4 байта - младшее двойное слово длины файла

+24h: 8 байт - зарезервировано

+2Ch: 260 байт - ASCIZ-имя файла длинное

+130h: 14 байт - ASCIZ-имя файла короткое

Причем даты создания / доступа / модификации записываются в одном из двух форматов, в соответствии со значением SI при вызове функции. Windows-формат - 64-битное число 100-наносекундных интервалов с 1 января 1601 года, а если используется DOS-формат - в старшее двойное слово записывается DOS-дата, а в младшее - DOS-время.

Функция LFN 4Fh - Найти следующий файл

Ввод:

АХ = 714Fh
ВХ = поисковый идентификатор (от функции 4Eh)
SI = формат даты / времени
ES:DI = адрес буфера для информации о файле

Вывод:

CF = 0 и СХ = Unicode-флаг, если следующий файл найден
CF = 1, АХ = код ошибки, если произошла ошибка (7100h - функция не поддерживается)

Функция LFN A1h - Закончить поиск файла

Ввод:

АХ = 71A1h
ВХ = поисковый идентификатор

Вывод:

CF = 0, если операция выполнена
CF = 1 и АХ = код ошибки, если произошла ошибка (7100h - функция не поддерживается)

Выведу на экран все 256 символов, включая даже символы перевода строки. Кроме того, для лучшей читаемости таблицы после каждого символа будет выводиться пробел.

; biosout.asm

; Выводит на экран все ASCII-символы без исключения

model tiny

code

org 100h; Начало СОМ-файла

start:

mov ax, 0003h

int 10h; Видеорежим 3 (очистка экрана

; и установка курсора в 0, 0)

mov dx, 0; DH и DL будут использоваться

; для хранения положения курсора.

; Начальное положение - 0,0

mov si, 256; SI будет счетчиком цикла

mov al, 0; Первый символ - с кодом 00h

mov ah, 9; Номер видеофункции «вывод символа с атрибутом»

mov cx, 1; Выводится один символ за раз

mov bl, 00011111b

; атрибут символа - белый на синем

cloop:

int 10h; Вывести символ на экран

push ax; Сохранить текущий символ и номер функции

mov ah, 2; Номер видеофункции 2 -

; изменить положение курсора

inc dl; Увеличить текущий столбец на 1

int 10h; Переместить курсор

mov ax, 0920h; АН = 09, AL = 20h (ASCII-код пробела)

int 10h; Вывести пробел

mov ah, 2; Номер видеофункции 2

inc dl; Увеличить столбец на 1

int 10h; Переместить курсор

pop ax; Восстановить номер функции в ah

; и текущий символ в al

inc al; Увеличить AL на 1 - следующий символ

test al, 0Fh; Если AL не кратен 16,

jnz continue_loop

; продолжить цикл,

push ax; иначе - сохранить номер функции

; и текущий символ

mov ah, 2; Номер видеофункции 2

inc dh; Увеличить номер строки на 1

mov dl, 0; Столбец = 0

int 10h; Установить курсор на начало следующей строки

pop ax; Восстановить номер видеофункции

; и текущий символ

continue_loop:

dec si; Уменьшить SI на 1,

; если он не стал нулем - продолжить

jnz cloop; CX используется внутри цикла,

; так что нельзя использовать команду LOOP

; для его организации

ret; Завершение СОМ-файла

end start

Так как функция 09 выводит символ в позиции курсора, но не перемещает сам курсор, это приходится делать каждый раз специально.

Функции BIOS удобны для переключения и настройки видеорежимов, но часто оказывается, что вывод текста на экран гораздо быстрее и проще выполнять просто копированием изображения в видеопамять.

Опишу программу, выводящую на экран все ASCII-символы, 16 строк по 16 символов в строке.

; dosoutl.asm

; Выводит на экран все ASCII-символы

;

model tiny

code

org 100h; начало СОМ-файла

start:

mov ex, 256; вывести 256 символов

mov dl, 0; первый символ - с кодом 00

mov ah, 2; номер функции DOS «вывод символа»

cloop: int 21h; вызов DOS

inc dl; увеличение DL на 1 - следующий символ

test dl, 0Fh; если DL не кратен 16,

jnz continue_loop; продолжить цикл,

push dx; иначе: сохранить текущий символ

mov dl, 0Dh; вывести CR

int 21h

mov dl, 0Ah; вывести LF

int 21h

pop dx; восстановить текущий символ

continue_loop:

loop cloop; продолжить цикл

ret; завершение СОМ-файла

end start

Здесь с помощью команды LOOP оформляется цикл, выполняющийся 256 раз (значение регистра СХ в начале цикла). Регистр DL содержит код символа, который равен нулю в начале цикла и увеличивается каждый раз на 1 командой INC DL. Если значение DL сразу после увеличения на 1 кратно 16, оно временно сохраняется в стеке и на экран выводятся символы CR и LF, выполняющие переход на начало новой строки. Проверка выполняется командой TEST DL, 0Fh - результат операции AND над DL и 0Fh будет нулем, только если младшие четыре бита DL равны нулю, что и соответствует кратности шестнадцати.

В качестве примера приведу программу, использующую многие из функций работы с файлами, заменяющую русские буквы «Н» на латинские «Н» во всех файлах с расширением. ТХТ в текущем каталоге (такая замена требуется для всех текстов, которые будут пересылаться через сеть Fidonet, программное обеспечение которой воспринимает русскую букву «Н» как управляющий символ).

; fidoh.asm

; заменяет русские «Н» на латинские «Н» во всех файлах с расширением. ТХТ

; в текущем каталоге

model tiny

code

org 100h; СОМ-файл

start:

mov ah, 4Eh; поиск первого файла

xor cx, cx; не системный, не каталог и т.д.

mov dx, offset filespec; маска для поиска в DS:DX

file_open:

int 21h

jc no_more_files; если CF = 1 - файлы кончились

mov ax, 3D02h; открыть файл для чтения и записи

mov dx, 80h+1Eh; смещение DTA + смещение имени файла

int 21h; от начала DTA

jc find_next; если файл не открылся - перейти

; к следующему

mov bx, ax; идентификатор файла в ВХ

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

mov dx, offset buffer; начало буфера - в DX

read_next:

mov ah, 3Fh; чтение файла

int 21h

jc find_next; если ошибка - перейти к следующему

dec ах; если АХ = 0 - файл кончился -

js find_next; перейти к следующему

cmp byte ptr buffer, 8Dh; если не считана русская «Н»,

jne read_next; считать следующий байт,

mov byte ptr buffer, 48h; иначе - записать в буфер

; латинскую букву «Н»

mov ax, 4201h; переместить указатель файла от текущей

dec cx; позиции назад на 1

dec cx; CX = FFFFh

mov dx, cx; DX = FFFFh

int 21h

mov ah, 40h; записать в файл

inc cx

inc cx; один байт (СХ = 1)

mov dx, offset buffer; из буфера в DS:DX

int 21h

jmp short read_next; считать следующий байт

find_next:

mov ah, 3Eh; закрыть предыдущий файл

int 21h

mov ah, 4Fh; найти следующий файл

mov dx, 80h; смещение DTA от начала PSP

jmp short file_open

no_more_files:; если файлы кончились,

ret; выйти из программы

filespec db «*.txt», 0; маска для поиска

buffer label byte; буфер для чтения / записи -

end start; за концом программы

Список используемой литературы

Абель П. Язык Ассемблера для IBM PC и его программирование - М.: Высшая школа, 1992. - 252 с.

С.В. Зубков Ассемблер для DOS, Windows и Unix - М.: ДМК Пресс, 1999. - 630 с.

И. Юров Assembler - СПб.: Питер, 2001. - 624 с.

Бэрри Н. Компьютерные сети. Пер. с англ. - М.: БИНОМ. - 1995. - 400 с.

Джамса К., Лалани С., Уикли С. Программирование в WWW для профессионалов. - Минск. - Попурри. - 1997. - 631 с.

Кент П. World Wide Web: Пер. с англ. - М.: Компьютер. - 1996. - 311 с.

Кулаков Ю.А. Компьютерные сети. - Киев. - 1998. - 384 с.

Компьютерные сети. Принципы, технологии, протоколы/В.Г. Олифер, Н.А. Олифер. - СПб: Питер, 2001. - 672 с.

Максимов Н.В., Партыка Т.Л., Попов И.И. Технические средства информатизации: Учебник. - М.: ФОРУМ: ИНФРА-М, 2005. - 576 с.: ил. - (Профессиональное образование)

Милославская Н.Г., Толстой А.И. Интрасети: доступ в Internet. Защита: Учеб. пособие для вузов. - М.: ЮНИТИ - ДАНА, 200, 527 с.

Колесников Internet: для пользователя. - К.: Издательская группа BHV, 2000.-304 с.

Новомлинский Л. Интернет - торговля. Часть 1/ Сети и системы связи. 1998 - №8.

Новомлинский Л. Интернет - торговля. Часть 2/ Сети и системы связи. 1998 - №9.

Пятибратов А.П. Вычислительные машины, сети и телекоммуникации/ Пятибратов А.П., Гудыно Л.П. - М.: Финансы и статистика. - 1998. - 400 с.

Сеть Internet. Применение в науке и бизнесе/ Горностаев Ю.М. и др. - М.: Россия - 1994. - 136 с.

Сеть Internet./ Горностаев Ю.М. и др. - М.: Россия. - 1993. - 88 с.

Сорокин Л. Аукционы в Интернате - будущее электронной коммерции // Мир электронной коммерции. - 2000. - №1.

Информатика: Учебник. - 3-е перераб. изд. / Под ред. проф. Н.В. Макаровой. - М.: Финансы и статистика, 2000. - 768 с.: ил.

Размещено на Allbest.ru


Подобные документы

  • Описание типизированных файлов. Принципы работы с файлами, создание и открытие на запись нового файла. Чтение из файла, открытие существующего файла на чтение. Определение имени файла. Запись в текстовый файл. Описание множества и операции над ними.

    реферат [86,4 K], добавлен 07.02.2011

  • Проверка существования и статуса файла. Определение его размера. Открытие файла для чтения, записи, добавления. Закрытие файловых дескрипторов. Запись из переменной в файл. Загрузка файла из сети. Создание и удаление каталога. Функции работы с каталогами.

    презентация [133,9 K], добавлен 21.06.2014

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

    реферат [14,5 K], добавлен 06.12.2011

  • Алгоритм и код программы для создания исходного двоичного файла чисел с произвольным количеством элементов, чтения из файла действительных восьмибайтных элементов и подсчёта общего количества элементов файла. Вывод результата работы программы на экран.

    контрольная работа [1,0 M], добавлен 23.11.2014

  • Создание программного продукта на языке Pascal в визуальной среде программирования Borland Developer Studio в консольном приложении. Разработка типизированного файла для записи данных и их вывод на экран, добавление данных в конец файла, поиск информации.

    курсовая работа [1,0 M], добавлен 04.12.2011

  • Файловый ввод/вывод с использованием разных классов. Вызовы операционной системы. Использование вызовов операционной системы. Основные способы открытия файла. Замена файла, связанного со стандартными устройствами ввода/вывода. Операции чтения файла.

    курсовая работа [1,1 M], добавлен 09.12.2016

  • Назначение команды "diskcomp". Текст и запуск командного файла. Сравнение команды в Windows 7 и Windows XP. Разработка файла-сценария в ОС Linux. Создание файла в подкаталоге. Создание файла "oglavlenie.txt" с отсортированным по времени списком файлов.

    курсовая работа [1,6 M], добавлен 22.08.2012

  • Структура заданного исходного файла и структуры данных, соответствующие данным файла. Подпрограмма проверки принадлежности текста к одной из шести кодовых таблиц. Алгоритмы перекодировки файла в cp1251. Алгоритм сортировки записей исходного файла.

    курсовая работа [63,7 K], добавлен 12.12.2010

  • Создание проекта, включающего две программы: одна программа – сортирует массив из файла, а другая выводит на экран содержание этого файла. Обе программы используют один и тот же файл в один момент времени, то есть работают оба процесса одновременно.

    лабораторная работа [14,5 K], добавлен 04.04.2011

  • Принципы программирования файловой структуры в операционной системе Windows. Свойства и методы класса Tstream. Пример создания, чтения и записи потока. Чтение, запись и внутренняя структура файла. Пример чтения из файла, начиная с заданной позиции.

    курсовая работа [251,6 K], добавлен 18.05.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.