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


Манипулирование с битом знака.
Вы можете изменить знак числа с плавающей точкой, просто флипнув бит знака.
Пример:
XOR BYTE PTR [a] + (TYPE a) - 1, 80H

Таким же образом, вы, можете получить модуль число с плавающей точкой, просто
применив AND.

Сравнение чисел:
Числа с плавающей точкой хранятся в уникальном формате, который позволяет
вам использовать целочисленные инструкции для их сравнение, исключая бит
знака. Если вы уверены, что оба числа с плавающей точкой нормальные(коррект-
ные? прим. переводчика) и положительные, то вы можете их просто сравнить как
целые числа. Пример:

FLD [a] / FCOMP [b] / FNSTSW AX / AND AH,1 / JNZ ASmallerThanB

Заменить на:

MOV EAX,[a] / MOV EBX,[b] / CMP EAX,EBX / JB ASmallerThanB

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

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

MOV EAX,[a]
MOV EBX,[b]
MOV ECX,EAX
MOV EDX,EBX
SAR ECX,31 ; копируем бит знака
AND EAX,7FFFFFFFH ; удаляем бит знака
SAR EDX,31
AND EBX,7FFFFFFFH
XOR EAX,ECX ; делаем 2 дополнения, если бит знака установлен
XOR EBX,EDX
SUB EAX,ECX
SUB EBX,EDX
CMP EAX,EBX
JL ASmallerThanB ; знакозначимое сравнение

Этот метод работает только для нормальных(корректных? прим. переводчика) чисел
с плавающей точкой, включая -0.


19. ЧИСЛА С ПЛАВАЮЩЕЙ ТОЧКОЙ ВМЕСТО ЦЕЛЫХ ЧИСЕЛ
===============================================
19.1 Перемещение данных