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

LEA EAX,[EBX+8*ECX-1000]
намного быстрее, чем
MOV EAX,ECX / SHL EAX,3 / ADD EAX,EBX / SUB EAX,1000
Инструкция LEA может быть также быть использована для сложения или сдвига без
изменения флагов. Источник и приемник не должны иметь тоже размер слова, таким
образом LEA EAX,[BX] лучше заменить на MOVZX EAX,BX.

Но вы должны знать, что инструкция LEA приводит к остановкам AGI, если она
использует базовый или индексный регистр, который был изменен в предыдущем
такте.

А с тех пор как инструкция LEA может спариваться и в V-трубе, а инструкции
сдвига нет, то вы можете использовать LEA как заменитель SHL на 1, 2, 3 если
вы хотите, что бы эта операция выполнилась в V-трубе.

У 32 битных процессоров нет документированного способа адресации масштабом
индексного регистра, так например LEA EAX,[EAX*2] в действительности
кодируется как LEA EAX,[EAX*2+00000000] с добавлением 4 байт к смещению. Вы
можете уменьшить размер кода записав так: LEA EAX,[EAX+EAX] или лучше
ADD EAX,EAX. Последняя версия кода не может вызвать остановку AGI. А если
вам везет и у вас есть регистр с нулевым значением(например счетчик цикла,
после его завершения), то вы можете использовать его как базовый для
уменьшения размера кода:

LEA EAX,[EBX*4] ; 7 байт
LEA EAX,[ECX+EBX*4] ; 3 байта

17.2 TEST
---------
Инструкция TEST с непосредственным значением операнда, только если сравнение
идет с AL, AX или EAX.

TEST регистр,регистр или TEST регистр,память всегда спаривается.

Примеры:
TEST ECX,ECX ; спариться
TEST [mem],EBX ; спариться
TEST EDX,256 ; не спариться
TEST DWORD PTR [EBX],8000H ; не спариться
Что бы сделать их спариваемыми, используйте любой из следующих методов:
MOV EAX,[EBX] / TEST EAX,8000H
MOV EDX,[EBX] / AND EDX,8000H
MOV AL,[EBX+1] / TEST AL,80H
MOV AL,[EBX+1] / TEST AL,AL ; (результат в флаге знака(SF))
Так же можно сдвинуть тестовый бит в флаг переноса(CF):
MOV EAX,[EBX] / SHR EAX,16 ; (результат в флаге переноса(CF))
но этот метод приведет к потерям на PentiumPro, если переносится более одного
бита.

(Причина не спариваемости - скорее всего в том, что первый байт 2 байтной