Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория. Архитектура компьютеров.doc
Скачиваний:
3
Добавлен:
28.10.2018
Размер:
479.74 Кб
Скачать

4. Порядок выполнения

4.1. С помощью функции 2 прерывания 13h прочитать в память

содержимое первого сектора жесткого диска (см. п. 2.3).

4.2. Проверить правильность выполненной операции.

4.3. Используя таблицу разделов жесткого диска (табл. 2), оп-

ре делить число разделов жесткого диска ПЭВМ.

4.4. Используя таблицу 2, определить начало раздела (номера

головки, сектора и цилиндра), т.е. адрес корневого сектора. Номер

требуемого раздела выбрать следующим образом:

. нр = нж mod чр,

. где:нр - номер раздела;

нж - номер студента в журнале;

чр - определенное в п. 3.2 число разделов.

4.5. Используя таблицу 2, определить тип FAT (12-битная или

16-битная).

4.6. С помощью функции 2 прерывания 13h прочитать в память

содержимое корневого сектора выбранного раздела и проверить пра-

вильность операции.

4.7. Используя таблицу 1 определить адрес (номера головки,

цилиндра и сектора) области FAT и корневого каталога.

5.Особенности программирования

5.1.На языке Турбо-Паскаль.

5.1.1.При использовании программного прерывания необходимо:

- подключить модуль Dos, в котором описаны процедура Intr и

тип переменной Registers;

- объявить переменную этого типа, например, reg:Registers;

- к регистрам микропроцессора обращаться, как reg.ah, reg.al

и т.д.;

- процедуру прерывания 13H вызывать следующим образом:

Intr($13,reg).

5.1.2. Область памяти, куда считывается содержимое сектора,

удобно объявить как массив байтов:

. var

. sect:array[0..511] of byte;

Тогда необходимые значения сегмента и смещения адреса области

памяти можно задать, используя функции Seg и Ofs:

. reg.es:=Seg(sect);

. reg.bx:=Ofs(sect);

5.2. На языке Турбо-Си.

5.2.1.При использовании программного прерывания необходимо:

- подключить библиотеку Dos, в котором описаны процедура Int86x и

тип смеси REGS директивой:

. #include <dos.h>

- объявить переменные смеси:

. union REGS in,out,sr;

- к регистрам микропроцессора обращаться, как in.h.ah, in.x.ax;

- к сегментным регистрам обращаться, как sr.es;

- процедуру прерывания 13H вызывать следующим образом:

. Int86x(0x13,&in,&out,&sr).

5.2.2. Область памяти, куда считывается содержимое сектора,

удобно объявить как массив байтов:

. unsigned char buf[512];

Тогда необходимые значения сегмента и смещения адреса области

памяти можно задать, используя функции FP_SEG() и FP_OFF():

. sr.es=FP_SEG(buf);

. in.x.bx=FP_OFF(buf);

6. Индивидуальные задания

Индивидуальные задания в данной лабораторной работе определе-

ны в п. 4.4.

7.Содержание отчета

7.1.Тема лабораторной работы.

7.2.Цель работы.

7.3.Индивидуальное задание.

7.4.Текст программы.

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

Лабораторная работа 7 СТРУКТУРА КОРНЕВОГО КАТАЛОГА

1. Цель работы

Изучение структуры корневого каталога и приобретение практи-

ческих навыков работы с его отдельными элементами.

2. Темы для предварительной проработки

2.1. Организация корневого каталога.

3. Описание работы

3.1. Структура корневого каталога.

Каждый диск имеет один корневой каталог. Расположение корне-

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

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

(только для жестких дисков) и таблицу корневого сектора (см. лаб.

раб. "Структура дисков" ).

Корневой каталог используется для хранения информации о фай-

лах, включая имя файла, его размер, начальный элемент таблицы раз-

мещения, относящийся к данному файлу, дату и время его создания

или модификации и атрибуты файла (см. табл. 1).

Каталог представляет собой таблицу, в которой каждому файлу

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

пись. Эта запись имеет размер 32 байта, следовательно на одном

секторе размером 512 байтов помещается 16 записей (элементов) ка-

талога.

Таблица 1

Поля записи каталога

──────────────────────────────────────────────────────────

Поле Смещ. Описание Размер Формат

──────────────────────────────────────────────────────────

1 0 Имя файла 8 Символы ASCII

2 8 Имя расширения файла 3 Символы ASCII

3 11 Атрибуты 1 Биты байта

4 12 Служебное поле 10 Не используется

5 22 Время создания 2 Слово

6 24 Дата создания 2 Слово

7 26 Начальный кластер 2 Слово

8 28 Размер файла 4 Длинное целое

