Шаг 2.
Оптимизация с помощью ассемблера.
Анатомия функций языка C

    На этом шаге мы рассмотрим анатомию функций языка C.

    При использовании ассемблера вам приходиться выполнять задачу, обычно решаемую компилятором и состоящую в преобразовании операторов языков C и C++ в машинный код. Выполнение обязанностей компилятора не только даёт вам неограниченные возможности управления конечными результатами, но и требует большой ответственности. Написание программ на ассемблере напоминает стряпню с атомами и молекулами вместо яиц и муки. Пишущих на ассемблере можно назвать программистами-химиками. Можно смешивать инструкции процессора любым способом, и только от вас зависит, насколько съедобным будет результат.


    Замечание. Предполагается, что вы знакомы с мнемоникой ассемблера для процессоров 80*86, регистрами общего назначения, сегментными регистрами, указателем стека и др. Иначе вам надо посетить раздел Assembler.

    Перед тем как окунуться с головой в написание собственных функций на ассемблере, полезно взглянуть на код, который генерирует Borland C++. Вы также можете воспользоваться этим способом для исследования результатов компиляции. С помощью опции -B автономного компилятора программа транслируется в текстовый файл, содержащий инструкции ассемблера. Для программы с именем MYPROG.CPP команда bcc -B myprog создаст файл MYPROG.ASM, содержащий результаты компиляции в форме ассемблерного текста. После компиляции BCC запускает TASM для ассемблирования MYPROG.CPP в объектный код, после чего удаляет файл MYPROG.ASM. Вы также можете вставить строку: #pragma inline в программный модуль для достижения аналогичного результата. (Директива #pragma задает специальную команду для компилятора.)

    В прошлом единственной причиной использования опции -B было ассемблирование встраиваемых операторов на ассемблере в программах на C и C++. Теперь компилятор имеет свой собственный встроенный ассемблер, опция -B устарела и используется исключительно для старых программ. Можно также использовать -B вместе с опцией -Ename, где name - это альтернативный ассемблер, например Microsoft Macro Assembler (MASM).

    Ещё одна уместная и потенциально более важная опция -S также генерирует вывод на ассемблере, но не запускает TASM и не удаляет созданный файл с расширением .ASM. Инструкции, содержащиеся в этом файле, помогут изучить процесс преобразования компилятором высокоуровневых операторов в низкоуровневый машинный код. Вы можете также модифицировать ассемблерный текст перед ассемблированием, например, для того, чтобы поэкспериментировать с низкоуровневой оптимизацией. Для программы MYPROG.CPP введите bcc -S myprog, чтобы создать файл MYPROG.ASM. Отредактируйте или просто просмотрите этот файл, затем с помощью TASM.EXE, доступного по текущим маршрутам, завершите компиляцию командой bcc myprog.asm.


    Замечание. Из интегрированной среды сгенерировать файл с ассемблерным текстом нельзя. Для использования описанных приемов следует запускать автономный компилятор из командной строки DOS.


    Совет. Для компиляции программ, помните, что в папке с вашей программой должны находиться файлы bcc.exe, masm.exe, tasm.exe , которые можно взять, например, в папках BC45/BIN, masm32/BIN, TASM/BIN соответственно. Желательно выполнять все команды в командной стороке, например, в FAR manager. Для лучшего усвоения материала, рекомендуется запускать и изучать код далее предложенных примеров.

    На следующем шаге мы рассмотрим функции, которые возвращают void.




Предыдущий шаг Содержание Следующий шаг