Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Работа с файлами, используя DTA. PSP. Окружение



Цель. Научиться работать с файлами используя DTA. Получить навыки использования в ассемблерных программах информации содержащейся в PSP и Окружении DOS.

Задание. Создать текстовый файл «Dir.Txt», содержащий перечень файлов в текущем каталоге. Примерный формат файла «Dir.Txt»:

******************************

D: \USERS\ASM\EXAMPLE\PRG2

.

..

FILE2.ASM

FILE2.COM

FILE2.OBJ

Дополнительная информация:

******************************

Дополнительная информация, записываемая в файл «Dir.Txt» выбирается в соответствии с вариантом.

Замечания:

1. файл «Dir.txt» можно создавать, используя описатели;

2. получение пути, по которому была запущена программа (первая строка в файле «Dir.Txt») можно осуществить, используя окружение DOS. Для этого, во-первых, необходимо получить адрес PSP (функция 062H прерывания 21H), во-вторых, найти в нем адрес окружения DOS, и, в-третьих, получив из окружения DOS строку, содержащую путь и имя запущенного файла, выделить из нее путь к текущему каталогу;

3. на следующем этапе производится поиск первого совпадающего с маской «*.*» файла и его имя записывается в файл «Dir.Txt». Перед началом поиска необходимо правильно установить атрибут файла в CX для сравнения. Далее производится поиск следующего совпадающего с маской файла, используя функцию 04FH прерывания 21H. Если такой файл найден, то его имя записывается в «Dir.Txt», иначе осуществляется выход из программы;

Таблица. Варианты заданий

Вариант Задание
Суммарный размер всех файлов в каталоге.
Размер файла, имеющего максимальный размер.
Размер каждого найденного файла.
Имя файла, имеющего максимальный размер.
Все содержимое окружения DOS.
В список включить лишь файлы, имеющие атрибут ReadOnly.
В список включить лишь файлы, соответствующие маске, которую пользователь вводит с клавиатуры.
Имя файла, имеющего имя минимальной длинны.
Количество файлов, имеющих расширение EXE.
Средний размер файла в текущем каталоге.

 

Теоретические сведения

Структура DTA

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

Буфер, используемый методом FCB доступа к файлам, называется областью обмена с диском или DTA. На этот буфер указывает условный указатель, который хранится операционной системой и который может быть изменен программой. В документации этот указатель на DTA часто сам называют DTA. Указатель на DTA устанавливается специальной функцией DOS и после того как он установлен все функции чтения/записи автоматически обращаются к нему. Это означает, что сами функции не должны содержать адрес временного буфера.

Для установки указателя на DTA используется функцию 1AH прерывания 21H (DS: DX должны указывать на первый байт DTA). Функция 2FH прерывания 21H сообщает текущую установку указателя DTA (при возврате ES: BX содержат сегмент и смещение DTA).

Префикс программного сегмента PSP обеспечивает каждую программу 128-байтным встроенным DTA, начиная со смещения 80H и до 9FH. Программа может использовать его при нехватке памяти. Первоначально указатель на DTA указывает именно на этот буфер, поэтому если программа будет использовать его, то нет нужды устанавливать указатель. Этот буфер по умолчанию особенно удобно использовать с COM файлами, где DS указывает на начало префикса программного сегмента. Для файлов EXE может потребоваться небольшой добавочный код, чтобы использовать DTA по умолчанию.

 

Таблица. Структура DTA

Смещение Длинна Содержимое в DTA
+00h 15h резервируется (используется в последующих вызовах 4fH Find Next)
+15h 01h атрибут файла для найденного файла (см.часть 1 данной лабораторной работы)
+16h 02h время создания/модификации в формате filetime
+18h 02h дата создания/модификации в формате filetime
+1ah 04h размер файла в байтах в формате DWORD
+1eh 0dh 13-байтовое ASCIIZ имя: " filename.ext", 0
+2ch   требуемый размер буфера

 

Формат FileTime:

часы (0-23) минуты (0-60) 2-секундные единицы (0-30)  
                                     

 

год (1-119) месяц (1-12) день (1-31)

Примечание: после извлечения года к нему необходимо прибавить 1980.

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

Функция 1ah

Установить адрес DTA.

Вход. AH=1aH

DS: DX=адрес для DTA

Выход. Нет

 

Описание. Устанавливает адрес DTA.

 

Функция 2fh

Дать текущий DTA.

Вход. AH=2fH

Выход. ES: BX=адрес для DTA

 

Описание. Возвращает адрес начала области ввода-вывода (DTA). Поскольку DTA глобальна для всех процессов, в рекурсивной процедуре (например, при проходе по дереву оглавления) может потребоваться сохранить адрес DTA, а впоследствии восстановить его посредством функции 1aH.

 

