увеличиваться на 3, а адрес элементов таблицы цен - на 2. Если сохранить
число выполненных циклов при поиске на равно, то, умножив это число на 2
(SHL сдвиг влево на один бит), получим относительный адрес искомого
значения цены. (Начальное значение счетчика циклов должно быть равно -1).
- Помните, что DB позволяет определять значения, не превышающие 256,
а DW записывает байты в обратной последовательности. Команды CMP и CMPSW
предполагают, что байты в сравниваемых словах имеют обратную
последовательность.
- Если таблица подвергается частым изменениям, или должна быть
доступна нескольким программам, то запишите ее на диск. Для внесения
изменений в таблицу можно разработать специальную программу модификации.
Любые программы могут загружать таблицу с диска и при обновлениях таблицы
сами программы не нуждаются в изменениях.
- Будьте особенно внимательны при кодировке сортирующих программ.
Пользуйтесь трассировкой для тестирования, так как малейшая ошибка может
привести к непредсказуемым результатам.
ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
________________________________________________________________
14.1. Определите таблицу, которая содержит имена дней недели, начиная
с воскресения.
14.2 Предполагая, что воскресенье равно 1, напишите команды прямого
доступа к таблице, определенной в вопросе 14.1. используйте любые
подходящие имена.
14.3 Определите три отдельных связанных таблицы, содержащих следующие
данные:
а) числовые элементы: 06, 10, 14, 21, 24;
б) элементы наименований: видеокассеты, приемники, модемы,
клавиатуры, дискеты;
в) цены: 93.95, 82.25, 90.67, 85.80, 13.85.
14.4 Составьте программу, позволяющую вводить числовой элемент
(ITEMIN) и количество (QTYIN) с клавиатуры. Используя таблицу из вопроса
14.3, разработайте программу табличного поиска элемента равного ITEMIN.
Выделите из таблиц наименование и цену. Рассчитайте величину стоимости
(Количество х Цена ) и выдайте на экран наименование и стоимость.
14.5 Используя описание таблицы из вопроса 14.3, составьте процедуры:
а) пересылающую содержимое одной таблицы в новую (пустую) таблицу; б)
сортирующую содержимое новой таблицы в восходящей последовательности.
ГЛАВА 15 Дисковая память I: Организация
__________________________________________________________________________
Ц е л ь: Рассмотреть основные форматы записей в памяти на твердом
диске (винчестере) и на дискете, включая оглавление и таблицу
распределения файлов.
ВВЕДЕНИЕ
________________________________________________________________
Диск является распространенным средством для более или менее
долговременного хранения данных. Процессы обработки данных на твердом
диске (винчестере) аналогичны процессам для гибких дисков (дискет), за
исключением того, что возможно потребуется обеспечить пути для доступа к
многочисленным подоглавлениям винчестера. Для обработки файлов полезно
ознакомиться с организацией дисковой памяти. Каждая cторона стандартной 5
1/4 дюймовой дискеты содержит 40 концентрических дорожек, пронумерованных
от 00 до 39. На каждой дорожке форматируется восемь или девять секторов по
512 байтов каждый.
Данные записываются на диск в виде файлов, аналогично тому, как вы
записываете ассемблерные программы. Хотя на типы данных, которые можно
хранить в файле, не существует каких-либо ограничений, типичный
пользовательский файл содержит списки заказчиков, описи товаров и
предложений или списки имен и адресов. Каждая запись содержит информацию о
конкретном заказчике или описание товара. Внутри файла все записи имеют
одинаковую длину и формат. Запись может содержать oдно или несколько
полей. Файл заказчиков, например, может состоять из записей, в которые
входит номер заказчика, имя заказчика и долговой баланс. Эти записи могут
быть расположены в порядке возрастания номеров заказчиков следующим
образом:
ЪДДВДДДВДДДДД¬ЪДДВДДДВДДДДД¬ЪДДВДДДВДДДДД¬ ЪДДВДДДВДДДДД¬
¦#1¦имя¦суммদ#2¦имя¦суммদ#3¦имя¦сумма¦...¦#n¦имя¦сумма¦
АДДБДДДБДДДДДЩАДДБДДДБДДДДДЩАДДБДДДБДДДДДЩ АДДБДДДБДДДДДЩ
Для программирования дисковых файлов следует в общих чертах
ознакомится только с концепцией и терминологией. Если в данной главе
размеры диска не указываются, то предполагается диск 5 1/4" формата.
ЕМКОСТЬ ДИСКА
________________________________________________________________
Емкость гибких дисков:
Версия DOS Число Число Число Всего
и тип дорожек секторов байтов в на двух
диска на стороне на дорожке секторе сторонах
До DOS 2.0 40 8 512 327 680
DOS 2.0 и после 40 9 512 368 640
Высокая плотность 80 15 512 1 228 800
3 1/2" 80 9 512 737 280
Емкость твердых дисков:
Тип Число Число Число Всего
диска дорожек секторов байтов в на 4-х
на стороне на дорожке секторе сторонах
10 мегабайт 306 17 512 10 653 696
20 мегабайт 614 17 512 21.377.024
Указание стороны (головки), дорожки или сектора на диске
осуществляется по номеру. Для стороны и дорожки отсчет ведется с 0, а для
сектора - с 1.
ОГЛАВЛЕНИЕ ДИСКА (КАТАЛОГ)
________________________________________________________________
Для того, чтобы организовать хранение информации на диске,
операционная система DOS резервируют определенные сектора для своих нужд.
Организация данных на дискете или на твердом диске существенно зависит от
их емкости. Форматированная двухсторонняя дискета с девятью секторами на
дорожке содержит следующую системную информацию:
Сторона Дорожка Сектор
0 0 1 Запись начальной загрузки
0 0 2-3 Таблица распределения файлов (FAT)
0 0 4-7 Каталог
1 0 1-3 Каталог
1 0 4 ... Файлы данных
Область записей данных начинается с третьего сектора на 1-й стороне
0-й дорожки и продолжается до девятого сектора. Следующие записи заносятся
на 0-ю сторону 1-й доpожки, затем на 1-ю сторону 1-й дорожки, затем на 0-ю
сторону 2-й дорожки и т.д. Такая особенность заполнения дисковой памяти на
противоположных дорожках снижает число перемещений головки дисковода.
Данный метод используется как для гибких, так и для твердых дисков.
При использовании утилиты FORMAT /S для форматизации дискеты, модули
DOS IBMBIO.COM и IBMDOS.COM записывается в первые сектора области данных.
Все файлы, даже меньшие 512 байт (или кратные 512), начинаются на
границе сектора. Для каждого файла DOS создает на нулевой доpожке диска
элемент оглавления. Каждый такой элемент описывает имя, дату, размер и
расположение файла на диске. Элементы оглавления имеют следующий формат:
Байт Назначение
0-7 Имя файла, определяемое из программы, создавшей данный файл.
Первый байт может указывать на статус файла: шест.00 обозначает,
что данный файл не используется, шест.E5 - файл удален, шест.2E
- элемент подоглавления.
8-10 Тип файла
11 Атрибут файла, определяющий его тип:
шест.00 - обычный файл;
шест.01 - файл можно только читать;
шест.02 - "спрятанный" файл;
шест.04 - системный файл DOS;
шест.08 - метка тома;
шест.10 - подоглавление;
шест.20 - архивный файл (для твердого диска).
12-21 Зарезервировано для DOS.
22-23 Время дня, когда файл был создан или последний раз изменялся, в
следующим двоичном формате:
|чччччммммммссссс|
24-25 Дата создания или последнего изменения файла, сжатая в два слова
в следующем двоичном формате:
|ггггггг|ммммддддд|
где год начинается с 1980 и может принимать значения от 0 до
119, месяц - от 1 до 12, а день - от 1 до 31.
26-27 Начальный кластер файла. Относительный номер последних двух
секторов каталога. Первый файл данных (без COM-модулей DOS)
начинается на относительном кластере 002. Текущая сторона,
дорожка и кластер зависят от емкости диска.
28-31 Размер файла в байтах. При создании файла DOS вычисляет и
записывает размер файла в это поле.
Все поля в каталоге диска, превышающие один байт, записываются в
обратной последовательности байтов.
ТАБЛИЦА РАСПРЕДЕЛЕНИЯ ФАЙЛОВ
________________________________________________________________
Назначение таблицы распределения файлов (FAT - File Allocation Table)
- распределение дискового пространства для файлов. Если вы создаете новый
файл или изменяете существующий, то DOS меняет элементы таблицы файлов в
соответствии с расположением файла на диске. Запись начальной загрузки
находится на секторе 1, далее на секторе 2 начинается FAT. FAT содержит
элементы для каждого кластера, длина элементов FAT зависит от устройства
дисковой памяти. Кластер для односторонних дискет представляет собой один
сектор, для двухсторонних дискет - смежную пару секторов. Одно и то же
число элементов в FAT определяет в два pаза больше данных для
двухсторонних дискет, чем для односторонних.
Первые байты FAT определяют тип устройства:
FE Односторонняя на 8 секторов
FC Односторонняя на 9 секторов
FF Двухсторонняя на 8 секторов
FD Двухсторонняя на 9 секторов
F9 Повышенная емкость (1,2 мегабайта)
F8 Твердый диск
Второй и третий байты пока содержат FFFF. В следующей таблице
показана организация данных для нескольких типов устройств (приведены
начальные и конечные номера секторов). Колонка "Кластер" представляет
число секторов в кластере:
Устройство диска Запись FAT Каталог Кластер
нач.загр.
Односторонний, 8 секторов 1 2-3 4-7 1
Односторонний, 9 секторов 1 2-5 6-9 1
Двухсторонний, 8 секторов 1 2-3 4-10 2
Двухсторонний, 9 секторов 1 2-5 6-12 2
Повышенная емкость (1,2 М) 1 2-15 16-29 1
Твердый диск XT 1 2-17 18-49 8
Твердый диск AT 1 2-838 4-115 4
Начиная с четвертого байта, элементы FAT определяют сектора. Каждый
такой элемент имеет длину 12 битов. (В версии DOS 3 и старше элементы FAT
для твердого диска могут иметь длину 16 битов). Два первых элемента FAT,
известные как относительные сектора 000 и 001, соответственно, указывают
на два последних сектора оглавления, определяя его размер и формат. Первый
файл данных начинается на относительном секторе 002. Каждый элемент FAT
состоит из трех шест.цифр (12 битов), которые указывают на характер
использования конкретного сектора:
000 свободный кластер,
nnn относительный номер следующего кластера для файла,
FF7 неиспользуемый кластер (сбойная дорожка),
FFF последний кластер файла.
Предположим, например, что дискета содержит только один файл с именем