Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
METOD_UKAZ_KURS.DOC
Скачиваний:
7
Добавлен:
04.04.2013
Размер:
2.07 Mб
Скачать

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

Система команд 32-разрядных процессоров предусматривает 11 режимов адресации. При этом только в двух случаях операнды не связаны с памятью. Это операнд-содержимое регистра, которое берется из любого 8-, 16- или 32-битного регистра процессора, и непосредственный операнд (8, 16 или 32 бит), который содержится в самой команде. Остальные режимы, так или иначе, обращаются к памяти.

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

  • Смещение(DisplacementилиDisp) - 8-, 16- или 32-битное число, включенное в команду.

  • База(Base) - содержимое базового регистра. Обычно используется для указания на начало некоторого массива.

  • Индекс (Index) - содержимое индексного регистра. Обычно используется для вы6ора элемента массива.

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

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

EA=Base+IndexScale+Disp

Отдельные слагаемые в этой формуле могут отсутствовать. Возможные режимы адресации приведены в таблице 4.

Табл. 4.

Режимы адресации памяти.

Режим

Адрес

Прямая адресация (DirectMode)

EA=Disp

Косвенная регистровая адресация (Register Indirect Mode)

EA=Base

Базовая адресация (BasedMode)

EA=Base+Disp

Индексная адресация (IndexMode)

EA=Index+Disp

Масштабированная индексная адресация (ScaledIndexMode)

EA=ScaleIndex+Disp

Базово-индексная адресация (Based Index Mode)

EA=Base+Index

Масштабированная базово-индексная адресация (Based Scaled Index Mode)

EA=Base+ScaleIndex

Базово-индексная адресация со смещением (BasedIndexModewithDisplacement)

EA=Base+Index+Disp

Масштабированная базово-индексная адресация со смещением (Based Scaled Index Mode with Displacement)

EA=Base+ScaleIndex+Disp

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

Табл. 5.

Различия режимов адресации.

Компонент

16-битная адресация

32-битная адресация

Базовый регистр

BX[0:15] илиBP[0:15]

Любой 32-битный регистр общего назначения

Индексный регистр

Масштаб

Смещение

SI[0:15] илиDI[0:15]

Нет (всегда 1)

0, 8 или 16 бит

Любой 32-битный регистр общего назначения, кроме ESP[0:31]

1, 2, 4 или 8

0, 8 или 32 бит

При обращениях к памяти использование сегментных регистров по умолчанию определяется типом обращения. Для большинства типов обращения при необходимости на время текущей инструкции возможно указание альтернативного сегментного регистра, что обеспечивает префикс замены сегмента (CS:,ES:,SS:,FS: илиGS:) перед кодом инструкции (таблица 6).

Табл. 6.

Использование сегментных регистров при обращении к памяти.

Тип обращения к памяти

Сегментный регистр

по умолчанию

Альтернативный

Выборка команд

Стековые операции

Строка-приемник

Любые другие ссылки на память, кроме тех, которые используют в качестве базового регистр BP[0:15],EBP[0:31] илиESP[0:31]

Ссылки на память, использующие в качестве базового регистр BP[0:15],EBP[0:31] илиESP[0:31]

CS

SS

ES

DS

SS

Нет

Нет

Нет

CS, ES, SS, FS, GS

CS, DS, ES, FS, GS

Плоская и многосегментная модели памяти

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

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

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

Промежуточное положение занимает модель памяти реального режима. Здесь память организуется в виде сегментов, но независимости и защищенности сегментов нет. Эта модель была вынужденной, она требовалась, чтобы обеспечить возможность адресации к объёму памяти 1 Мбайт при помощи 16-разрядных регистров. Такую модель сих пор используют приложения, написанные для операционных систем реального режима типаMSDOS.

Соседние файлы в предмете Организация ЭВМ