────────────────────────────────────────────────────────────

3.2. Поля записи каталога.

3.2.1. Имя файла.

Первые восемь байтов записи каталога содержат имя файла в

формате ASCII. Если имя файла короче восьми символов, то оно до-

полняется справа пробелами (ASCII код - 32). Буквы в имени обяза-

тельно должны быть заглавными.

Существует три особых ситуации, отмечаемых специальными зна-

чениями первого байта в имени файла.

Неиспользуемые элементы каталога имеют первый байт равный 0.

DOS прекращает просмотр каталога, как только встретит такой эле-

мент. Этот же признак может использовать программист при работе с

каталогом как признак окончания элементов каталога.

Если первый байт имени файла равен E5h, то это означает, что

данный файл уничтожен.

Уничтожение файла на диске, собственно, означает две вещи:

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

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

лице размещения файлов как свободные.

Вся прочая информация об этом файле, включая остаток имени,

размер фала, его начальный кластер, остается в каталоге.

Третий особый случай - когда в качестве первого байта имени

используется символ "." (ASCII код - 2h). Этот символ применяется

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

тогда этот элемент каталога соответсвует катологу-родителю текуще-

го, а поле начального кластера указывает расположение каталога-ро-

дителя.

3.2.2. Расширение имени файла.

Непосредственно за именем файла следует расширение имени фай-

ла, записанное в формате ASCII. Длина его составляет три байта и

подобно имени файла, если расширение имени состоит меньше чем из

трех символов, оно дополняется пробелами. Однако если имя файла

должно состоять хотя бы из одного символа, расширение может иметь

одни пробелы.

3.2.3. Атрибуты файла.

Формат байта атрибутов файла представлен в таблице 2.

Таблица 2

Формат байта атрибутов файла

────────────────────────────────────────

Биты Значение, когда бит = 1

────────────────────────────────────────

0 Разрешено только чтение

1 Скрытый

2 Системный

3 Метка тома

4 Подкаталог

────────────────────────────────────────

Продолжение табл.2

────────────────────────────────────────

Биты Значение, когда бит = 1

────────────────────────────────────────

5 Архив

6 Не используется

7 Не используется

────────────────────────────────────────

Если разрешено только чтение файла, то в этом случае файл за-

щищен от любого изменения или удаления с помощью любых операций

DOS.

Биты 1 и 2 маркируют файл как скрытый или системный. Файлы

помеченные как скрытые или системные, или и те и другие, нельзя

увидеть с помощью простой операции DOS вроде DIR (чтобы увидеть

такой файл необходимо изменить его атрибут). Атрибут "системный"

не имеет какого-то особого значения, он остался по наследству от

операционной системы CP/M и в DOS абсолютно ничего не делает.

Бит 3 маркирует элемент каталога как метку, что означает, что

этот элемент содержит идентифицирующую метку тома диска. Метка за-

писывается в полях имени и расширении имени файла, которые в дан-

ном случае расматриваются как объединенное поле. Поля размера и

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

пользуются.

Бит 4 маркирует элемент каталога как подкаталог. Подкаталоги

записываются на диске подобно обычным файлам. Для элемента катало-

га такого типа используются все поля, за исключением поля размера

файла, которое равно нулю. Действительный размер подкаталога опре-

деляется просмотром его FAT.

Бит 5, атрибут архива был создан для того, чтобы помочь копи-

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

Этот разряд сброшен для всех файлов, которые изменились после пос-

леднего копирования. Для дискет атрибут архива практически беспо-

лезен.

3.2.4. Служебное поле.

Это поле оставлено для возможного использования в будущем.

Все 10 байтов поля обычно равны 0.

3.2.5. Время создания файла или его последней модификации.

Поле 5 содержит 2-байтовое значение, указывающее время созда-

ния или последнего изменения файла. Вместе с полем даты эти два

поля могут рассматриваться как одно 4-байтовое беззнаковое число.

Это число может сравниваться с такими же числами в других элемен-

тах каталога на больше, меньше или равно. Формат поля времени и

выражения для выделения часов, минут и 2-секундных единиц (для

хранения полных секунд не хватило одного бита) представлены на

рис. 1.

╓15┬14┬13┬12┬11┬10┬09┬08╥07┬06┬05┬04┬03┬02┬01┬00╖

║ часы │ минуты │ сек/2 ║

╙──┴──┴──┴──┴──┴──┴──┴──╨──┴──┴──┴──┴──┴──┴──┴──╜

╚═════╦═════╝ ╚═══════╦══════╝ ╚═════╦═════╝

║ ║ ╚════ 2-секундные

║ ║ единицы (0-30)

║ ║ (t & 001fH)

