Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ассемблер. Учебное пособие

..pdf
Скачиваний:
178
Добавлен:
02.05.2014
Размер:
557.54 Кб
Скачать

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

pop_reg <dx, cx, bx, ax>

Работа с периферийными устройствами или с нестандартным оборудованием ПК отличается выполнением практически идентичных действий, таких как инициализация устройства, передача и прием данных. Для этих целей используются различные прерывания BIOS и DOS, только меняются параметры, передаваемые в процедуру обработки. Поэтому в последующих разделах, посвященных работе с клавиатурой и дисплеем ПК, будут приведены примеры макроопределений, позволяющие сделать действия программы интуитивно понятными и простыми.

13

2. Внешняя память

2.1. Общие сведения

К внешней памяти (ВП) или накопителям относятся устройства, позволяющие автономно сохранять информацию для последующего использования независимо от состояния ПК. По отношению к ПК они могут быть внешними и внутренними. Внешние накопители не требуют источника питания и имеют свой корпус, в то время как внутренние крепятся в монтажных отсеках. Дисковые накопители имеют следующую структуру. Магнитный слой носителя информации нанесен на рабочие поверхности дисков, вращающиеся с помощью двигателя, обеспечивающего требуемую частоту вращения в рабочем режиме. На диске имеется индексный маркер, который, проходя мимо специального датчика, отмечает начало каждого оборота диска. Информация размещается на концентрических треках (дорожках), разбитых на секторы (Sector) фиксированного размера, сектор содержит минимальный объем информации, которая может быть считана или записана за один цикл. Пластины дисков могут быть гибкими (майлар, лавсан) и жесткими (алюминий). На поверхности пластин наносится рабочий магнитный слой (окись железа). Для того, чтобы произвести операцию обмена – запись или чтение сектора, – шпиндель двигателя должен вращаться с заданной скоростью, блок головок должен быть подведен к требуемой дорожке, и только когда нужный сектор подойдет к выбранной головке, начнется физическая операция обмена данными между головкой и блоком электроники накопителя. Для записи и чтения используются магнитные головки, представляющие катушки индуктивности, имеющие сердечник с зазором. При записи головка намагничивает участок магнитного слоя, проходящий под магнитным зазором, в направлении, определяемом током. При проходе намагниченных участков мимо головки считывания, в ней наводится Э.Д.С., полярность которой определяется знаком смены направления тока, т.е. сигнал считывания пропорционален производной от записанного сигнала. В современных накопителях применяется тонкопленочные головки для записи и магниторезистивные для считывания, позволяющие увеличить плотность на 50%. Последнее достижение в этой области: головки с усиленным

14

магниторезистивным эффектом GMR (Giant MR), в них сопротивление под действием магнитного поля меняется в 2 раза сильнее, что уменьшает размеры головки и увеличивает емкость накопителя. Скорость вращения гибких магнитных дисков (ГМД) составляет 300 или 360 об/мин., жестких магнитных дисков (ЖМД) – 3600 об/мин, скоростных ЖМД – 5400 или 7200 об/мин. Все современные головки поддерживаются на расстоянии 0,13 мкм от рабочей поверхности за счет подъемной аэродинамической силы. В качестве привода для позиционирования головок на нужную дорожку ранее применялись шаговые двигатели, которые могли перемещать блок головок с дискретностью в одну дорожку. Шаговые двигатели, являясь разомкнутыми системами, не позволяли обеспечивать высокую точность позиционирования и корректировать погрешности, вызванные температурными и иными причинами. В современных накопителях применяют привод с подвижной катушкой. В таком приводе блок головок связан с катушкой индуктивности, помещенной в магнитное поле постоянного магнита. При протекании тока через катушку на нее действует сила, вызывающая перемещение катушки и блока головок. Такая система позиционирования является замкнутой, вследствие размещения на дисках специальной информации о текущем положении головок относительно нулевой дорожки. Эта информация размещается в виде встроенных сервометок на рабочих поверхностях между секторами. Преимущество сервометок заключается в том, что они позволяют подводить головки точно к той дорожке, к которой выполняется доступ. Вся электромеханическая часть накопителя – пакет дисков со шпиндельным двигателем и блок головок с приводом заключается в герметический защитный кожух. Кроме механики дисковый накопитель должен иметь контроллер, управляющий приводами шпинделя и головок, а также реализующий обмен информацией. В современных накопителях ЖМД контроллер выполнен как плата электроники, смонтированный вместе с накопителем.

2.2. Архитектура дисковой подсистемы

Дисковая подсистема рассматривает: во-первых, общие для всех типов дисковых устройств архитектурные компоненты, определяющие основные принципы доступа к данным; во-вторых, особенности основных устройств – гибких и жестких дисков.

