Директивы ассемблера
Листинги программ
Листинги
Листинг программы показывает исходные инструкции и объектный код, который они производят. Чтобы получить файл листинга, вызовите ассемблер с опцией - 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 [четкое выражение] | Начинает повторяемую трансляцию кодового блока; счетчик цикла определен четким выражением |
· Директивы, которые определяют символы во время трансляции