Оптимизация для процессоров семейства Pentium: 9. Задержка генерации адреса

Дата публикации 22 авг 2002

Оптимизация для процессоров семейства Pentium: 9. Задержка генерации адреса — Архив WASM.RU

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

Пример:

Код (Text):
  1.  
  2. ADD EBX,4 / MOV EAX,[EBX] ; задержка AGI
  3. <p>
  4. Задержку в данном примере можно убрать, если поместить какие-нибудь другие
  5. инструкции между 'ADD EBX, 4' и 'MOV EAX, [EBX]' или переписав код следующим
  6. образом:
  7. <p><code><pre>
  8. MOV EAX,[EBX+4] / ADD EBX,4
  9. <p>
  10. Также вы можете получить задержку AGI при использовании инструкции, которые
  11. используют ESP для адресации, например, PUSH, POP, CALL и RET, если ESP был
  12. именен в предыдущем такте такими инструкциями как MOV, ADD и SUB. У PPlain
  13. и PMMX есть специальная схема, чтобы предсказывать значение ESP после
  14. стековой операции, поэтому у вас не будет задержки AGI при изменении ESP с
  15. помощью PUSH, POP или CALL. При использовании RET она может случиться только
  16. если у него есть числовой операнд, который прибавляется к ESP.
  17. <p>
  18. <b>Примеры:</b>
  19. <p><code><pre>
  20. ADD ESP,4 / POP ESI            ; задержка AGI
  21. POP EAX   / POP ESI            ; нет задержки, спариваются
  22. MOV ESP,EBP / RET              ; задержка AGI
  23. CALL L1 / L1: MOV EAX,[ESP+8]  ; нет задержки
  24. RET / POP EAX                  ; нет задержки
  25. RET 8 / POP EAX                ; задержка AGI

Инструкция LEA также может стать причиной задержки AGI, если она использует базовый или индексный регистр, который был изменен в предыдущем такте.

Пример:

Код (Text):
  1.  
  2. INC ESI / LEA EAX,[EBX+4*ESI]  ; задержка AGI

У PPro, PII и PIII нет задержки AGI для чтения из памяти и LEA, но есть задержка при записи в память. Это не очень важно, если только последующий код не должен ждать, пока операция записи не будет выполнена. © Агнер Фог, пер. Aquila


0 759
archive

archive
New Member

Регистрация:
27 фев 2017
Публикаций:
532