15

Основой любого дискового устройства является магнитный носитель, имеющий форму диска. Поверхность диска логически разделена на концентрические окружности, отсчет которых у ЖМД начинается от центра, а у ГМД – от внешней кромки диска. Концентрическая окружность называется дорожкой. Группа дорожек в одной и той же позиции магнитной головки на всех дисках в одном дисководе называется цилиндром. Количество дорожек на поверхости диска определяется разрешающей способностью позиционера магнитных головок и вертикальной плотностью носителя, которая измеряется в дорожках на дюйм (track per inch, TPI). Дорожки обладают определенной структурой, которая формируется при форматировании диска и включает служебные поля и сегменты, называемые секторами и хранящие разряды данных. Цилиндр (C), головка (H) и сектор (S) являются основными архитектурными и системными компонентами при решении вопросов организации доступа к информации на диске.

2.2.1. Информационная структура диска для всех типов дисков РС АТ одинакова и определяется базовой операционной системой (ОС), в рассматриваемом случае MS-DOS. С точки зрения ОC MSDOS элементарной единицей размещения информации на диске является кластер. Кластер представляет группу секторов, с точностью до которой происходит размещение файла на диске. В PC AT для ГМД один кластер – это 2 сектора (1 Кбайт), для ЖМД – величина переменная. Точное значение размера кластера указывается в первом секторе диска – загрузочном (boot) секторе. Он имеет абсолютный номер 1, и с него начинается системная область диска.

Дискета (или раздел DOS ЖД) структурирована следующим образом:

1.область начальной загрузки (boot sector);

2.первая копия таблицы размещения файлов (FAT);

3.вторая копия FAT;

4.корневое оглавление (root directory);

5.область данных (включая файлы подоглавлений) (data area). Во всех дисках и дискетах, форматированных MS-DOS, секторы

имеют длину 512 байт. Область начальной загрузки помещается на дорожке 0, сектора 1, головки 0 дискеты.

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

16

2.2.3. Структура загрузочного сектора имеет формат:

1.NEAR-переход на код загрузки (1 байт);

2.OEM-имя компании и версия операционной системы (8 байт);

3.блок параметров BIOS (BPB):

а) число байт на сектор; б) число секторов на кластер;

в) число резервных секторов (перед первой FAT); г) число таблиц FAT;

д)максимальное число 32-байтных элементов корневого оглавления;

е) общее число секторов на носителе; ж) дескриптор носителя;

з) число секторов в одной FAT; и) число секторов на цилиндр; к) число головок; л) число скрытых секторов.

BPB позволяет драйверу устройства вычислить физический адрес сектора по номеру логического сектора;

2.3. Программа дискового начального загрузчика

Таблица размещения файлов (FAT) – это связный список,

который DOS использует для отслеживания физического расположения данных на диске и для поиска свободной памяти для новых файлов. При размещении файла на диске FAT выделяет место с дискретностью в один кластер. Если файл не заполняет все выделенные секторы, часть кластера теряется для распределения. Неиспользованный сектор или его часть в кластере не могут быть использованы для другого файла – эти байты просто теряются. От числа секторов в кластере зависят размер FAT и производительность накопителя. Чем больше секторов приходится на кластер, тем меньше FAT, но тем больше времени требуется для поиска данных на диске и тем больше вероятноcть потери байтов в кластерах.

Кластеры выделяются последовательно по мере записи файла. Это значит, что часто файлы разбиваются на несмежные секторы на диске в зависимости от времени записи. Нужно иметь в виду, что до открытия нового кластера в том же файле должен быть заполнен предыдующий кластер. Так как новый файл не может быть начат с незаполненного последнего кластера старого файла, то FAT будет

17

вынуждена выделить для нового файла следующий кластер. Если же надо перезаписать старый файл с увеличением его длины, то после того, как будет заполнен последний кластер старого файла, надо перейти через кластер (или несколько кластеров), выделенный для нового файла, и занять ближайший неиспользованный кластер независимо от его физического расположения на диске. Это значит, что между частями одного файла может оказаться много "посторонних" кластеров. Для поддержания непрерывности файла FAT связывает его разрозненные кластеры в цепочки. В FAT отображается расположение каждого кластера на диске. Размер элемента FAT зависит от используемого диска. FAT включает 12разрядный элемент (1,5 байт) для каждого кластера на диске. Количество секторов на диске TS можно определить по формуле:

TS = SPT*H*C,

где SPT – число секторов на одну дорожку или на цилиндр, H – количество головок,

C – количество цилиндров.

Определение размера кластера – исключительно функция ОС. 2.3.1. Содержимое FAT. Первый байт FAT называется

