allasm.ru |
|
Чтобы высчитать адрес в памяти, который нужен инструкции, требуется один такт. Обычно эти вычисления делаются одновременно с выполнение предыдущей инструкции или спаренных инструкций. Но если адрес зависит от результат инструкции, которая выполнялась в предыдущем такте, тогда вам придется подождать дополнительный такт, чтобы получить требуемый адрес. Это называется задержкой AGI. Пример:
Задержку в данном примере можно убрать, если поместить какие-нибудь другие
инструкции между 'ADD EBX, 4' и 'MOV EAX, [EBX]' или переписав код следующим
образом:
Также вы можете получить задержку AGI при использовании инструкции, которые
используют ESP для адресации, например, PUSH, POP, CALL и RET, если ESP был
именен в предыдущем такте такими инструкциями как MOV, ADD и SUB. У PPlain
и PMMX есть специальная схема, чтобы предсказывать значение ESP после
стековой операции, поэтому у вас не будет задержки AGI при изменении ESP с
помощью PUSH, POP или CALL. При использовании RET она может случиться только
если у него есть числовой операнд, который прибавляется к ESP.
Примеры:
Инструкция LEA также может стать причиной задержки AGI, если она использует
базовый или индексный регистр, который был изменен в предыдущем такте.
Пример:
У PPro, PII и PIII нет задержки AGI для чтения из памяти и LEA, но есть
задержка при записи в память. Это не очень важно, если только последующий
код не должен ждать, пока операция записи не будет выполнена.
|