Анимация
JavaScript
|
Главная Библионтека ITER DUP (0) Code segment; [COUNTER],0 COUNTER DD TICS DD RESULTLIST DD ,************ . CODE BEGIN: MOV TESTLOOP: Делаем здесь необходимую инициализацию: счетчик цикла временная переменная для счетчика список тестовых результатов . ********* ******************* сегмент кода сбрасываем счетчик цикла тестовый цикл ***************:
.******** Конец инструкций-, которые нужно тестировать CLC RDTSC SUB SUB ЕАХ,[TICS] ЕАХ,OVERHEAD MOV MOV ADD ************* инструкция против спаривания и затенения ; снова читаем счетчик ; вычисляем разность ; вычитаем такты, которые использоваг:. подсобные инструкции (против спаривания ; и затенения) ; счетчик цикла сохраняем результат в таблице увеличиваем значение счетчика ; сохраняем счетчик EDX, [COUNTER] [RESULTLIST] [EDX],ЕАХ EDX,TYPE RESULTLIST [COUNTER],EDX EDX,ITER * (TYPE RESULTLIST) TESTLOOP ; повторяем заданное число раз ; вставьте здесь код, чтобы считать значения в RESULTLIST Дополнительные инструкции до и после тестируемого кода включены, чтобы получить адекватные результаты на Р1. CLD - это неспариваемая инструкция, которая была добавлена, чтобы порядок спаривания инструкций в первый раз был такой же, как и во все остальные. Восемь инструкций NOP были вставлены, чтобы предотвратить влияние возможных префиксов в тестируемом коде, которые могли бы раскодироваться в тени предыдущих инструкций на Р1. Однобайтовые инструкции использовались здесь, чтобы получить тот же порядок спаривания. На РММХ еще можно вставить XOR ЕАХ,ЕАХ / CPUID перед тестируемым кодом, чтобы FIFO-буфер инструкций был очищен, или какую-нибудь длительную инструкцию (например, CLI или AAD), если нужно, чтобы он был полон (CPUID не вызывает эффекта затенения - может начаться раскодировка префиксов последующих инструкций).
На РРго, Р2 и РЗ можно добавить XOR ЕАХ,ЕАХ / CPUID до и после кажд RDTSC, чтобы предотвратить ее возможное выполнение параллельно с какой-ниб) другой инструкцией и убрать подсобные инструкции. CPUID - это синхронизируют инструкция, это означает, что она очищает конвейер и ждет, пока все исполняющ!} инструкции не будут выполнены, и только тогда выполнится сама. Это может быть лезно для тестирования. Инструкция RDTSC не может выполняться в виртуальном режиме на Р1 и PMN поэтому при запуске DOS-программ, следует перегрузиться в реальный режим. Полный текст исходного кода тестовой программы доступен по адр( http: www. agner. org/assem/. У процессоров Pentium есть специальнью счетчики наблюдения за качеством рабо-которые отслеживают и подсчитывают такие события, как промахи кэша, невырав» ность, различные задержки. Подробности об использовании счетчиков в данной главе затрагиваются, но их можно найти в "Intel Architecture Software Developers Manual", \ 3, Appendix A. 631. Сравнение различных микропроцессоров в табл. 6.14 изложены некоторые важные различия между процессорами семейства Pentiur Таблица 6.14. Основные поколения семейства процессоров Pentii
*) Celeron: 0-128, Xeon: 512 или больше, доступны другие варианты. На некоторых версиях кэш второго уровня выполняется на половинной скорости. Комментарии к таблице в Размер кэша кода важен, если критические части программы занимают достаточно много места. в Размер кэша данных важен для всех программ, которые обрабатывают большое количество данных в критической части. к Инструкции ММХ и ХММ полезны для тех программ, которые обрабатывают большие массивы данных, такие как звук и изображения. Не всегда от использования инструкций ММХ и ХММ можно получить выгоду. в Инструкции условной пересьшки данных полезны для того, чтобы избавиться от плохо предсказуемых условных переходов. к Выполнение не по порядку улучшает качество (особенно не оптимизированного кода). Оно включает в себя автоматическую перегруппировку и переименование регистров. а Процессоры с хорошим механизмом предсказания переходов могут предсказывать простые повторяющиеся последовательности. Чем выше потери при неправильном предсказании переходов, тем важнее их предсказуемость. а Стековый буфер возвратов улучшает предсказание инструкций возврата из подпрограмм, когда они вызываются из нескольких мест. в Задержки чтения регистров делают обработку смешанных типов данных (8, 16, 32 битов) более сложной. в Время ожидания инструкции умножения зависит от цепочки зависимостей. Производительность 1/2 значит, что инструкция может конвейеризироваться, поэтому новое умножение может начинаться каждый второй такт. Это определяет скорость параллельной обработки данных. в Использование инструкций FPU на PI и РММХ часто требует большого количества дополнительных инструкций FXCH. Это тормозит выполнение на "старых" процессорах-но не на процессорах семейства Pentium и продвинутых неинтеловских процессорах. ш Использование инструкций ММХ на процессорах РММХ, Р2 и РЗ или инструкций условной пересылки данных на РРго, Р2 и РЗ создает проблемы периносимости с более ранними прО" цессорами. Решение может состоять в написании нескольких версий кода, каждая из кото- 0 Использование инструкций FPU на PI и РММХ часто требует большого коли дополнительных инсфукций FXCH. Это тормозит выполнение на "старых" процес но не на процессорах семейства Pentium и продвинутых неинтеловских процессорах. f Использование инструкций ММХ на процессорах РММХ, Р2 и РЗ или инструкций уа пересьшки данных на РРго, Р2 и РЗ создает проблемы периносимости с более ранш» цессорами. Решение может состоять в написании нескольких версий кода, каждая и рых будет оптимизированна под определенное поколение. Программа должна определ каком процессоре она выполняется и выбирать соответствующую версию (п. 6.27.10). Большая часть методов оптимизации быстродействия исполняемого кода, обс> шихся в этой главе, имеет ценность и для других микропроцессоров, включая н ЛИЯ других производителей, не только Intel. литература Литература Основная: 1. Зубков С. В. Assembler. Для DOS, Windows и Unix. - М.: ДМК, 1999. 2. Рудаков П. И., Финогенов К. Г. Язык Ассемблера: уроки программированм М.: ДИАЛОГ-МИФИ, 2001. " 3. Сван Т. Освоение Turbo Assembler. - Киев: Диалектика, 1996. 4. Финогенов К. Г. Самоучитель по системным функциям MS-DOS. М.: Радио и связь: Энтроп, 1995. 5. Detmer R. С. Introduction to 80x86 Assembly Language and Computer Architecture. 2001 6. Fog A. How to optimize for the Pentium family of microprocessors [http: www.anger.org/assem] 7. Hennessy J. L., Patterson D. A. Computer Architecture: A Quantitative Approach. 2002. Дополнительная: 1. Зензин О. С, Иванов М. А. Стандарт криптографической защиты AES. Конечные поля. М.: КУДИЦ-ОБРАЗ, 2002. 2. Долгий А. Алгоритм противодействия исследованию исполняемых модулей Компьютер Пресс- 1993.-№ И.-С. 55-61. 3. Долгий А., Расторгуев С. Защита программ от дизассемблеров и отладчиков Компьютер Пресс- 1992.-№ 4.- С. 49-53. 4. Дмитриевский Н. П., Расторгуев С. П. Искусство защиты и "раздевания" программ. -М.: Совмаркет, 1991. 5. Иванов М. А., Чугунков И. В. Теория, применение и оценка качества генераторов псевдослучайных последовательностей. М.: КУ ДИЦ-ОБРАЗ, 2003. 6. Правиков Д., Фролов К. Реализация пристыковочного модуля. - Монитор-1994.-№5. 7. Правиков Д. И. Ключевые дискеты. Разработка элементов систем защиты от несанкционированного копирования.- М.: Радио и связь, 1995. 8. Программно-аппаратные средства обеспечения информационной безопасности Защита программ и данных. Учебн. пособие для вузов / П. Ю. Белкин О. О. Михальский, А. С. Перщаков и др. - М.: Радио и связь, 2000. 9. Расторгуев С. П. Программные методы защиты информации в компьютер и сетях. - М.: Яхтсмен, 1996. 10. Рыскунов А. Этот безумный, безумный, безумный мир резидентных программ Монитор.- 1992.-№ 4.- С. 3-12;-№ 5.- С. 53-58. 11. Спесивцев А. В., Вегнер В. А., Крутяков А. Ю. и др. Защита информащ в персональных ЭВМ.- М.: Радио и связь: МП "Веста", 1992. 12. Щербаков А. Защита от копирования. Построение программных средств М.: ЭДЭЛЬ, 1992. 13. Щербаков А. Разрушающие программные воздействия. - М.: ЭДЭЛЬ, 1993. 14. Электронный журнал X25-zine. 15. Материалы с сайта http: www.ssl.stu.neva.ru/psw/crypto.html. 16. Материалы с сайта http: rootteam.void.ru 17. Материалы с сайта http: www-106.ibm.com/developerworks/ 18. Материалы с сайта http: www.shellcode.com.ar 19. Материалы с сайта http: www.advancedlinuxprogramming.coni/ 20. Материалы сайта http: www. wasm.ru 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 [ 81 ] 82 83 84 85 86 87 88 |