КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Описание работы. Темы для предварительной проработки
Темы для предварительной проработки Цель работы Содержание отчета Индивидуальные задания Особенности программирования 5.1. На языке Турбо-Паскаль. 5.1.1. При использовании программного прерывания необходимо: - подключить модуль Dos, в котором описаны процедура Intr и тип переменной Registers; - объявить переменную этого типа, например, reg:Registers; - к регистрам микропроцессора обращаться, как reg.ah, reg.al и т.д.; - процедуру прерывания 13H вызывать следующим образом: Intr($13,reg).
5.1.2. Область памяти, куда считывается содержимое сектора каталога удобно объявить как массив записей (см. табл. 1):
var sec_cat:array[1..16] of record name:array[1..8] of char; name_e:array[1..3] of char; atr:byte; rez:array[1..10] of byte; time, date, n_clast:word; size:longint end;
Необходимые значения сегмента и смещения адреса области памяти можно задать, используя функции Seg и Ofs:
reg.es:=Seg(sec_cat); reg.bx:=Ofs(sec_cat);
5.1.3. Для выделения полей времени и даты использовать выраже- ния, приведенные на рис. 1 и рис. 2. Символу & в Паскале соответс- втвует операция AND, а символу >> - Shr (сдвиг вправо).
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. Область памяти, куда считывается содержимое сектора каталога удобно объявить как шаблон структуры(см. табл. 1): struct sec_cat{ unsigned char name[8]; unsigned char name_e[3]; unsigned char atr; unsigned char rez[10]; unsigned int time; unsigned int date; unsigned int n_clast; unsigned long size; }; и определить массив структур struct sec_cat sec[16]; Тогда необходимые значения сегмента и смещения адреса области памяти можно задать, используя функции FP_SEG() и FP_OFF(): sr.es=FP_SEG(sec[0].name[0]); in.x.bx=FP_OFF(sec[0].name[0]); 5.2.3. Для выделения полей времени и даты использовать выраже- ния, приведенные на рис. 1 и рис. 2. Индивидуальные задания в данной лабораторной работе определе- ны в п. 4. 7.1.Тема лабораторной работы. 7.2.Цель работы. 7.3.Индивидуальное задание. 7.4.Текст программы. 7.5.Результаты работы программы. Лабораторная работа 8 СТРУКТУРА ТАБЛИЦЫ РАЗМЕЩЕНИЯ ФАЙЛОВ FAT Изучение структуры таблицы размещения файлов и приобретение практических навыков определения последовательностей кластеров, принадлежащих одному файлу. 2.1.Организация таблицы размещения файлов FAT. 3.1. Назначение FAT. Диск использует таблицу размещения файлов (FAT) для отведения дискового пространства файлам и хранения информации о свободных секторах. Из соображений безопасности на всех дисках хранятся по две копии FAT. Они хранятся последовательно начиная с первого сек- тора FAT. Для дискеты первым сектором FAT будет сектор, следующий за корневым сектором, т.е. сектор с координатами: дорожка 0, сто- рона 0, сектор 2. Для жесткого диска первый сектор FAT определяет- ся с помощью таблицы разделов и таблицы корневого сектора (см. лаб. раб. "Структура дисков"). Число секторов, занимаемых FAT, оп- ределяется типом и форматом диска и указывается в таблице корнево- го сектора. Таблица размещения файлов хранит информацию о каждом кластере файла на диске. Кластер - это группа смежных секторов. Величина кластера,которая для разных типов дисков и форматов может быть разной, указывается в таблице корневого сектора. Кластеры были введены с целью уменьшения размера FAT. 3.2. Организация FAT. Каждая позиция в таблице размещения файлов соответствует опре- деленной позиции кластера на диске. Обычно файл занимает несколько кластеров и запись в каталоге файлов содержит номер стартового кластера, в котором находится начало файла. Посмотрев позицию FAT, соответствующую первому кластеру, DOS находит номер кластера, в котором хранится следующая порция файла. Этому кластеру соответс- твует своя запись в FAT, которая в свою очередь содержит номер следующего кластера в цепочке. Для последнего кластера, занятого файлом, FAT содержит значения от FF8H до FFFH. Неиспользуемым (или освобожденным) кластерам соответствует значение 000, а дефектным секторам -FF7H. Наконец, значения от FF0H до FF7H приписываются резервным кластерам. На рис. 1 приведены элемент корневого каталога, описывающего файл с именем MYFILE.TXT, и фрагмент таблицы размещения файлов, определяющей размещение этого файла на диске:
номер начального кластера ══╗ ╓───────────────────┬─┬───────────────────┬───┬───┬───┬───────╖ ║M Y F I L E T X T│a│ │ t │ d │08 │ длина ║ ╙─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─╫─┴─┴─┴─┴─╜ ╔═════════════════════════╝ 00 01 02 03 04 05 06 07 ║8 09 0a 0b 0c 0d 0e 0f ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌─┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ 00│ID││ff││03═04═05═ff││00││00││09═0a═0b═15││00││00││00││00│ └──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└╫─┘└──┘└──┘└──┘└──┘ ╔═══════════════════════╝ ┌──┐┌──┐┌──┐┌──┐┌──┐┌─┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ 10 │00││00││00││00││00││16═17═19││f7││1a═1b═ff││00││00││00││00│ ╚═══════╝ Рис. 1 Этот рисунок иллюстрирует основные концепции FAT. Из него видно, что 2: -Файл MYFILE.TXT занимает 10 кластеров. Первый кластер - это кластер 08, последний кластер - 1bH. Цепочка кластеров - 8, 9, 0a, 0b, 15, 16, 17, 19, 1a, 1b. Каждый элемент указывает на следующий элемент цепочки, а последний элемент содержит специальный код. - Кластер 18H помечен как плохой и не входит в цепочку распре- деления. - Кластеры 6,7, 0cH-14H и 1cH-1fH пусты и доступны для распре- деления. -Еще одна цепочка начинается с кластера 2 и кончается класте- ром 5. Чтобы узнать имя файла, нужно отыскать элемент оглавления с начальным номером кластера 02. Для всех гибких дисков размер ячейки таблицы размещения файлов равен 12 битов, что позволяет обращаться к 4096 кластерам. Что ка- сается жестких дисков, то они могут использовать MS DOS как c 12- битными FAT, так и с 16-битными FAT. Тип используемой FAT указан в таблице разделов.
3.3. Работа с FAT. Рассмотрим особенности работы с 12-битной FAT. Номер кластера содержит 3 шестнадцатиричные цифры, для хране- ния которых требуется 1 1/2 байта. Для уменьшения размеров FAT числа для двух соседних кластеров хранятся в трех последовательных байтах таблицы. MS-DOS автоматически производит все необходимые вычисления. Первые три байта FAT не используются доля номеров кластеров. Первый байт содержит код, определяющий тип диска, а следующие два байта равны FFH. Поскольку эти позиции таблицы заняты, то кластеры нумеруются, начиная с 2, причем кластеры 2 и 3 занимают вторую тройку байтов таблицы. Для нахождения следующего кластера файла необходимо произвести следующие действия: - Умножить номер кластера на 3. - Разделить результат на 2 с отбрасыванием дробной части. - Прочитать 2 байта из FAT с полученным относительно начала FAT смещением. - Если исходный номер кластера четный, то взять младшие 12 бит (т.е. наложить маску 0fffH), иначе взять старшие 12 бит (т.е. сдвинуть на 4 вправо).
3.4. Чтение сектора диска в память. Для чтения содержимого требуемого сектора в указанную область памяти используется функция 2 прерывания 13h. При этом регистры имеют следующее назначение: ah - номер функции; dl - номер дисковода: 0 - "A", 1 - "B", $80 - жесткий диск; dh - номер головки (стороны); ch - номер дорожки (цилиндра); cl - номер сектора; al - число секторов; es - значение сегмента адреса области памяти; bx - значение смещения адреса области памяти. Если функция прерывания выполнена без ошибок, то флаг переноса CF (младший разряд регистра флагов Flags) установлен в 0 и регистр ah содержит 0. Если флаг переноса установлен в 1, значит была ошибка и регистр ah содержит код ошибки (байт состояния). В табли- це 1 приведен формат байта состояния для дискеты. Таблица 1 Байт состояния дискеты ──────────────────────────────────────────────────────────────── Биты 7 6 5 4 3 2 1 0 Значение ──────────────────────────────────────────────────────────────── ....... 1 Неверная команда: неправильный запрос к контроллеру дискеты ...... 1. Плохой адресный маркер: неверная маркировка идентификатора сектора или маркер не найден ..... 1.. Плохой сектор: на дискете нет заданного сектора .... 1... Ошибка прямого доступа к памяти (DMA)
... 1.... Ошибка циклического кода: ошибка в четнос- ти данных при чтении дискеты .. 1..... Ошибка контроллера дискеты: неисправность контролллера дискеты . 1...... Ошибка поиска: ошибка при перемещении на заданную дорожку 1....... Тайм-аут: дисковод не отвечает ...... 1 1 Ошибка защиты записи: попытка записи на за- щищенную дискету .... 1.. 1 Ошибка границы DMA: попытка обращения за пре- делы области 64K ───────────────────────────────────────────────────────────────
Дата добавления: 2014-12-07; Просмотров: 417; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |