- •Глава 1. Философия микропроцессорной техники
- •1. Лекция: Философия микропроцессорной техники
- •1.1. Что такое микропроцессор?
- •1.2. Шинная структура связей
- •1.3. Режимы работы микропроцессорной системы
- •1.5. Типы микропроцессорных систем
- •Глава 2. Организация обмена информацией
- •2. Лекция: Шины микропроцессорной системы и циклы обмена
- •2.1. Шины микропроцессорной системы
- •2.2. Циклы обмена информацией
- •2.2.1. Циклы программного обмена
- •2.2.2. Циклы обмена по прерываниям
- •2.2.3. Циклы обмена в режиме пдп
- •2.3. Прохождение сигналов по магистрали
- •Глава 2. Организация обмена информацией
- •3. Лекция: Функции устройств магистрали
- •2.4. Функции устройств магистрали
- •2.4.1. Функции процессора
- •2.4.2. Функции памяти
- •2.4.3. Функции устройств ввода/вывода
- •Глава 3. Функционирование процессора
- •4. Лекция: Адресация операндов
- •3.1. Адресация операндов
- •3.1.1. Методы адресации
- •3.1.2. Сегментирование памяти
- •3.1.3. Адресация байтов и слов
- •3.2. Регистры процессора
3.1.2. Сегментирование памяти
Говоря об адресации, нельзя обойти вопрос о сегментировании памяти, применяемой в некоторых процессорах, например в процессорах IBM PC-совместимых персональных компьютеров.
В процессоре Intel 8086 сегментирование памяти организовано следующим образом.
Вся память системы представляется не в виде непрерывного пространства, а в виде нескольких кусков — сегментов заданного размера (по 64 Кбайта), положение которых в пространстве памяти можно изменять программным путем.
Для хранения кодов адресов памяти используются не отдельные регистры, а пары регистров:
-
сегментный регистр определяет адрес начала сегмента (то есть положение сегмента в памяти);
-
регистр указателя (регистр смещения) определяет положение рабочего адреса внутри сегмента.
При этом физический 20-разрядный адрес памяти, выставляемый на внешнюю шину адреса, образуется так, как показано на рис. 3.5, то есть путем сложения смещения и адреса сегмента со сдвигом на 4 бита. Положение этого адреса в памяти показано на рис. 3.6.
Сегмент может начинаться только на 16-байтной границе памяти (так как адрес начала сегмента, по сути, имеет четыре младших нулевых разряда, как видно из рис. 3.5), то есть с адреса, кратного 16. Эти допустимые границы сегментов называются границами параграфов.
Отметим, что введение сегментирования, прежде всего, связано с тем, что внутренние регистры процессора 16-разрядные, а физический адрес памяти 20-разрядный (16-разрядный адрес позволяет использовать память только в 64 Кбайт, что явно недостаточно). В появившемся в то же время процессоре MC68000 фирмы Motorola внутренние регистры 32-разрядные, поэтому там проблемы сегментирования памяти не возникает.

Рис. 3.5. Формирование физического адреса памяти из адреса сегмента и смещения.

Рис. 3.6. Физический адрес в сегменте (все коды — шестнадцатеричные).
Применяются и более сложные методы сегментирования памяти. Например, в процессоре Intel 80286 в так называемом защищенном режиме адрес памяти вычисляется в соответствии с рис. 3.7.
В сегментном регистре в данном случае хранится не базовый (начальный) адрес сегментов, а коды селекторов, определяющие адреса в памяти, по которым хранятся дескрипторы (то есть описатели) сегментов. Область памяти с дескрипторами называется таблицей дескрипторов. Каждый дескриптор сегмента содержит базовый адрес сегмента, размер сегмента (от 1 до 64 Кбайт) и его атрибуты. Базовый адрес сегмента имеет разрядность 24 бит, что обеспечивает адресацию 16 Мбайт физической памяти.

Рис. 3.7. Адресация памяти в защищенном режиме процессора Intel 80286.
Таким образом, на сумматор, вычисляющий физический адрес памяти, подается не содержимое сегментного регистра, как в предыдущем случае, а базовый адрес сегмента из таблицы дескрипторов.
Еще более сложный метод адресации памяти с сегментированием использован в процессоре Intel 80386 и в более поздних моделях процессоров фирмы Intel. Этот метод иллюстрируется рис. 3.8.
Адрес памяти (физический адрес) вычисляется в три этапа. Сначала вычисляется так называемый эффективный адрес (32-разрядный) путем суммирования трех компонентов: базы, индекса и смещения (Base, Index, Displacement), причем возможно умножение индекса на масштаб (Scale). Эти компоненты имеют следующий смысл:

Рис. 3.8. Формирование физического адреса памяти процессора 80386 в защищенном режиме.
-
смещение — это 8-, 16- или 32-разрядное число, включенное в команду.
-
база — это содержимое базового регистра процессора. Обычно оно используется для указания на начало некоторого массива.
-
индекс — это содержимое индексного регистра процессора. Обычно оно используется для выбора одного из элементов массива.
-
масштаб — это множитель (он может быть равен 1, 2, 4 или 8), указанный в коде команды, на который перед суммированием с другими компонентами умножается индекс. Он используется для указания размера элемента массива.
Затем специальный блок сегментации вычисляет 32-разрядный линейный адрес, который представляет собой сумму базового адреса сегмента из сегментного регистра с эффективным адресом. Наконец, физический 32-битный адрес памяти образуется путем преобразования линейного адреса блоком страничной переадресации, который осуществляет перевод линейного адреса в физический страницами по 4 Кбайта.
В любом случае сегментирование позволяет выделить в памяти один или несколько сегментов для данных и один или несколько сегментов для программ. Переход от одного сегмента к другому сводится всего лишь к изменению содержимого сегментного регистра. Иногда это бывает очень удобно. Но для программиста работать с сегментированной памятью обычно сложнее, чем с непрерывной, несегментированной памятью, так как приходится следить за границами сегментов, за их описанием, переключением и т.д.
