    ЗАМЕЧАНИЕ

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

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

    «pragma inline 

в программный модуль для достижения аналогичного результата. (Директива 
#pragma задает команду специальную для компилятора.) 
    В прошлом единственной причиной использования опции -В было 
ассемблирование встраиваемых операторов на ассемблере в программах на С и C++. 
Теперь компилятор имеет свой собственный встроенный ассемблер, опция -В 
устарела и используется исключительно для старых программ. Можно также 
использовать -В вместе с опцией -Ename, где name — альтернативный ассемблер, 
например Microsoft Macro Assembler (MASM). 
    Еще одна уместная и потенциально более важная опция -S также генерирует 
вывод на ассемблере, но не запускает TASM и не удаляет созданный файл с 
расширением .ASM. Инструкции, содержащиеся в этом файле, помогут изучить 
процесс преобразования компилятором высокоуровневых операторов в 
низкоуровневый машинный код. Вы можете также модифицировать ассемблерный текст 
перед ассемблированием, например, для того, чтобы поэкспериментировать с 
низкоуровневой оптимизацией. Для программы MYPROG.CPP введите bcc -S myprog, 
чтобы создать файл MYPROG.ASM. Отредактируйте или просто просмотрите этот 
файл, затем с помощью TASM.EXE, доступного по текущим маршрутам (обычно он 
находится в каталоге C:\BC45\BIN), завершите компиляцию командой bcc myprog .asm. 

    ЗАМЕЧАНИЕ 

    Из интегрированной среды сгенерировать файл с ассемблерным текстом нельзя. Для 
использования описанных приемов следует запускать автономный компилятор из 
командной строки DOS. (Компилятор интегрированной среды может обрабатывать 
встраиваемые операторы asm. Он только не может их создавать.) 


    Функции, которые возвращают void 

    Скомпилируйте с опцией -S программу, содержащую простую функцию языка С, 
которая возвращает void. Вы должны будете ввести с клавиатуры прописную S. 
Найдите листинг 17.1 и из приглашения DOS задайте команду bcc -S voidf. Затем 
загрузите результирующий файл VOIDF.ASM в текстовый редактор. 
    Не считая нескольких вспомогательных строк в начале сгенерированного 
ассемблерного файла (в этих строках объявляются макросы, компонуются сегменты 
программ, а также присутствует отладочная информация), в листинге 17.2 
демонстрируется результирующий файл VOIDF.ASM, содержащий команды ассемблера. 

    ЗАМЕЧАНИЕ

    Я получал операторы ассемблера, приведенпмс ниже, с помощью Borland C++ 
3.1. В версии 4.5 создается более "чистый" код (например, в нем отсутствуют 
ненужные инструкции jmp, подобные той, что присутствует в строке 17), однако 
цель данного раздела — продемонстрировать, как можно исследовать операторы 
программы на ассемблере, а не документировать генерациию кода компилятором. 

    Листинг 17.1.  VOIDF.CPP (скомпилируйте эту программу ь опцией -S) 

    1.   #include <stdio.h> 
    2: 
    3    void f(), 
    4 
    5:   main() 
    6'   { 
    7      f(); 
    8:     return 0;
    9-   } 


    Глава 17. Оптимизация с помощью ассемблера  439 31 
