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

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

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

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

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

2. Команда PUSH с непосредственным операндом.

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

4. Команды обмена со стеком тем, что содержится во всех регистрах PUSHA и POPA.

5. Команды ENTER и LEAVE для выделения и освобождения кадра стека.

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

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

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

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

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

2. Команды пересылки с распространением нуля или знакового бита (MOVZX или MOVSX).

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

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

5. Команды проверки, установки, сброса, инвертирования и просмотра битов (BT, BTC, BTR, BTS, BSF

и BSR).

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

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

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

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

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

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

FS и GS (LSS, LFS и LGS).

Данный текст является ознакомительным фрагментом.