Система команд МК51 предполагает четыре основных типа адресации:
- прямую - адрес операнда или перехода содержится в команде;
- непосредственную - операнд, который загружается, помещается во втором или во втором и третьем байтах команды;
- косвенную – адрес ячейки ВПД (ВПП) находится (вычисляется) в каком-нибудь специальном регистре, ссылка на который содержится в команде;
- регистровую - источником или приемником операнда является регистр активного банка, ссылка на который содержится в команде.
Кроме того, в распоряжении программиста есть такие разновидности косвенной адресации:
- относительная - в команде содержится не весь абсолютный адрес перехода, а лишь смещение в байтах от текущего содержимого РС;
- страничная - в регистре-фиксаторе порта P2 содержится адрес области памяти, выведенной на границу блока размером 256 байтов (так называемый номер страницы), а в другом регистре (R0 ли R1) находится смещение по странице в байтах. Исполнительный адрес ячейки памяти формируется стыковкой содержимого P2 (старшая часть адреса) и содержимого регистров R0 ли R1 (младшая часть адреса);
- базовая - указательный регистр DPTR содержит начальный (так называемый базовый) абсолютный адрес области памяти, где находятся данные произвольной структуры. К адресу базы прибавляется байтовое смещение для определения адреса нужной ячейки памяти. Источником смещения является аккумулятор. Смещение - это беззнаковое число в диапазоне 0...255.
Использование символических имен
Благодаря наличию компилятора Ассемблер МК51 предусматривает возможность присвоения символических имен как байтам РПД, адресам ВП и РПД, непосредственным данным (константам), так и отдельным битам.
Символические имена делятся на такие:
- зарезервированные (ACC, PSW, SBUF, TCON, и т.д.). Много из таких имен упоминались при рассмотрении аппаратных ресурсов МК51;
- имена, определяемые пользователем с помощью директив Ассемблера.
Таким образом, на уровне Ассемблера в команде может присутствовать или прямой адрес байта, или его символическое имя:
MOV PSW, #0 и MOV 0D0H, #0 - это одно и то же.
Адресация битов
Все отдельно адресуемые биты можно поделить на две группы:
1) биты из 16-байтовой области ОЗУ (0-127) - рис.2.6 в пособии;
2) биты блока аппаратных регистров (128-255) - рис.2.7 в пособии.
Биты из области 1 доступны путем указания в команде прямого адреса бита или символического имени бита, присвоенного пользователем раньше. Биты из области 2 доступны или через прямой адрес бита (рис.2.7), или с использованием зарезервированного имени (C, OV, F0). Кроме того, адресовать любой бит из области 1 и 2 можно с использованием битового селектора:
АСС.4 - четвертый бит аккумулятора;
PSW.5, TCON.2 и т.д. – с использованием зарезервированного имени регистра;
V1.3, MY_2.0 - с использованием символического имени, предоставленного пользователем. Для битов не допускается косвенная адресация!
6. Сегментация - это механизм адресации, обеспечивающий существование нескольких независимых адресных пространств как в пределах одной задачи, так и в системе в целом для защиты задач от взаимного влияния.
Суть сегментной адресации заключается в следующем.
Каждая программа в общем случае может состоять из любого количества сегментов. Сегменты могут располагаться в памяти по отношению друг к другу произвольным образом, ограничений на их расположение не вводится. Например, все сегменты могут начинаться с одного и того же адреса или непосредственно друг за другом. Операционная система размещает сегменты программы в оперативной памяти по определённым физическим адресам, после чего помещает значения этих адресов в определённые места (зависит от режима работы микропроцессора). Например, в реальном режиме они помещаются в соответствующие сегментные регистры, и называются сегментными адресами.
Существуют три модели сегментированной организации памяти:
- сегментированная модель памяти реального режима;
- сегментированная модель памяти защищенного режима;
- сплошная модель памяти защищенного режима.
Рассмотрим процесс формирования физического (линейного) адреса в реальном режиме.
В реальном режиме сегментные регистры процессора содержат старшие 16 бит физического адреса начала сегмента. Максимальное значение, которое могут содержать 16-битные регистры, составляет 216-1 или 64 Кбайт. Но адресное пространство реального режима составляет 1 Мбайт.
Возникает вопрос о том, как адресовать остальную часть оперативной памяти вплоть до 1 Мбайта, если размер самого сегмента не превышает 64 Кбайт. Чтобы организовать работу с мегабайтным адресным пространством памяти, используется искусственное выделение из адресного пространства сегментов по 64К (так как в таком объеме мы можем использовать шестнадцатиразрядные адреса). Недостающие младшие четыре бита 20-битного адреса получаются сдвигом значения в сегментном регистре на 4 разряда влево.
Физический адрес получается путем сложения этого адреса с 16-разрядным значением смещения в сегменте, формируемого по заданному режиму адресации для операнда или извлекаемому из регистра IP для команды
Рис.3.2 Формирование физического адреса памяти из адреса сегмента и смещения.
На рисунке видно, что сегментная часть извлекается из одного из сегментных регистров, сдвигается на четыре разряда влево и суммируется со смещением. Получившиеся 20-битное значение и является настоящим физическим адресом, соответствующим началу сегмента.
Процедура умножения сегментного адреса на 16 (или, что то же самое, на 10h) является принципиальной особенностью реального режима, ограничивающей диапазон адресов, доступных в реальном режиме, величиной 1 Мбайт. Действительно, максимальное значение сегментного адреса составляет FFFFh, или 64К-1, из чего следует, что максимальное значение начального адреса сегмента в памяти равно FFFF0h, или 1 Мбайт - 16. Если, однако, учесть, что к начальному адресу сегмента можно добавить любое смещение в диапазоне от 0 до FFFFh, то адрес последнего адресуемого байта окажется равен 10FFEFh, что соответствует величине 1 Мбайт + 64 Кбайт - 17.
7. FAT является наиболее простой из поддерживаемых Windows NT файловых систем. Основой файловой системы FAT является таблица размещения файлов, которая помещена в самом начале тома. На случай повреждения на диске хранятся две копии этой таблицы. Кроме того, таблица размещения файлов и корневой каталог должны храниться в определенном месте на диске (для правильного определения места расположения файлов загрузки).
Диск, отформатированный в файловой системе FAT, делится на кластеры, размер которых зависит от размера тома. Одновременно с созданием файла в каталоге создается запись и устанавливается номер первого кластера, содержащего данные. Такая запись в таблице размещения файлов сигнализирует о том, что это последний кластер файла, или указывает на следующий кластер.
Обновление таблицы размещения файлов имеет большое значение и требует много времени. Если таблица размещения файлов не обновляется регулярно, это может привести к потере данных. Длительность операции объясняется необходимостью перемещения читающих головок к логической нулевой дорожке диска при каждом обновлении таблицы FAT.
Каталог FAT не имеет определенной структуры, и файлы записываются в первом обнаруженном свободном месте на диске. Кроме того, файловая система FAT поддерживает только четыре файловых атрибута: «Системный», «Скрытый», «Только чтение» и «Архивный».
В файловой системе FAT использован традиционный формат имен 8.3, имена файлов должны состоять из символов ASCII. Имя файла или каталога должно состоять не более чем из 8 символов, затем следует разделитель «.» (точка) и расширение длиной до 3 символов.
Преимущества файловой системы FAT
На компьютере под управлением Windows NT в любой из поддерживаемых файловых систем нельзя отменить удаление. Программа отмены удаления пытается напрямую обратиться к оборудованию, что невозможно при использовании Windows NT. Однако если файл находился в FAT-разделе, то, запустив компьютер в режиме MS-DOS, удаление файла можно отменить.
Недостатки файловой системы FAT
Как правило, не стоит использовать файловую систему FAT для дисков и разделов, чей размер больше 200 МБ. Это объясняется тем, что по мере увеличения размера тома производительность файловой системы FAT быстро падает. Для файлов, расположенных в разделах FAT, невозможно установить разрешения.
В файловой системе FAT дисковое пространство любого логического диска делится на две области:
системную область и область данных.
Системная область создается и инициализируется при форматировании, а впоследствии обновляется при манипулировании файловой структурой.
Системная область состоит из следующих компонентов:
загрузочного сектора, содержащего загрузочную запись (boot record);
зарезервированных секторов (их может и не быть);
таблицы размещения файлов (FAT, File Allocation Table);
корневого каталога (Root directory, ROOT).
Эти компоненты расположены на диске друг за другом.
Область данных содержит файлы каталоги, подчиненные корневому.
Таблица размещения файлов (File Allocation Table - FAT) по сути является картой области данных.
Область данных разбивают на так называемые кластеры. Кластер - это один или несколько смежных секторов области данных. С другой стороны, кластер - это минимальная адресуемая единица дисковой памяти, выделяемая файлу. Т.е. файл или каталог занимает целое число кластеров. Для создания и записи на диск нового файла операционная система отводит для него несколько свободных кластеров диска. Эти кластеры не обязательно должны следовать друг за другом. Для каждого файла хранится список всех номеров кластеров, которые предоставлены данному файлу.
На дискетах кластер занимает один или два сектора, а на жестких дисках - в зависимости от объема раздела:
для разделов емкостью 16-127 Мбайт - 4 сектора в кластере (размер кластера - 2 Кбайта);
для разделов емкостью 128-255 Мбайт - 8 секторов в кластере (4 Кб);
для разделов емкостью 256-511 Мбайт - 16 секторов в кластере (8 Кб);
для разделов емкостью 512-1023 Мбайт - 32 сектора в кластере (16 Кб);
для разделов емкостью 1024-2047 Мбайт - 64 сектора в кластере (32 Кб).
Разбиение области данных на кластеры вместо использования секторов позволяет:
уменьшить размер таблицы FAT;
уменьшить фрагментацию файлов;
Однако слишком большой размер кластера ведет к неэффективному использованию области данных, особенно в случае большого количества маленьких файлов (ведь на каждый файл теряется в среднем полкластера).
Каждый элемент таблицы FAT (12, 16 или 32 бит) соответствует одному кластеру диска и характеризует его состояние: свободен, занят или является сбойным кластером (bad cluster).
Если кластер распределен какому-либо файлу (т.е., занят), то соответствующий элемент FAT содержит номер следующего кластера файла;
последний кластер файла отмечается числом в диапазоне FF8h - FFFh (FFF8h - FFFFh);
если кластер является свободным, он содержит нулевое значение 000h (0000h);
кластер, непригодный для использования (сбойный), отмечается числом FF7h (FFF7h).
Таким образом, в таблице FAT кластеры, принадлежащие одному файлу связываются в цепочки.
Первый элемент FAT описывает среду загрузочного сектора. Его первый байт совпадает с байтом-описателем среды носителя данных (смещение 0Ah - см. табл.4) и равен 0F0h для гибкого магнитного 3,5 дм. диска или 0F8h для жесткого диска. Следующие 5 байт (7 байт) для 12-разрядного (16-разрядного) формата содержат значение 0FFh.
Таблица размещения файлов хранится сразу после загрузочной записи логического диска, ее точное расположение описано в специальном поле в загрузочном секторе.
Она хранится в двух идентичных экземплярах, которые следуют друг за другом. При разрушении первой копии таблицы используется вторая.
Основной недостаток FAT - медленная работа с файлами. При создании файла работает правило - выделяется первый свободный кластер. Это ведет к фрагментации диска и сложным цепочкам файлов. Отсюда следует замедление работы с файлами.