Оптимизация для процессоров семейства Pentium: 9. Задержка генерации адреса — Архив WASM.RU
Чтобы высчитать адрес в памяти, который нужен инструкции, требуется один такт. Обычно эти вычисления делаются одновременно с выполнение предыдущей инструкции или спаренных инструкций. Но если адрес зависит от результат инструкции, которая выполнялась в предыдущем такте, тогда вам придется подождать дополнительный такт, чтобы получить требуемый адрес. Это называется задержкой AGI.
Пример:
Код (Text):
ADD EBX,4 / MOV EAX,[EBX] ; задержка AGI <p> Задержку в данном примере можно убрать, если поместить какие-нибудь другие инструкции между 'ADD EBX, 4' и 'MOV EAX, [EBX]' или переписав код следующим образом: <p><code><pre> MOV EAX,[EBX+4] / ADD EBX,4 <p> Также вы можете получить задержку AGI при использовании инструкции, которые используют ESP для адресации, например, PUSH, POP, CALL и RET, если ESP был именен в предыдущем такте такими инструкциями как MOV, ADD и SUB. У PPlain и PMMX есть специальная схема, чтобы предсказывать значение ESP после стековой операции, поэтому у вас не будет задержки AGI при изменении ESP с помощью PUSH, POP или CALL. При использовании RET она может случиться только если у него есть числовой операнд, который прибавляется к ESP. <p> <b>Примеры:</b> <p><code><pre> ADD ESP,4 / POP ESI ; задержка AGI POP EAX / POP ESI ; нет задержки, спариваются MOV ESP,EBP / RET ; задержка AGI CALL L1 / L1: MOV EAX,[ESP+8] ; нет задержки RET / POP EAX ; нет задержки RET 8 / POP EAX ; задержка AGIИнструкция LEA также может стать причиной задержки AGI, если она использует базовый или индексный регистр, который был изменен в предыдущем такте.
Пример:
Код (Text):
INC ESI / LEA EAX,[EBX+4*ESI] ; задержка AGIУ PPro, PII и PIII нет задержки AGI для чтения из памяти и LEA, но есть задержка при записи в память. Это не очень важно, если только последующий код не должен ждать, пока операция записи не будет выполнена. © Агнер Фог, пер. Aquila
Оптимизация для процессоров семейства Pentium: 9. Задержка генерации адреса
Дата публикации 22 авг 2002