"Оптимизация для PENTIUM процессора" - читать интересную книгу автора

плавающей точкой, что вы используете приемлимое округление)

Очевидно, что вы должны пытаться минимизировать количество делений. Деления
чисел с плавающей точкой на константу должно заменяться умножением на обратную
величину. Но есть много других ситуаций, когда вы можете уменьшить количество
делений. Например:
if (A/B > C)... можно представить как if (A > B*C)... тогда B
положительный, иначе - отрицательный.

A/B + C/D можно переписать как (A*D + C*B) / (B*D)

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

17.10 WAIT
----------
Вы часто можете увеличить скорость, опуская эту инструкцию.
У инструкции WAIT есть три функции:

а. Процессор 8087 требовал WAIT перед _любой_ инструкцией с плавающей
точкой.

б. WAIT используется для координации доступа к памяти после инструкции
с плавающей точкой и между целочисленной инструкцией. Примеры:
б.1. FISTP [mem32]
WAIT ; ждем пока сопроцессор запишет результат
MOV EAX,[mem32] ; читаем результат его работы

б.2. FILD [mem32]
WAIT ; ждем сопроцессор, что бы прочитать значение...
MOV [mem32],EAX ; и используем его

б.3. FLD DWORD PTR [ESP]
WAIT ; для получения аппаратного прерывания...
ADD ESP,4 ; изменяем значение стека до его чтения

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

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

Относительно б:
Инструкция WAIT, координирующая доступ к памяти требуется на 8087 и 80287
процессорах. Суперскалярный процессор Pentium имеет специальную схему,
обнаруживающую подобные ситуации и вам не требуется помещать данную инструкцию,