декриптором носителя, или FAT ID-байтом (Дескриптор можно получить как значение, возвращаемое функциями DOS 1Bh , 1Ch и 32h).

Второй, третий и четвертый байты всегда содержат 0FFFFh.

Таблица 2.1

Значения первого байта FAT

Значение

Типы носителя, определенные в DOS

FFh

ГМД, 2 стороны, 8

секторов на дорожку

FEh

ГМД, 1 сторона, 8 секторов на дорожку

FDh

ГМД, 2

стороны, 9

секторов на дорожку

FCh

ГМД, 1

сторона, 9 секторов на дорожку

F9h

ГМД, 2

стороны, 15 секторов на дорожку (1,2 Мб)

F9h

ГМД, 2

стороны, 9

секторов на дорожку (720 Кб)

F8h

Жесткий магнитный диск

С третьего элемента FAT начинается распределение области данных (кластер 002). Остальная часть FAT состоит из 12-разрядных элементов, каждый из которых представляет один кластер и содержит одно из следующих значений:

1.000h (доступный кластер);

18

2.FF0h до FF7h (зарезервированный кластер);

3.FF7h (плохой кластер);

4.FF8h до FFFh (конец цепочки распределения);

5.002h до FEFh (номер кластера следующего элемента в

цепочке).

FAT всегда занимает сектор или секторы непосредственно после загрузочной записи. Для надежного хранения информации записывается одна за другой две копии таблицы.

2.3.2.Корневой каталог (ROOT). Команда FORMAT создает корневой каталог для всех дисков. Адрес первого кластера карты файла в FAT указывается в элементе каталога.

Все элементы корневого каталога имеют длину 32 байт и следующий формат:

1.Байты 0-7 – содержат имя файла. Первый байт имени файла указывает статус имени файла. Статус может принять следующие значения:

00h – имя файла никогда не использовалось, указывается для ограничения длины поиска, чтобы предупредить снижение производительности системы;

05h – указывает, что первый символ имени файла – E5h;

E5h – имя файла использовалось, но файл был удален;

2Eh – эта позиция относится к директорию; если 2-й байт также 2Eh, то поле кластера содержит № кластера каталога, включаюшего этот подкаталог;

любой другой символ – это первый символ имени файла.

2.Байты 8-10 – расширение имени файла.

3.Байт 11 – атрибут файла.

Биты:

0– только чтение;

1– скрытый;

2– системный;

3– метка тома;

4– элемент подкаталога;

5– архивный.

4.Байты 12-21 – резерв.

5.Байты 22-23 – время создания или последней модификации

файла.

19

6.Байты 24-25 – дата создания или последней модификации

файла.

7.Байты 26-27 – номер начального кластера в файле.

8.Байты 28-31 – размер файла в байтах.

2.3.3. Область данных. Распределение места для файла в области данных производится только по мере необходимости по одному кластеру за раз. Каждый кластер представляет собой один или более последних секторов, и все кластеры в файле связаны в "цепочку" в таблице FAT.

2.4. Работа BIOS с НМД

Поддерживается BIOS ПК через прерывание Int 13h. Дисковой сервис работает на уровне физических устройств. Исторически сложилось, что в нем используется адресация непосредственнно цилиндров, головок и секторов. ОС, используя BIOS, предоставляет прикладным программам более сложный сервис, обеспечивая доступ к файловой системе диска. Самый низкий уровень обращения с ОС оперирует с секторами логических приводов (Logical Drive) или логических устройств с именами (A; B; C….Z). Один физический накопитель может иметь несколько логических устройств. Традиционный дисковый сервис подразделяет физические диски на дискеты и фиксированные диски (Fixed Disk). При вызове дискового сервиса по умолчанию принимаются следующие соглашения. Номер функции помещается в регистр AH, а номер диска – в DL (бит 7=0 – признак обращения к НГМД). В каждом классе устройства нумеруются с нуля (DL=0 – дисковод А, DL=1 – дисковод В, DL=80h

первый жесткий диск и т.д.). Номер цилиндра ограничен 10 битами, 2 старших бита записываются в регистре CL [7;6], 8 младших

в регистре CH. Номер начального сектора (6 бит) помещается в регистр CL [5:0]. Количество секторов, участвующих в операции, записывается в регистр AL. Указатель на начало буфера ОЗУ для данных помещается в регистрах ES:BX. Результат операции определяется по флагу переноса (CF=0 – успешное выполнение, CF=1

обнаружены ошибки, код состояния возвращается в регистре AH).

2.4.1. Функции прерывания Int 13h следующие:

1.01h – чтение состояния последней операции;

2.02h – чтение секторов с диска в память;

