Что такое "ЕС" в архитектуре x86? (рассчитывает эффективный адрес?)

Я где-то читал, что эффективные адреса (как в инструкции LEA) в инструкциях x86 рассчитываются "ЕС". Что такое ЕС? Что именно входит в расчет эффективного адреса?

Я только узнал о наборе инструкций MC68k (UC Boulder учит этому в первую очередь), и я не могу найти хорошую веб-страницу для x86, выполнив поиск в Интернете.

4 ответа

Решение

"ЕС" - это общий термин для "Единицы исполнения". АЛУ является одним из примеров исполнительного устройства. FADD и FMUL, то есть сумматор с плавающей запятой или множитель, являются другими примерами, так как, в этом отношении, являются (есть) блок памяти, для загрузки и хранения.

ЕС, имеющие отношение к инструкциям LEA, - это ALU (сложение, вычитание, И / ИЛИ и т. Д.) И AGU (блок генерации адреса). AGU связан с конвейерами памяти, TLB, кешем данных и т. Д.

Типичный процессор Intel x86, когда я писал первое руководство по codegen, имел 2 ALU, 1 конвейер загрузки, связанный с AGU, конвейер адреса магазина, связанный со вторым AGU, и конвейер данных хранилища. По состоянию на 2016 год большинство из них имеют 3 или 4 ALU и более одной загрузочной трубы.

LEA является 3-х входной инструкцией - BaseReg+IndexReg*Scale+Offset. Так же, как режим адресации памяти x86, который на самом деле имеет 4-й вход, сегмент базы, который не является частью вычисления LEA. 3 входа обязательно стоят больше, чем 2 входа, необходимые для ADD.

На некоторых машинах ALU может выполнять только 2 операции ввода. Поэтому LEA может выполняться только на AGU, в частности, на AGU, используемом для загрузки (поскольку ALU хранилища не записывает регистр). Это может означать, что вы не можете выполнять LEA одновременно с загрузкой или двумя LEA одновременно, тогда как вы можете выполнять две операции добавления и загрузки в одном цикле.

На других машинах LEA может выполняться одним, двумя или тремя ALU. Возможно, вместо AGU - возможно, а также ALU. Это доказывает большую гибкость.

Или простые LEA, например, regscale + offset, могут быть выполнены для ALU, тогда как самые большие LEA, например, breg + ireg scale + offset, могут быть ограничены или даже разбиты на два мопа.

Итак, вопрос сводится к тому, какой ЕС (исполнительный блок) обрабатывает какие правоохранительные органы? АЛУ или АГУ? Ответ зависит от машины.

Общий текст в руководстве по оптимизации может просто сказать "ЕС", а не "AGU или ALU, в зависимости от модели" или "в зависимости от того, какой ЕС способен обработать этот конкретный LEA".

Собственные руководства Intel для разработчиков программного обеспечения являются хорошим источником информации о x86, хотя они могут быть немного излишними (и больше похожи на справочные, чем на учебные).

Ссылка EU (исполнительный блок), скорее всего, была в отличие от ALU (арифметического логического блока), который обычно является частью процессора, отвечающей за арифметические и логические инструкции. Тем не менее, ЕС имеет (или имел) некоторые арифметические возможности для расчета адресов памяти. Инструкция LEA x86 передает эти возможности программисту сборки.

Обычно вы можете предоставить довольно сложные адреса памяти для инструкции x86:

sub eax, [eax + ebx*4 + 0042]

и пока ALU обрабатывает арифметическое вычитание, ЕС отвечает за генерацию адреса.

С LEA вы можете использовать ограниченные возможности генерации адресов для других целей:

lea ebx, [eax + ebx*4 + 0042]

Сравнить с:

mul ebx, 4
add ebx, eax
add ebx, 0042

"Том 1" на странице, на которую я ссылаюсь, имеет раздел "3.7.5", в котором описываются режимы адресации - какие адреса памяти вы можете предоставить инструкции, ожидающей операнд памяти (из которых LEA является одним), отражая, какой арифметика, на которую способен ЕС (или как называется часть интерфейса памяти).

"Том 2" является ссылкой на набор инструкций и содержит окончательную информацию обо всех инструкциях, включая LEA.

ЕС = исполнительная единица?

Эффективный адрес - это адрес, к которому бы обращались, если бы LEA инструкция была инструкцией, которая фактически выполняла некоторый арифметический или другой доступ к данным. Его "предназначение" - вычисление результирующего указателя из арифметики указателя или операции индексации массива. Однако, поскольку он может выполнять некоторую комбинацию умножения и сложения, он также используется для оптимизации некоторых регулярных вычислений.

Внутренние компоненты процессоров внутри одной семьи сильно изменились за эти годы, так что ссылку на "ЕС" необходимо уточнить с точной моделью процессора. Как аналогия с вашим опытом работы с m68k, наборы команд для 68000, 010, 020, 030, 040 и 060 в основном одинаковы, но их внутренние компоненты действительно разные, поэтому любая ссылка на внутреннее имя должна сопровождаться номером детали.

Другие вопросы по тегам