Программирование.

49. Оптимизация для конкретных моделей процессоров.

Если некоторая программа будет работать на компьютерах со строго определенными моделями процессоров, можно попытаться применить ориентированные на определенные модели процессоров команды.

Многие из новых команд дают возможность повысить производительность программы.

1. Линейные и циклические сдвиги с аргументом, не равным единице.

2. Команда РUSН с непосредственным операндом.

3. Команды ввода и вывода символьных строк.

4. Команды обмена со стеком тем, что содержится во всех регистрах РUSНА и РОРА.

5. Команды ЕNТЕR и LЕАVЕ для выделения и освобождения кадра стека.

6. Команды контроля соблюдения границ массива ВОUND.

7. Команды умножения числа на непосредственный операнд.

Можно увеличить производительность на несколько процентов за счет малого объема памяти.

При составлении программ для процессоров 80386 и 80486 и их разновидностей можно повысить производительность 16-разрядной программы, используя все вышеупомянутые команды для процессоров 80188, 80188 и 80286 и при этом выравнивая данные и адреса передачи управления по границам 32-разрядных слов, применить следующие дополнительные особенности.

1. 32-разрядные регистры (но применять их следует с осторожностью, так как их содержимое не сохраняется, если работают некоторые эмуляторы системы DОS, например модуль совместимости с DОS системы ОS/2 версий до 1.3).

2. Команды пересылки с распространением нуля или знакового бита (МОVZХ или МОVSХ).

3. 64-разрядные сдвиги (в сдвоенных регистрах) – команды SНLD и SНRD.

4. Установка в байте параметров «истина» или «ложь» по содержимому флажков центрального процессора, что дает возможность избавиться от команд условного перехода (SЕТZ, SЕТС и т. д.).

5. Команды проверки, установки, сброса, инвертирования и просмотра битов (ВТ, ВТС, ВТR, ВТS, ВSF.

И ВSR).

6. Обобщенная индексная адресация и режимы адресации с масштабированием индексов.

7. Быстрое умножение с помощью команды LЕА с применением масштабированной индексной адресации.

8. «Дальние» условных переходов.

9. Перемножение 32-разрядных чисел и деление 64-разрядных чисел на 32-разрядные.

10. Дополнительные сегментные регистры (FS и GS).

11. Команды загрузки сегментных регистров SS,

FS и GS (LSS, LFS и LGS).