"Оптимизация для 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 |
|
|