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