Листинги программ
Листинги
Листинг программы показывает исходные инструкции и объектный код, который они производят. Чтобы получить файл листинга, вызовите ассемблер с опцией - L. Листинг печатается постранично. Незаполненную строку и строку заголовка, имеют наверху каждая страница распечатки. Любой заголовок, определенный.title директивой, печатается в строке заголовка. Номер страницы печатается справа от заголовка. Если Вы не используете.title директиву, печатается имя исходного файла. Ассемблер вставляет незаполненную строку ниже строки заголовка.
Каждая строка в исходном файле создает, по крайней мере, одну строку в файле листинга. Она содержит номер исходной инструкции, значение SPC, объектный код, и исходную инструкцию..
Пример показывает листинг ассемблера.
· Листинг перекрестных ссылок
Листинг перекрестных ссылок показывает символы и их определения. Чтобы получить этот листинг, вызовите ассемблер с -x опцией или используйте.option директиву с операндом X. Ассемблер добавляет перекрестную ссылку в конец листинга программы.
Пример. Листинг перекрестных ссылок ассемблера
LABEL VALUE DEFN REF
.BIG_ENDIAN 00000000 0
.LITTLE_ENDIAN 00000001 0
.TMS320C6200 00000001 0
.TMS320C6700 00000000 0
.TMS320C6X 00000001 0
_func 00000000’ 18
var1 00000000– 4 17
var2 00000004– 5 18
Заголовки столбцов:
· LABEL (Метка) содержит каждый символ, который был определен или упомянут во время трансляции.
· VALUE (Значение) содержит шестнадцатеричное число с 8 цифрами (которое является значением, назначенным символу) или имя, которое описывает атрибуты символа. Значению может также предваряться знаком, который описывает атрибуты символа.
· DEFN (Определение) содержит номер инструкции, которая определяет этот символ. Этот столбец пустой для неопределенных символов.
· REF (Ссылка) перечисляет номера строк инструкций, которые обращаются к этому символу. Пробел в этом столбце указывает, что символ никогда не использовался.
Директивы ассемблера поставляют данные программе и управляют процессом трансляции. Директивы ассемблера дают возможность Вам делать следующее:
· Транслировать код и данные в указанные разделы.
· Резервировать пространство в памяти для неинициализированных переменных.
· Управлять видом листинга.
· Инициализировать память.
· Транслировать условные блоки.
· Определять глобальные переменные.
· Определять библиотеки, из которых ассемблер может получить макрокоманды.
· Исследовать информацию о символьной отладке.
Таблица дает сводку директив ассемблера. Помимо директив ассемблера, указанных здесь, программные средства ’C6x поддерживают следующие директивы:
· Ассемблер использует несколько директив для макрокоманд. Макро-директивы обсуждаются в главе 5, Макроязык; они не обсуждаются в этой главе.
· Оптимизатор ассемблера использует несколько директив, которые поставляют данные и управляют процессом оптимизации. Директивы оптимизатора Ассемблера обсуждены в Руководстве «Оптимизирующий компилятор C TMS320C6x»; они не обсуждаются в этой книге.
· Компилятор C использует директивы для символьной отладки. В отличие от других директив, директивы символьной отладки не используются в большинстве программ на языке ассемблера. Приложение B, Директивы символьной отладки, обсуждает эти директивы; они не обсуждаются в этой главе.
Внимание: Метки и комментарии не показаны в синтаксисе.
Любая исходная инструкция, которая содержит директиву, может также содержать метку и комментарий. Метки начинаются в первом столбце (они - единственные элементы, кроме комментариев, которые могут появляться в первом столбце), а комментарии должны начинаться с точки с запятой или звездочки, если комментарий - единственный элемент в строке. Чтобы улучшать разборчивость, метки и комментарии не показываются, как часть синтаксиса директив. В описании части, заключенные в квадратные скобки, могут пропускаться, ассемблер будет их задавать по умолчанию.
· Директивы, которые определяют разделы
| Мнемоника и синтаксис | Описание |
| bss символ, размер в байтах [, выравнивание [, сдвиг банка]] | Резервирует пространство в разделе.bss (неинициализированные данные) |
| .data | Транслирует в раздел.data (инициализированные данные) |
| .sect ”имя раздела” | Транслирует в названный (инициализированный) раздел |
| .text | Транслирует в раздел.text (выполняемый код) |
| символ.usect ”имя раздела”, размер в байтах [,выравнивание] | Резервирует пространство в названном разделе (неинициализированном) |
· Директивы, которые инициализируют константы (данные и память)
| Мнемоника и синтаксис | Описание |
| .bss размер в байтах | Резервирует пространство в текущем разделе; метка указывает на конец зарезервированного пространства |
| .byte значение1 [,..., значениеN] | Инициализирует один или более байт в текущем разделе |
| .char значение1 [,..., значениеN] | Инициализирует один или более байт в текущем разделе |
| .double значение1 [,...,значениеN] | Инициализирует 64-битнуые константы с плавающей точкой, IEEE с двойной точностью |
| .field значение [, размер] | Инициализирует поле размером в битах (1-32) со значением |
| .float значение1 [,...,значениеN] | Инициализирует 32-битные константы с плавающей точкой, IEEE с однократной точностью |
| .half значение1 [,...,значениеN] | Инициализирует 16-разрядные целые числа |
| .int значение1 [,...,значениеN] | Инициализирует 32-разрядные целые числа |
| .long значение1 [,...,значениеN] | Инициализирует 32-разрядные дробные числа |
| .short значение1 [,...,значениеN] | Инициализирует 16-разрядные дробные числа |
| .space размер | Резервирует пространство в текущем разделе; метка указывает на начало зарезервированного пространства |
| .string {выраж.1 ”строка1”} | Инициализирует одну или более текстовых строк |
| .word значение1 [,...,значениеN] | Инициализирует 32-разрядные целые числа |
· Директивы, которые выравнивают счетчик команд раздела (SPC)
| Мнемоника и синтаксис | Описание |
| .align [размер в байтах] | Выравнивает SPC на границе, указанной размером в байтах, который должен быть степенью 2; по умолчанию - 1 байт |
· Директивы, которые форматируют выходной листинг
| Мнемоника и синтаксис | Описание |
| .drlist | Допускает распечатку всех строк директив (по умолчанию) |
| .drnolist | Подавляет распечатку определенных строк директив |
| .fclist | Позволяет распечатку ложного условного блока (по умолчанию) |
| .fcnolist | Подавляет распечатку ложного условного блока кода |
| .length [длина страницы] | Устанавливает длину страницы листинга программы |
| .list | Повторный запуск распечатки программы |
| .mlist | Позволяет распечатку макрокоманд и блоков циклов(по умолчанию) |
| .mnolist | Подавляет распечатку макрокоманд и блоков циклов |
| .nolist | Останавливает распечатку программы |
| .option опция1 [, опция2,...] | Выбирает опции листинга; доступны опции - A,B,D,H,L,М,N,O,R,T,W и X |
| .page | Пропускает страницу в распечатке программы |
| .sslist | Позволяет расширенный листинг символов замены |
| .ssnolist (по умолчанию) | Подавляет расширенный листинг символов замены |
| .tab размер | Устанавливает размер знаков табуляции (в символах) |
| .title “строка” | Печатает заголовок в начале страницы листинга |
| .width [ширина страницы] | Устанавливает ширину страницы распечатки программы |
· Директивы, которые ссылаются на другие файлы
| Мнемоника и синтаксис | Описание |
| .copy [“]имя файла[“] | Включает исходные инструкции из другого файла |
| .def символ1 [,...,символN] | Идентифицирует один или более символов, которые определены в текущем модуле и могут использоваться в других модулях |
| .global символ1 [,...,символN] | Идентифицирует один или более глобальных символов |
| .include [“]имя файла[“] | Включает исходные инструкции из другого файла |
| .mlib [“]имя файла[“] | Определяет библиотеку макрокоманд |
| .ref символ1 [,...,символN] | Идентифицирует один или более символов, используемых в текущем модуле, которые определены в другом модуле |
· Директивы, которые допускают условную трансляцию
| Мнемоника и синтаксис | Описание |
| .break [четкое выражение] | Заканчивает трансляцию.loop, если четкое выражение - истина. При использовании конструкции.loop, конструкция.break - необязательна |
| .else | Транслирует блок кода, если (.if четкое выражение) является ложным. При использовании конструкции.if, конструкция.elsе необязательна |
| .elseif четкое выражение | Транслирует блок, если.if четкое выражение является ложным, а условие.elseif - истинно. При использовании конструкции.if, конструкция.elseif - необязательна |
| .endif | Заканчивает блок кода.if |
| .endloop | Заканчивает блок кода.loop |
| .if четкое выражения | Транслирует блок, если четкое выражение является истинным |
| .loop [четкое выражение] | Начинает повторяемую трансляцию кодового блока; счетчик цикла определен четким выражением |
· Директивы, которые определяют символы во время трансляции
| Мнемоника и синтаксис | Описание |
| .asg [“]строка знаков[“], символ замены | Назначает строку знаков символу замены |
| .endstruct | Заканчивает определение структуры |
| символ.equ значение | Приравнивает значение символу |
| .eval четкое выражение, символ замены | Исполняет арифметику на числовом символе замены |
| .label символ | Определяет переместимую во время загрузки метку в разделе |
| символ.set значение | Приравнивает значение символу |
| .struct | Начинает определение структуры |
| .tag структура | Приписывает атрибуты структуры метке |
| (H) Разные директивы | |
| .clink [”имя раздела”] | Допускает условную компоновку для текущего или указанного раздела |
| .emsg строка | Посылает определяемые пользователем сообщения об ошибке устройству вывода; не производит объектный файл |
| .end | Заканчивает программу |
| .mmsg строка | Посылает определяемые пользователем сообщения устройству вывода |
| .newblock | Снимает определение локальных меток |
| .wmsg строка | Посылает определяемые пользователем предупреждающие сообщения устройству вывода |






