Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000544.doc
Скачиваний:
26
Добавлен:
30.04.2022
Размер:
14.75 Mб
Скачать

11.1.2. Организация памяти

В 32-разрядных процессорах используется побайтная адресация. Байты, слова (16 бит), двойные слова (32 бит) записываются в последовательности байтовых ячеек памяти, начиная с младшего байта. Адресом слова или двойного слова является адрес его младшего байта.

Более крупными единицами являются страницы и сегменты. Память может логически организовываться в виде одного или множества сегментов, которые могут выгружаться на диск и по мере необходимости с него подкачиваться в память. Кроме сегментации, в защищенном режиме (Paging) возможно разбиение логической памяти на страницы размером 4 Кбайта, каждая из которых может отображаться на любую область физической памяти. Сегментация и разбиение на страницы могут применяться в любых сочетаниях. Сегментация является средством организации логической памяти, которая используется на прикладном уровне. Разбиение на страницы используется на системном уровне для управления физической памятью.

Применительно к памяти различают три адресных пространства: логическое, линейное и физическое. Основным режимом работы 32-разрядных процессоров является защищенный режим, в котором работают все механизмы преобразования адресных пространств.

Формирование физического адреса (Рис.11.3.) начинается с формирования эффективного адреса, получаемого суммированием компонентов base, index, displacement с учетом масштаба scale. Логический адрес, называемый виртуальным, состоит из селектора сегмента (в реальном режиме – просто адреса сегмента) и эффективного адреса, называемого смещением (offset). Блок сегментации транслирует логическое адресное пространство в пространство линейных адресов. Линейный адрес образуется сложением базового адреса сегмента с эффективным адресом. Базовый адрес сегмента в реальном режиме получается умножением содержимого используемого сегментного регистра на 16 (сдвигом влево на 4 разряда). В защищенном режиме базовый адрес загружается из дескриптора, хранящегося в таблице. Запись в дескрипторной таблице определяется по селектору, загруженному в используемый сегментный регистр.

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

32-разрядная шина адреса позволяет адресовать 4 Гбайт физической памяти, но в реальном режиме доступен только 1 Мбайт, начинающийся с младших адресов. В реальном режиме при попытке использования эффективного адреса, выходящего за границу 64-килобайтного сегмента вызывается исключение.

11.1.3. Режимы адресации

Система команд 32-разрядных процессоров предусматривает 11 режимов адресации. При обращении к памяти эффективный адрес вычисляется с использованием следующих компонентов:

смещения (Displacement или Disp) — 8-, 16- или 32-битное числа, включенного в команду;

базы (Base) — содержимое базового регистра, обычно используемого указания на начало некоторого массива;

индекса (Index) — содержимого индексного регистра, обычно используемого для выбора элемента массива;

масштаба (Scale) — множителя (1, 2, 4 или 8), указанного в коде инструкции. Этот элемент используется для указания размера элемента массива. Метод доступен только при 32-битной адресации.

Эффективный адрес вычисляется по формуле

ЕА = Base + Index  Scale + Disp.

Отдельные слагаемые в этой формуле могут отсутствовать.

Процессор может работать с 32- или 16-битной адресацией. 16-битна адресация работает так же, как и в процессорах 8086 и 80286, при этом используются младшие 16 бит соответствующих регистров. В реальном режиме по умолчанию используется 16-битная адресация. Но, с помощью префикса изменения разрядности адреса текущей инструкции, можно переключиться на 32-битную.

В защищенном режиме адресация по умолчанию определяется битом D дескриптора используемого кодового сегмента: при D=0 — 16 бит, при D=1 используется 32 бита. Префикс разрядности адреса переключает разрядность для текущей инструкции на противоположную.

Процессор предусматривает 11 режимов адресации:

    • регистровый – операнд содержится в регистре;

    • непосредственный – операнд размещается за словом команды;

    • прямая адресация (Direct Mode) с эффективным адресом равным EA=Disp;

    • косвенная регистровая адресация (Register Indirect Mode) с эффективным адресом EA=Base;

    • базовая адресация (Based Mode) с эффективным адресом EA=Base+Disp;

    • индексная адресация (Index Mode) EA=Index+Disp;

    • масштабированная индексная адресация (Scaled Index Mode) EA=ScaleIndex+Disp;

    • базово-индексная адресация (Based Index Mode) EA=Base+Index;

    • масштабированная базово-индексная адресация (Based Scaled Index Mode) EA= Base +ScaleIndex;

    • базово-индексная адресация со смещением (Based Index Mode with Displacement) EA=Base+Index+Disp;

    • масштабированная базово-индексная адресация со смещением (Based Scaled Index Mode with Displacement) EA=Base+ScaleIndex+Disp.

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