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

BS1:

Следующий пример эмулирует BSF ECX,EAX:
TEST EAX,EAX
JZ SHORT BS2
XOR ECX,ECX
MOV DWORD PTR [TEMP+4],ECX
SUB ECX,EAX
AND EAX,ECX
MOV DWORD PTR [TEMP],EAX
FILD QWORD PTR [TEMP]
FSTP QWORD PTR [TEMP]
WAIT ; для совместимости с ранними процессорами
MOV ECX, DWORD PTR [TEMP+4]
SHR ECX,20
SUB ECX,3FFH
TEST EAX,EAX ; сбрасываем флаг нуля
BS2:

17.7 битовый тест
-----------------
BT, BTC, BTR и BTS предпочтительно должны заменяться инструкциями вроде
TEST, AND, OR, XOR или сдвигов.

17.8 умножения целых
--------------------
Целочисленное умножение занимает примерно 9 тактов. Следовательно выгоднее
заменить умножение константы на одну из следующих инструкций: SHL, ADD, SUB и
LEA. Например:
IMUL EAX,10
можно заменить на
MOV EBX,EAX / ADD EAX,EAX / SHL EBX,3 / ADD EAX,EBX
или
LEA EAX,[EAX+4*EAX] / ADD EAX,EAX

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

17.9 деление
------------
Деление поглощает очень много времени. Инструкция DIV берет 17, 25 или 41
такт для байта, слова или двойного слова, соответственно. Инструкция IDIV
использует на 5 тактов больше. Следовательно, предпочтительно использовать
наименьший из возможных операндов, который не вызовет переполнения, даже если
придется пожертвовать префиксом размера и использовать без значное деление,
если возможно.