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

Инструкции с целочисленными операндами, как например FIADD, FISUB, FIMUL,
FIDIV, FICOM могут быть разбиты на более простые операции, и чуть улучшить
перекрытие.
Пример:

FILD [a] ; такты 1-3
FIMUL [b] ; такты 4-9

Разбивается на:

FILD [a] ; такты 1-3
FILD [b] ; такты 2-4
FMUL ; такты 5-7

В данном примере, вы выигрываете два такта, вызывая перекрывание двух
инструкций FILD.


16. ОПТИМИЗАЦИЯ ЦИКЛА
======================
Анализируя программу, вы можете заметить, что нередко до 99% времени программа
проводит во внутренних циклах. Путем к увеличению скорости может стать
использование в наиболее критических частях цикла вставок ассемблерного кода.
Остальная часть программы может быть составлена на языке высокого уровня.

Обычно цикл содержит переменную-счетчик, показывающую сколько раз будет
повторяться цикл, а так же обычно обращается к элементам массива в каждой
итерации. Я выбрал, для примера, цикл в котором происходит чтение целого
числа из массива, изменение его знака на противоположный и запись результата
в другой массив.

Исходный код этой процедуры на языке C будет выглядеть следующим образом:

void ChangeSign (int * A, int * B, int N) {
int i;
for (i=0; i
Переведя ее на ассемблер, мы получим что-то вроде этого:

Пример 1:

_ChangeSign PROCEDURE NEAR
PUSH ESI
PUSH EDI
A EQU DWORD PTR [ESP+12]
B EQU DWORD PTR [ESP+16]
N EQU DWORD PTR [ESP+20]

MOV ECX, [N]
JECXZ L2