Проверка примера элементарной программы
Для исследования показанного примера элементарной программы, который демонстрирует использование встроенного ассемблера, можно воспользоваться способностью GNAT генерировать ассемблерный листинг программы.
Это позволяет убедиться в том, что мы реально получаем то, что и ожидаем получить.
При последующем рассмотрении более сложных примеров использования встроенного ассемблера и Ады, а также при самостоятельном использовании встроенного ассемблера такая способность GNAT будет оценена по достоинству.
Следует также заметить, что анализ генерируемого ассемблерного листинга может оказаться более еффективным способом отладки программы чем компиляция и запуск отладчика.
Для того, чтобы получить ассемблерный листинг программы необходимо выполнить следующую команду:
gcc -c -S -fomit-frame-pointer -gnatp 'nothing.adb' |
Поясним значение используемых в этой команде опций:
-c | - | выполнить только компиляцию исходного текста |
-S | - | сгенерировать листинг ассемблера |
-fomit-frame-pointer | - | не устанавливать отдельные кадры стека |
-gnatp | - | не добавлять код проверки времени выполнения |
Выполнение команды предоставляет хорошо читаемую версию ассемблерного кода.
Результирующий файл будет иметь такое же базовое имя, а расширение имени файла будет .s.
В случае файла с исходным текстом nothing.adb, результирующий файл с ассемблерным листингом будет nothing.s.
Содержимое этого файла будет иметь следующий вид:
.file "nothing.adb" gcc2_compiled.: ___gnu_compiled_ada: .text .align 4 .globl __ada_nothing __ada_nothing: #APP nop #NO_APP jmp L1 .align 2,0x90 L1: ret |
Примечательно, что ассемблерный код, который непосредственно был введен в исходный текст примера программы, помещен между метками #APP и #NO_APP.