Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab1-7l.doc
Скачиваний:
2
Добавлен:
13.11.2019
Размер:
188.43 Кб
Скачать

Рекомендации по выполнению работы

Естественно, что все функции, которые требуется осуществить, давно уже имеются в наличии как в библиотеках языка Pascal, так и языка С и многих других. Однако работа с графикой требует от программиста понимания не только того, какую функцию где надо использовать и что от нее ожидать, но и того, как осуществляется работа видеоадаптера, какие возможности он предоставляет и как эти возможности максимально использовать. Поэтому, прежде чем приступать к этой работе, необходимо внимательно изучить теоретический материал и желательно иметь представление о назначении прерывания 10h и о наборе его функций (который сознательно здесь не приводится). После этого написание столь несложных функций не займет много времени.

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

РАБОТА С ДИСКАМИ

ЦЕЛЬ РАБОТЫ

Изучение логической структуры диска в MS DOS и основных ее компонентов: загрузочной записи, таблицы разделов, корневого каталога, FAT. Получение практических навыков работы с дисками на уровне кластеров и секторов, а не на уровне файлов или каталогов.

ЗАДАНИЕ НА РАБОТУ.

Предлагается на выбор 3 варианта задания:

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

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

  3. Написать программу, которая читает корневой каталог указанного логического диска и выводит его содержимое на экран.

Рекомендации по выполнению работы

  1. В данной работе придется иметь дело с порциями информации размером в один сектор (обычно 512 байт), при этом информация, содержащаяся в секторе, может быть различной (первый байт хранит что-то, потом 4 байта хранят еще что-то, следующие 2 байта еще что-то и т. д.). Как видно, информация неоднородна, и для прямого получения той или иной величины рекомендуется использовать поля структуры (записи) языков высокого уровня.

  2. Для чтения сектора диска придется использовать прерывания, при этом следует учитывать, что BIOS-прерывания используют физическую адресацию секторов, а DOS-прерывания - логическую.

  3. Рекомендуется в программе использовать дальние указатели. Если написание ассемблерных вставок еще вызывает трудности, можно, не прибегая к ним, воспользоваться средствами языка Pascal или С.

Перед тем, как приступать к написанию программы, следует познакомиться с принятым форматом представления таблицы разделов, загрузочной записи или корневого каталога. Для этого рекомендуется использовать программу DISKEDIT из пакета NORTON UTILITIES (меню Object, пункты Partition Table, Boot Record и Directory).

ПРИЛОЖЕНИЕ 1

Теоретическая справка

Формат первого сектора жесткого диска (сектор 1, дорожка 0, головка 0)

Смещение, байт

Размер, байт

Описание

0

1BEh

Загрузочная запись

1BEh

10h

1-й элемент таблицы разделов

1СEh

10h

2-й элемент таблицы разделов

1DEh

10h

3-й элемент таблицы разделов

1EEh

10h

4-й элемент таблицы разделов

1FEh

2

Признак конца таблицы - 55AAh

Каждый из четырех элементов таблицы разделов имеет следующий формат:

Смещение, байт

Размер, байт

Описание

0

1

Признак активного раздела

0 - раздел неактивный

80h - раздел активный

1

1

Номер головки для начального сектора раздела

2

2

Номер сектора и дорожки для начального сектора раздела в формате функции чтения сектора 13h:

байты 0 - 5 - номер сектора

байты 6 - 15 - номер дорожки (цилиндра)

4

1

Код системы:

0 - Неизвестная система

1, 4, 6 - MS DOS

5 - Расширенный раздел MS DOS

5

1

Номер головки последнего сектора раздела

6

2

Номер сектора и дорожки последнего сектора раздела в формате функции чтения сектора 13h

8

4

Относительный номер сектора начала раздела

12

4

Размер раздела в секторах

В первом секторе активного раздела расположена загрузочная запись (BOOT RECORD), которую не следует путать с главной загрузочной записью (MASTER BOOT RECORD). Первый сектор логического диска называется загрузочным.

Для современных версий MS DOS (4.0 и выше) загрузочный сектор имеет следующий формат:

Смещение, байт

Размер, байт

Описание

0

3

Команда JMP xxx - переход на программу начальной загрузки

3

8

Название фирмы-изготовителя ОС и версия ОС

11

25

Расширенный блок параметров BIOS (*)

36

1

Физический номер устройства (0 - НГМД, 80h - ЖД)

37

1

Зарезервировано

38

1

Символ ")" - признак расширенной загрузочной записи

39