║ ║

║ ╚═══════════════ минуты (0-59)

║ ((t & 07e0H >> 5)

╚══════════════════════════ часы (0-23)

((t & 0f800H) >> 11)

Рис. 1

3.2.6. Дата создания файла или его последней модификации.

Поле 6 содержит 2-байтовое значение, указывающее на дату соз-

дания или изменения файла. Вместе с полем времени эти два поля мо-

гут рассматриваться как одно 4-байтовое беззнаковое число. Это

число может сравниваться с такими же числами в других элементах

каталога на больше, меньше или равно. Формат поля даты и выражения

для выделения дня, месяца и года представлены на рис. 2.

╓15┬14┬13┬12┬11┬10┬09┬08╥07┬06┬05┬04┬03┬02┬01┬00╖

║ год │ месяц │ день ║

╙──┴──┴──┴──┴──┴──┴──┴──╨──┴──┴──┴──┴──┴──┴──┴──╜

╚════════╦════════╝ ╚════╦════╝ ╚═════╦═════╝

║ ║ ╚════ день (0-31)

║ ║ (d & 001fH)

║ ║

║ ╚═════════════ месяц (1-12)

║ ((d & 01e0H) >> 5)

╚════════════════════════ год (0-119)

((d & f800H) >> 9)

Рис. 2

Для получения истинного значения года надо к значению года,

выделенного из даты прибавить 1980.

3.2.7. Номер начального кластера

Кластер - это группа смежных секторов. Величина кластера,ко-

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

вается в таблице корневого сектора.

Поле 7 - это 2-байтовое значение, которое дает номер началь-

ного кластера для области данных файла. Оно действует как точка

входа в цепочку занятого пространства файла, находящуюся в FAT.

Для файлов, не занимающих области данных, а также для меток томов

номер начального кластера равен нулю.

3.2.8. Размер файла.

Последнее поле элемента файла дает размер файла в байтах. От-

метим, что когда DOS читает файл, она указывает на конец файла,

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

нятого пространства в FAT в зависимости от того, что первым

будет обнаружено.

3.3. Чтение сектора диска в память.

Для чтения содержимого требуемого сектора в указанную область

памяти используется функция 2 прерывания 13h. При этом регистры

имеют следующее назначение:

ah - номер функции;

dl - номер дисковода: 0 - "A", 1 - "B", $80 - жесткий диск;

dh - номер головки (стороны);

ch - номер дорожки (цилиндра);

cl - номер сектора;

al - число секторов;

es - значение сегмента адреса области памяти;

bx - значение смещения адреса области памяти.

Если функция прерывания выполнена без ошибок, то флаг перено-

са CF (младший разряд регистра флагов Flags) установлен в 0 и ре-

гистр ah содержит 0. Если флаг переноса установлен в 1, значит бы-

ла ошибка и регистр ah содержит код ошибки (байт состояния). В

таблице 3 приведен формат байта состояния для дискеты.

Таблица 3

Байт состояния дискеты

────────────────────────────────────────────────────────────────

Биты

7 6 5 4 3 2 1 0 Значение

────────────────────────────────────────────────────────────────

. . . . . . . 1 Неверная команда: неправильный запрос

к контроллеру дискеты

. . . . . . 1 . Плохой адресный маркер: неверная маркировка

идентификатора сектора или маркер не найден

. . . . . 1 . . Плохой сектор: на дискете нет заданного

сектора

. . . . 1 . . . Ошибка прямого доступа к памяти (DMA)

. . . 1 . . . . Ошибка циклического кода : ошибка в четнос-

ти данных при чтении дискеты

. . 1 . . . . . Ошибка контроллера дискеты: неисправность

контролллера дискеты

. 1 . . . . . . Ошибка поиска: ошибка при перемещении на

заданную дорожку

1 . . . . . . . Тайм-аут: дисковод не отвечает

. . . . . . 1 1 Ошибка защиты записи: попытка записи на за-

щищенную дискету

. . . . 1 . . 1 Ошибка границы DMA: попытка обращения за пре-

делы области 64K

────────────────────────────────────────────────────────────────

4. Порядок выполнения

4.1. С помощью функции 2 прерывания 13h прочитать в память

содержимое первого сектора корневого каталога (адрес корневого ка-

талога был определен в лаб. раб. "Структура дисков").

4.2. Проверить правильность выполненной операции.

4.3. Для всех файлов этого сектора определить и вывести на эк-

ран следующие данные файлов:

-имя файла и его расширенное имя;

-атрибуты;

-номер начального кластера;

-время и дату создания;

-размер.

4.4. Сравнить полученную информацию о файлах с информацией,

предоставляемой программой Norton Commander.