При умножении следует просто помнить, что умножение 16-битных чисел дает 32-битный результат, а умножение 32-битных чисел — 64-битный результат. Например, пусть ЕАХ и ЕВХ содержат числа с фиксированной запятой в формате 16:16:
xor edx,edx mul ebx ; теперь EDX:EAX содержит 64-битный результат ; (EDX содержит всю целую часть, а ЕАХ - всю дробную) shrd eax,edx,16 ;теперь ЕАХ содержит ответ, если не ; произошло переполнение (то есть если результат не превысил 65 535)
аналогом IMUL в этом случае будет последовательность команд
cdq imul ebx shrd eax,edx,16