Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Процессор х86.docx
Скачиваний:
21
Добавлен:
23.04.2019
Размер:
725.45 Кб
Скачать
  1. Процессор х86: регистровая адресация и регистровая с масштабированием.

Регистровая адресация

При регистровой операции операнд задается мнемоническим обозначением одного из регистров процессора. Исполнительный адрес при этом не формируется. Как правило, используются регистры общего назначения и индексные регистры: EAX, AX, AH, AL, …, EDX, DX, DH, DL, ESI, SI, EDI, DI. Использование указательных и сегментных регистров возможно, но не рекомендуется, так как малейшая ошибка при их использовании может привести к аварийному завершению программы.

Пример регистровой адресации:

MOV ECX, EDI

MOV DX, BX

MOV AL,AH

Адресация с масштабированием

Этот метод адресации полностью идентичен предыдущему, за исключением того, что с его помощью можно прочитать элемент массива слов, двойных слов или учетверенных слов, просто поместив номер элемента в регистр:

mov ax,[esi*2]+2

Множитель, который может быть равен 1, 2, 4 или 8, соответствует размеру элемента массива — байту, слову, двойному слову, учетверенному слову соответственно. Из регистров в этом варианте адресации можно использовать только EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, но не SI, DI, BP или SP, которые можно было использовать в предыдущих вариантах.

Использования коэффициента масштабирования позволяет эффективно организовывать индексацию в массивах с 2-, 4- или 8-разрядными элементами. Масштабирование индексного регистра выполняется аппаратно, одновременно с вычислением адреса. Это исключает выполнение дополнительных операций сдвига или умножения.

  1. Размещение в памяти многомерных статических массивов и доступ к их элементам.

  1. Размещение в памяти многомерных динамических массивов и доступ к их элементам.

  1. Формирование исполнительного адреса из трех и четырех составляющих.

В лекции

Эффективный адрес

При обращении к памяти (к данным), как и при формировании адреса перехода, процессор строитэффективный адрес, который может включать до трех компонентов. Такой сложный способ задуман для облегчения доступа к элементу массива: компонент BASE — базовый адрес массива, INDEX — номер элемента, DISPLACEMENT — смещение внутри элемента. Массив может состоять из байтов, слов, двойных и учетверенных слов — это учитывается масштабным коэффициентом SCALE (1, 2, 4 или 8). Компоненты эффективного адреса могут быть константами (в инструкции), находиться в регистрах и даже в памяти. Такая универсальность оборачивается значительными микроархитектурными издержками.

База, индекс и смещение могут использоваться в различных комбинациях: некоторые из компонентов могут быть пустыми. Коэффициент масштабирования может использоваться только совместно с индексом. Каждая возможная комбинация полезна для общего использования структур данных ассемблерными программами и программами языков высокого уровня.

Смещение

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

База

Относительный адрес операнда указывается косвенно, в одном из регистров общего назначения, как для "смещенных" переменных.

База + Смещение

Регистр и смещение могут быть использованы вместе с двух случаях:

1. Индекс в статических массивах, элементы которых имеют размер, отличный от 2, 4 и 8 бит. Смещение в этом случае кодирует относительный адрес начала массива. Регистр содержит результаты вычислений, которые определяют смещение конкретного элемента внутри массива.

2. Доступ к полю записи. В этом случае регистр базы содержит адрес начала записи, а смещение представляет собой относительный адрес нужного поля.

Важным частным случаем использования такой комбинации (база + смещение) является доступ к параметрам в записи активации процедуры. Запись активации процедуры - это кадр стека, созданный при входе в процедуру. В данном случае, в качестве базового регистра удобнее всего использовать EBP, т.к. при его использовании автоматически выбирается сегмент стека. Такой способ доступа к параметрам процедуры обеспечивает компактное кодирование команды.

( Индекс * Коэффициент масштабирования ) + Смещение

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

База + Индекс + Смещение

Совместное использование двух регистров применяется для поддержки работы с двумерными массивами (смещение содержит адрес начала массива) или для доступа к отдельным экземплярам массива записей (смещение содержит относительный адрес поля внутри записи).

База + ( Индекс * Коэффициент масштабирования ) + Смещение

Такая комбинация обеспечивает эффективное индексирование в двумерном массиве, если его элементы имеют размер 2, 4 или 8 битов.