
- •ОБразования российской федерации
- •Оглавление
- •Краткое содержание
- •Теоретическая часть
- •Организация памяти эвм
- •Организация основной памяти
- •Локальная память и стек 32-разрядных процессоров
- •Режимы адресации операндов
- •Выполнение операции в алу
- •Язык микроопераций
- •Описание слов, регистров и шин
- •Описание массива данных и памяти.
- •Описание микроопераций
- •Условные микрооператоры.
- •Порядок выполнения работы
- •Оформление пояснительной записки
- •Вопросы для самопроверки (защиты к/р)
- •Список литературы
Режимы адресации операндов
В адресной части команды 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 |