Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4семестр / Курсовик / Методичка _КР.doc
Скачиваний:
18
Добавлен:
30.04.2013
Размер:
745.47 Кб
Скачать
  1. Режимы адресации операндов

В адресной части команды 32-разрядных процессоров Intelможет содержаться:

    • адрес передачи управления,

    • операнд (или его адрес),

    • два операнда (точнее либо два адреса, либо один операнд и один адрес).

Исполнительный адрес передачи управления задаётся константой в адресном поле команды либо косвенно-регистровой адресацией.

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

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

Смещение(Displacement) – 8-, 16- или 32-разрядное число, включенное в команду (выбирается из соответствующего поля регистра командIR).

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

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

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

Рис.5. Схема вычисления исполнительного адреса операнда

Исполнительный адрес вычисляется по формуле: ИAД=: Б+И×М+С

Рис. 6. Возможные способы адресации операндов

Отдельные слагаемые в этой формуле могут отсутствовать. По умолчанию масштабный множитель считается равным 1. Возможные режимы адресации приведены в табл. 2.

Таблица 2. Режимы адресации памяти

Режим

Адрес

Пример записи

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

ИAД

DIV VAR1

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

ИAД= Б

DIV [EBX]

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

ИAД= Б+С

DIV MAS1[EBX]

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

ИAД= И+С

DIV MAS1[ESI]

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

ИAД= И×М+С

DIV MAS1[ESI*4]

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

ИAД= Б+И

DIV [EBX+EDI]

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

ИAД= Б+И×М

DIV [EBX+EDI*8]

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

ИAД= Б+И+С

DIV А[EBX+EDI]

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

ИAД= Б+И×М+С

DIV В[EBX+EDI*8]

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

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

SS:NOTX[EBX+ESI]

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

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

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

по умолчанию

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

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

CS

Нет

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

SS

Нет

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

ES

Нет

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

DS

CS, ES, SS, FS, GS

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

SS

CS, DS, ES, FS, GS

Соседние файлы в папке Курсовик