4

Серийный номер диска (создается при форматировании)

43

11

Метка диска

54

8

Обычно содержит запись типа "FAT12 ", идентифицирующую формат таблицы размещения файлов FAT

(*) Расширенный блок параметров BIOS (Extended BIOS Parameter Block) EBPB находится в поле загрузочного сектора со смещением 11 байт и содержит следующую информацию:

Смещение, байт

Размер, байт

Описание

0

2

Количество байт в одном секторе диска

2

1

Количество секторов в одном кластере

3

2

Количество зарезервированных секторов

5

1

Количество таблиц FAT

6

2

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

8

2

Общее количество секторов для данных

10

1

Вид носителя данных (F8h для жесткого диска)

11

2

Количество секторов, занимаемых одной копией FAT

13

2

Количество секторов на дорожке

15

2

Количество магнитных головок (сторон)

17

2

Количество скрытых секторов для раздела < 32Mb

19

2

Количество скрытых секторов для раздела > 32Mb

21

4

Общее количество секторов на логическом диске > 32Mb

Следующие сектора занимают 2 копии FAT, сразу после которых располагается корневой каталог. Количество копий FAT и количество секторов, занимаемых одной копией, можно узнать из блока параметров BIOS. Размер корневого каталога можно определить также из блока параметров BIOS, учитывая, что для каждого элемента в каталоге отводится 32 байта.

Любой каталог содержит 32-байтовые элементы - дескрипторы, описывающие файлы и другие каталоги. Приведем формат дескриптора:

Смещение, байт

Размер, байт

Содержимое

0

8

Имя файла (каталога), дополненное пробелами справа

8

3

Расширение имени, дополненное пробелами справа

11

1

Байт атрибутов файла (**)

12

10

Зарезервировано

22

2

Время создания файла (последней модификации) (***)

24

2

Дата создания файла (последней модификации) (****)

26

2

Номер первого кластера файла

28

4

Размер файла в байтах

(**) Биты байта атрибутов имеют следующие значения:

Бит Описание

0 Только для чтения

1 Скрытый файл

2 Системный файл

3 Метка диска

4 Каталог

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

6-7 Зарезервированы

(***) Формат поля времени

15 11 10 5 4 0

Часы (0...23)

Минуты (0...59)

Секунды/2 (0...29)

(****) Формат поля даты

15 9 8 5 4 0

Год (0...119)

Месяц (1...12)

День (1...31)

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

Чтение секторов осуществляется в MS DOS прерыванием 25h. Вызов этого прерывания имеет различный формат для разных версий MS DOS. Для MS DOS версий более ранних, чем 4.0 (не поддерживающих размер логических дисков более 32 Мбайт) используется следующий формат:

На входе: AL Номер диска (0 - A, 1 - B, ...)

CX Количество секторов длячтения

DX Логический номер начального сектора

DS:BX Адрес буфера для чтения

На выходе AH Код ошибки

CF 1, если произошла ошибка

0, если ошибки не было

Для более поздних версий используется другой способ. Так как 16 разрядов недостаточно для адресации всех секторов логического диска размером более 32 Мбайт (объясните, почему), то часть регистров используются по-другому:

  • Регистр СХ содержит FFFFh - признак того, что программа работает с логическим диском, имеющим размер более 32 Мбайт (при работе с дискетой все равно можно использовать этот метод).

  • Регистры DS:BX должны содержать адрес следующей структуры:

Смещение, байт

Размер, байт

Содержимое

0

4

Логический номер начального сектора

4

2

Количество секторов, которое нужно прочитать

6

4

Адрес буфера для чтения

Внимание!!!

Это прерывание оставляет в стеке одно слово - старое значение регистра флагов. Поэтому после вызова прерывания должна следовать, например, такая команда:

pop ax

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

ЗНАКОМСТВО С ОСНОВНЫМИ ПРИНЦИПАМИ НАПИСАНИЯ ОБРАБОТЧИКА ПРЕРЫВАНИЯ, ОСТАВЛЕНИЕ ПРОГРАММЫ РЕЗИДЕНТНОЙ В ПАМЯТИ, ПЕРЕХВАТ СИСТЕМНЫХ ПРЕРЫВАНИЙ

ЦЕЛЬ РАБОТЫ

Изучение механизма прерываний микропроцессора i80x86, принципов написания собственных обработчиков прерываний, перехваты системных прерываний с оставлением процедур-обработчиков в памяти после окончания работы программы.

ЗАДАНИЕ НА РАБОТУ

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]