Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Команды процессора, выполняющие копирование и перемещение массивов многобайтных данных, требуют меньше циклов процессора, чем классические команды этой группы. Начиная с процессоров ММХ, появились комплексные команды, сочетающие в себе несколько функций, выполняемых отдельными командами. Значительно расширилась группа команд для выполнения битовых операций. Эти команды также являются комплексными и позволяют выполнить несколько операций одновременно. Мы рассмотрим возможности, предоставляемые такими командами, в главе б, когда будем анализировать встроенные средства языков высокого уровня.

Как вы уже убедились, большие возможности для оптимизации программ кроются в правильном использовании особенностей аппаратной архитектуры процессора. Это довольно сложная сфера, т. к. требует знания методов обработки данных и выполнения команд процессора на уровне аппаратной части. Могу с уверенностью утверждать, что возможности для оптимизации здесь безграничны.

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

Здесь представлен далеко не полный перечень возможных вариантов оптимизации программного кода приложений. Как очевидно, большие резервы для повышения эффективности работы программы кроются в самой программе. В книге основное внимание будет уделено оптимизации программного кода с использованием языка ассемблера, поэтому далее рассмотрим более детально, как решаются такие задачи.

Ассемблер и оптимизация программ в деталях
Язык ассемблера, как средство улучшения производительности приложений, написанных на языках высокого уровня, используется очень широко. Разумное сочетание в одном приложении модулей, написанных на языке высокого уровня и на ассемблере, позволяет достичь как высокого быстродействия работы программы, так и уменьшения размера исполняемого кода. В настоящее время такое сочетание используется настолько часто, что фирмы- разработчики компиляторов уделяют особое внимание интерфейсу программ на языках высокого уровня с ассемблером. Современные компиляторы языков высокого уровня имеют, как правило, встроенный ассемблер.
На практике применяются два варианта совместного использования ассемблера и языков высокого уровня. В первом случае используется отдельный файл объектного модуля, в котором располагается одна или несколько процедур обработки данных. Вызов процедур осуществляется программой, написанной с использованием высокоуровневой среды разработки, например Delphi или Visual С + + .

В исходном тексте приложения на языке высокого уровня ассемблерная процедура объявляется соответствующим образом, после чего ее можно вызвать из любой точки основной программы. Внешний объектный модуль на ассемблере присоединяется к основной программе на этапе компоновки. Файл с исходным текстом процедуры обычно имеет расширение ASM и компилируется одним из распространенных пакетов, таких как Microsoft Macro Assembler (MASM), Borland Turbo Assembler (TASM 5.0) или Netwide Assembler (NASM). Последний компилятор превосходит первые два по своим возможностям, однако так сложилось, что в странах бывшего СНГ наиболее популярными являются все же компиляторы MASM и TASM.

Преимущества отдельно компилируемых, модулей на ассемблере — это возможность использования программного кода в приложениях, написанных на разных языках и даже в разных операционных средах, и независимость процесса разработки и отладки программного кода процедур.
К недостаткам, пожалуй, можно отнести некоторые сложности компоновки разработанного модуля с основной программой на языке высокого уровня. При этом необходимо четко представлять механизм вызова внешних процедур и передачи параметров в вызываемую процедуру. Преимущества такого подхода — многократное использование разработанных на ассемблере объектных модулей или библиотек функций. В этом случае программист должен позаботиться об интерфейсе ассемблерного модуля с программой, написанной на языке высокого уровня. Вопросы компоновки ассемблерных модулей и программ на языках высокого уровня подробно будут рассматриваться в главе 3.

Второй вариант совместного использования ассемблера и языков высокого уровня основан на применении встроенного ассемблера. Разработка процедур на встроенном ассемблере удобна, в первую очередь, благодаря быстроте отладки. Так как процедура разрабатывается в теле основной программы, то не требуется специальных средств для компоновки такой процедуры с вызывающей программой. Не нужно также заботиться о порядке передачи параметров в вызываемую процедуру и о восстановлении стека.
К недостаткам этого метода оптимизации можно отнести определенные ограничения, которые накладывает среда программирования на работу ассемблерных модулей, а также то, что процедуры, разработанные на встроенном ассемблере, нельзя преобразовать во внешние отдельно используемые модули. Все современные средства разработки ассемблерных программ имеют в своем составе интегрированный отладчик, так же как и языки высокого уровня. И хотя такой отладчик предоставляет меньший уровень сервиса по сравнению с языками высокого уровня, он вполне достаточен для анализа программного кода.


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru