Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение арх.ЭВМ2.docx
Скачиваний:
5
Добавлен:
02.12.2018
Размер:
17.75 Mб
Скачать

Режимы адресации процессора Pentium 4

Режимы адресации процессора Pentium 4 чрезвычайно нерегулярны и зависят от формата конкретной команды «16» или «32» разрядная. Поддерживаемые режимы адресации включают непосредственную, прямую, регистровую, косвенно- регистровую, индексную и специальную адресацию для обращения к элементам массива. Проблема заключается в том, что не все режимы применимы ко всем командам и не все регистры могут использоваться во всех режимах адресации. Это значительно усложняет задачу разработчика компилятора. Для управления режимами адресации имеется соответствующий байт. Один из операндов определяется по комбинации полей MOD и R/M. Второй операнд всегда является регистром и определяется по значению поля REG.

R/H

MOD

00

01

10

11

000

M[EAX]

M[EAX+8]

M[EAX+32]

EAX или AL

001

M[ECX]

M[ECX+8]

M[ECX+32]

ECX или CL

010

M[EDX]

M[EDX+8]

M[EDX+32]

EDX или DL

011

M[EBX]

M[EBX+8]

M[EBX+32]

EBX или BL

100

SIB

SIB+8

SIB+32

ESP или AH

101

Прямая адресация

Прямая адресация+8

Прямая адресация+32

EBP или CH

110

M[ES]

M[ES+8]

M[ES+32]

ESI или DH

111

M[ED]

M[ED+8]

M[ED+32]

EDI или BH

Колонки 01 и 10 включаю режимы адресации, при которых значение регистра прибавляется 8 или 32 разрядному смещению, следующему за командой. Если выбрано 8 разрядное смещение, оно перед сложением получают 32 разрядное знаковое расширение. Например, команда ADD с полем R/M=011, полем MOD=01 и смешением, равным 6, вычисляем сумму регистра EBX и 6, и в качестве одной из операндов считывает слово из полученного адреса памяти. Значение регистра EBX не изменяется. При MOD=11 предоставляет возможность выбора из двух регистров. Для команд со словами берется первый вариант, для команд с байтами- второй. Отметим, что здесь не все регулярно. Например, нельзя выполнить косвенную адресацию через EBP или прибавить смещение к ESP. Иногда вслед за байтом MOD, следует дополнительный байт SIB. Байт SIB определяет масштабный коэффициент и два регистра. Когда присутствует байт SIB, адрес операнда вычисляется путём умножения индексного регистра на 1, 2, 4 или 8 (в зависимости от значения поля SCALE), прибавляем его к базовому регистру и наконец, возможным прибавлением 8 или 32 разрядного смещения, в зависимости от значения поля MOD. Практически все регистры могут использовать и в качестве индекса, и в качестве базы.

Режимы получаемые по средствам байта SIB, могут пригодится для обращения к элементам массива. Рассмотрим следующую JAVA-команду

For(i=0; i<n; i++);

A[i]=0;

Здесь а- массив 4-байтных целых чисел, относящийся к текущей процедуре. Обычно регистр EBP используется для указания на базу стекового фрейма, который содержит локальный переменные и массивы.

EBP

EBP+8

Другие локальные переменные

EBP+12

a[0]

EBP+16

a[1]

a[2]

Стековый фрейм

I в регистре EAX

Значение SIB M[4*EAX+EBP+8]

Компилятор должен хранить значение i в регистре EAX. Для доступа к элементу a[i] он будет использовать режим с байтом SIB, в котором адрес операнда равен сумме значений 4 EAX, EBP, и 8. Эта операция может сохранятся в a[i] за одну команду. Эта команда при надлежащим использовании позволит сэкономить несколько циклов, но она занимает определенную область памяти микросхемы, которая могла бы пригодиться. Например, можно было бы сделать больше кэш памяти первого уровня, или уменьшить размер микросхемы, обеспечив возможность повышения тактовой частоты.