Функция 4eh

Найти 1-й совпадающий файл.

Вход. AH=4eH

DS: DX=адрес строки ASCIIZ с именем файла

CX=атрибут файла для сравнения

Выход. AX=код ошибки, если CF установлен

DTA=заполнена данными (если не было ошибки)

 

Описание. DS: DX указывает на строку ASCIIZ в форме: " d: \путь\имяфайла", 0. Если диск и/или путь опущены, они подразумеваются по умолчанию. Обобщенные символы * и? допускаются в имени файла и расширении. DOS находит имя первого файла в оглавлении, которое совпадает с заданным именем и атрибутом, и помещает найденное имя и другую информацию в DTA.

 

Функция 4fh

Найти следующий совпадающий файл.

Вход. AH=4fH

DS: DX= адрес данных, возвращенных предыдущей 4eH.

Выход. AX=код ошибки, если CF установлен

DTA=заполнена данными (если не было ошибки)

 

Описание. DS: DX указывает на 2bH-байтовый буфер с информацией, возвращенной функцией 4eH (либо DTA, либо буфер, скопированный из DTA).Необходимо использовать эту функцию после вызова 4eH. Следующее имя файла, совпадающее по обобщенному имени и атрибуту файла, копируется в буфер по адресу DS: DX вместе с другой информацией (см. функцию 4eH о структуре файловой информации в буфере, заполняемом DOS).

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

; Установить адрес DTA

MOV AH, 01AH

LEA DX, FDTA

INT 21H

...

; Наити первый совпадающий файл

MOV AH, 4EH

LEA DX, MASKA

MOV CX, 10H

INT 21H

JC EXIT

NEXT:

...

; Найти следующий совпадающий файл

MOV AH, 4FH

MOV CX, 10H

LEA DX, MASKA

INT 21H

JNC NEXT

EXIT:

...

; ========== DTA =========

FDTA DB 15H DUP (? )

FATTR DB?

FTIME DW?

FDATA DW?

FSIZE DD?

FNAME DB 0DH DUP ('$')

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

MASKA DB '*.*', 0

 

Структура PSP

Префикс программного сегмента PSP (Program Segment Prefics) – специальная область оперативной памяти размером 256 (100h) байт. PSP может использоваться в программе для определения имен файлов и параметров из командной строки, введенной при запуске программы на выполнение, объема доступной памяти, переменных окружения системы и так далее. После загрузки программы в память сегментные регистры DS и ES указывают на начало PSP этой программы.

Таблица. Структура PSP

Сме-щение Длин-на Содержимое
+0 INT 20 (EXE-программы могут делать сюда JMP или RET для выхода)
+2 вершина доступной памяти системы в параграфах
+4 резервируется
+5 FAR CALL к диспетчеру функций DOS
+6   доступные байты в программном сегменте (только для файла COM)
+0ah адрес завершения
+0eh адрес обработки Ctrl-Break
+12h обработчик критических ошибок
+16h 16h резервная область DOS
+2ch сегментный адрес окружения DOS
+2eh 2eh резервная область DOS
+5ch 10h форматированная область параметра1
+6ch 14h форматированная область параметра2
+80h длина области UPA (с адреса 81H) также смещение умалчиваемой DTA
+81h 7fh символы из командной строки DOS (исключая директивы переназначения)
100h   Размер префикса программного сегмента

 

Окружение DOS

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

Структура окружения DOS:

имя_1=значение_1«0»

имя_2=значение_2«0»

...

имя_N=значение_N«0»

«0»

«xxxx»

EXEC_string_1«0»

...

EXEC_string_NN«0»

«0»

 

Здесь «0» - это символ ASCII NUL (00H), а «xxxx» - 16-битовое двоичное значение (количество дополнительных строк).

Окружение не превышает 32K байт и начинается на границе параграфа. Смещение 2cH в PSP текущей программы содержит номер параграфа окружения. Используя окружение, можно найти нужное имя' серией сравнений строк ASCIIZ, пока не достигнута пустая строка (нулевой длины), что указывает конец окружения.

В последних версиях DOS, за концом официального окружения помещается дополнительная строка, которая содержит диск и путь, с которых была загружена программа. Вслед за последней строкой ASCIIZ окружения находится нулевой байт, указывающий конец официального окружения. Следующие два байта содержат 16-битовый двоичный счетчик дополнительных строк (обычно 0001H). Вслед за значением счетчика находится строка ASCIIZ, содержащая путь и имя файла. Это в точности та строка, которая использовалась функцией DOS 4bH (EXEC) для загрузки и запуска программы.

 

 

Лабораторная работа №4


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-08-31; Просмотров: 986; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.042 с.)
Главная | Случайная страница | Обратная связь