Предыдущая Следующая

Настроим компилятор таким образом, чтобы он создавал выходной файл на ассемблере из С-файла Utilities.c:

1. Создадим новый проект в рабочей области, используемой в предыдущих примерах, и назовем его project2 (вместо создания нового проекта можно использовать ранее созданный проект projectl).

2. Добавим к проекту файлы Tutor.c и Utilities.c.

Чтобы отобразить рабочую область, нажмите позицию табуляции Overview, доступную в нижней части окна рабочей области. Чтобы видеть только недавно созданный проект, выберите позицию табуляции project2. На экране вы должны видеть только project2.

3. Чтобы задать опции на узле уровня файла, в окне рабочей области выбирается файл Utilities.c.

Выберите Project>Options. При этом, обратите внимание, что доступны только категории C/C++ Compiler и Custom Build.

4. В категории C/C++ Compiler выберите Override inherited settings и проверьте параметры настройки, приведенные в Табл. 26.1.

Примечание. В этом примере необходимо использовать низкий уровень оптимизации при компилировании кода, чтобы показать доступ к местным (локальным) и глобальным переменным. Если использовать более высокий уровень оптимизации, то ссылки на местные переменные могут быть удалены. Фактическое объявление функции с изменением уровня оптимизации не меняется.

Таблица 26.1. Параметры настройки компилятора для проекта projectl

Страница окна

Параметр: значение

Optimization

Size: None (Best debug support)

List

Output assembler file Include source

Include compiler runtime information (deselected)

5. «Кликните» на кнопке OK для возвращения к окну рабочей области.

6. Откомпилируйте файл Utilities.c. После этого можно найти выходной файл Utilities.s79 в подкаталогеprojects\debug\list.

7. Чтобы исследовать соглашение о вызовах и увидеть, как код на С или С++ представлен на ассемблере, откройте файл Utilities.s79. Анализируя его содержимое, легко видеть, где и каким образом производится передача параметров, как производится возврат управления по адресу, следующему за адресом вызова функции, и каким образом возвращается конечное значение. Вы можете также видеть, какие регистры сохраняет подпрограмма на уровне ассемблера.

Чтобы получать правильный интерфейс для собственных прикладных функций, пользователю следует создавать «скелетный» код для каждой функции, которая ему требуется.

26.2. Добавление ассемблерного модуля к проекту

Приведенный ниже пример демонстрирует возможность создания проекта, содержащего модули на ассемблере и на С. К проекту, содержащему модуль на С, добавляется модуль на ассемблере, содержащий функцию_write. Эта функция является примитивной функцией вывода, использующей функцию putchar, чтобы обработать символьный вывод. При стандартном выполнении функции

_write производится переадресация символьного вывода на окно Terminal I/O


Предыдущая Следующая






Warning: include(./news.php) [function.include]: failed to open stream: No such file or directory in /var/www/picprof/data/www/picprof.com/book/book4_261.html on line 158

Warning: include(./news.php) [function.include]: failed to open stream: No such file or directory in /var/www/picprof/data/www/picprof.com/book/book4_261.html on line 158

Warning: include() [function.include]: Failed opening './news.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/picprof/data/www/picprof.com/book/book4_261.html on line 158