3.03h – запись секторов из памяти на диск;

20

4.04h – верификация секторов (холостое чтение без записи в память);

5.05h – форматирование трека.

Все функции BIOS выполняются в соответствии с базовой дисковой таблицей, на которую указывает вектор 1E. Пользователь может модифицировать вектор 1E и создать свою таблицу. При загрузке ОС BIOS инициализирует ее, а DOS модифицирует, чтобы улучшить производительность дискет. Структура базовой дисковой таблицы представлена в табл. 2.2.

Таблица 2.2

 

Структура базовой дисковой таблицы

 

 

Смещение

 

Содержимое

 

 

0

Биты 4-7: время перехода с дорожки на дорожку (в мс );

биты 0-3: время подъема головки после чтения/записи

 

1

Бит 0: 1 – используется DMA , 0 – DMA не

используется;

 

 

 

 

 

биты 2-7: время опускания головок

 

 

2

Время работы двигателя после окончания чтения/записи

3

Размер сектора (0=128, 1=256, 2=512, 3=1024)

4

Номер последнего сектора на дорожке

 

 

5

Длина

межсекторного

промежутка

для

операций

чтения/записи

 

 

 

 

 

 

 

 

 

6

Максимальная длина передаваемых данных

 

7

Длина

межсекторного

промежутка

для

операции

форматирования

 

 

 

 

 

 

 

 

 

8

Символ-заполнитель для форматирования ( обычно F6)

9

Время позиционирования головок

 

 

А

Время разгона мотора (в 1/8-секундных интервалах)

Также

в области данных BIOS

содержатся

следующие

параметры НГМД:

0:043E – нужна рекалибрация дисковода (бит 0=A, бит 1=B, etc.); 0:043F – мотор дискеты включен (бит 0=drive A, бит 1=B, etc.); 0:0440 – время до выкл. мотора. Если 0, то мотор выключается; 0:0441 – код ошибки дискеты (это возвращается по int 13); 0:0442 – область состояния контроллера дискет (7байт).

21

2.5. Внешняя память на гибком магнитном диске

2.5.1. Формат записи на гибкий магнитный диск. Информация на ГМД содержится на дорожках (tracks), расположенных на обеих сторонах дискеты и обслуживаемых головками чтения/записи (heads). Нижняя сторона дискеты обслуживается головкой 0, верхняя - 1. На стандартных ГМД диаметром 5.25" (емкостью 1.2 Мбайт) размещается 84 цилиндра (DOS поддерживает 80), на дискете 3.5" (емкостью 1.44 Мбайт) - 82 цилиндра, (DOS поддерживает 80). Нумерация цилиндров начинается с нуля, но нулевой цилиндр имеет наибольший диаметр. Каждая дорожка делится на секторы, представляющие собой дуги окружности. Число секторов на дорожке

может быть

произвольным,

но

DOS поддерживает

только

стандартные значения

8 или 9

для дискет 5.25" DS/DD, 15 для 5.25"

DS/HD, 9 для 3.5" DS/DD, 18 для 3.5" DS/HD. Каждый сектор имеет

определенную

длину

зоны данных зависящую от объема,

записанной в

него

информации.

Контроллер накопителя

ГМД

(КНГМД, FDC 765 или 8272A) РС AТ обычно поддерживает только 8 кодов возможных длин зоны данных сектора: 0 – 128 байт, 1 – 256

байт, 2 – 512 байт, 3 – 1024 байт,

4 – 2048 байт, 5 – 4096 байт, 6 –

8192 байт и 7 – 16384 байт.

 

Каждый сектор имеет заголовок (ID), в который входят 4 байта

C,H,R,N (C – номер цилиндра,

H – номер головки, R – номер

сектора, N – код длины сектора (0...7). Заголовок ID предназначен для опознования сектора контроллером и совсем не дает представления об истинном положении сектора на дискете и его параметрах. Более того, байты C, H, R, N могут иметь любые значения от 0 до 255. Истинные параметры сектора могут не совпадать с указанными в заголовке, что используется в целях защиты информации на ГМД. Плотность записи – это параметр, характеризующий максимально возможное число бит записанной информации на одной дорожке. Она зависит от скорости приема/выдачи информации контроллером и скорости вращения дискеты. КНГМД (контроллер НГМД) аппаратно поддерживает три скорости: 250, 300, 500 Кбит/с. Скорость вращения в дисководах 5.25" составляет 5 об/с для дисководов на 360К и 6 об/с для дисководов на 1.2М. Скорость вращения 3.5" дискет всегда 5 об/с. Плотность записи пропорциональна отношению скорости выдачи информации контроллером к угловой скорости вращения дискеты. Таким образом, возможны пять значений

22