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

Без значное деление, если делитель кратен 2, может быть заменено на SHR. Деление
числа со знаком может быть заменено на SAR, но результат, при делении на ноль,
округлиться к минус бесконечности.

Деля положительное число, N (< 2^16) на константу D, не кратную 2 может быть
заменена умножением N с 2^16 / D, а затем разделить на 2^16. Например, что бы
разделить число на 5 вы должны умножения умножить его на 2^16 / 5 = 3333H, а
затем разделить на 2^16:

INC EAX / IMUL EAX,3333H / SHR EAX,16

INC EAX добавлен для компенсации двойной ошибки от округления.
Этот метод работает при 0 <= N <= 2^16. Вы должны протестировать этот код
тщательно, что бы убедиться, что округление правильно.

Если вы хотите заменить IMUL более быстрыми, спариваемыми инструкциями, то
вы должны написать:

LEA EBX,[EAX+2*EAX+3]
LEA ECX,[EAX+2*EAX+3]
SHL EBX,4
MOV EAX,ECX
SHL ECX,8
ADD EAX,EBX
SHL EBX,8
ADD EAX,ECX
ADD EAX,EBX
SHR EAX,16

Вы можете использовать то же код, что бы разделить на 10. Просто измените
сдвиг 16 на 17 в конце.

Делению с плавающей точкой требуется 39 тактов, при максимальной точности. Вы
можете сохранить время, определив для числа более низкую точность в
управляющем слове. (Только на инструкции FDIV и FIDIV распространяется
ускорение, ни какие други инструкции не выполняются быстрее).

Возможно делать деление с плавающей точкой и целочисленное деление
параллельным, что бы сохранить время. Например: A = A1 / A2; B = B1 / B2

FILD [B1]
FILD [B2]
MOV EAX,[A1]
MOV EBX,[A2]
CDQ
FDIV
DIV EBX
FISTP [B]
MOV [A],EAX
(убедитесь, что вы правильно устанавливаете слово управления операций с