В дополнение: если добавить ключ -fverbose-asm — ассемблер будет разбавлен комментариями, из которых будет гораздо легче понять, что происходит и для какого участка кода сгенерированы те или иные команды.
14 окт 2019 в 16:50
И ещё: по дефолту ассемблерный код выводится в AThttps://ru.stackoverflow.com/questions/335/%D0%9A%D0%B0%D0%BA-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-%D0%B0%D1%81%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80%D0%BD%D1%8B%D0%B9-%D0%BB%D0%B8%D1%81%D1%82%D0%B8%D0%BD%D0%B3-%D0%BA%D0%BE%D0%B4%D0%B0-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE-gcc» target=»_blank»]ru.stackoverflow.com[/mask_link]
Директивы ассемблера
Листинг программы показывает исходные инструкции и объектный код, который они производят. Чтобы получить файл листинга, вызовите ассемблер с опцией — L. Листинг печатается постранично. Незаполненную строку и строку заголовка, имеют наверху каждая страница распечатки. Любой заголовок, определенный.title директивой, печатается в строке заголовка.
Ассемблер для Windows используя Visual Studio (урок 23 )
Номер страницы печатается справа от заголовка. Если Вы не используете.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 (Ссылка) перечисляет номера строк инструкций, которые обращаются к этому символу. Пробел в этом столбце указывает, что символ никогда не использовался.
Директивы ассемблера поставляют данные программе и управляют процессом трансляции. Директивы ассемблера дают возможность Вам делать следующее:
· Транслировать код и данные в указанные разделы.
· Резервировать пространство в памяти для неинициализированных переменных.
Hello, Assembly! Retrocoding the World’s Smallest Windows App in x86 ASM
· Управлять видом листинга.
· Транслировать условные блоки.
· Определять глобальные переменные.
· Определять библиотеки, из которых ассемблер может получить макрокоманды.
· Исследовать информацию о символьной отладке.
Таблица дает сводку директив ассемблера. Помимо директив ассемблера, указанных здесь, программные средства ’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 | Инициализирует одну или более текстовых строк |
| .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 [ширина страницы] | Устанавливает ширину страницы распечатки программы |
· Директивы, которые ссылаются на другие файлы
· Директивы, которые допускают условную трансляцию
| Мнемоника и синтаксис | Описание |
| .break [четкое выражение] | Заканчивает трансляцию.loop, если четкое выражение — истина. При использовании конструкции.loop, конструкция.break — необязательна |
| .else | Транслирует блок кода, если (.if четкое выражение) является ложным. При использовании конструкции.if, конструкция.elsе необязательна |
| .elseif четкое выражение | Транслирует блок, если.if четкое выражение является ложным, а условие.elseif — истинно. При использовании конструкции.if, конструкция.elseif — необязательна |
| .endif | Заканчивает блок кода.if |
| .endloop | Заканчивает блок кода.loop |
| .if четкое выражения | Транслирует блок, если четкое выражение является истинным |
| .loop [четкое выражение] | Начинает повторяемую трансляцию кодового блока; счетчик цикла определен четким выражением |
· Директивы, которые определяют символы во время трансляции
Источник: studopedia.ru
Как сделать листинг программы assembler
Как мне получить листинг программы?
У меня есть мой .asm файл, что мне дальше делать?
P.S. Работаю с Ассемблером через qeditor.
Регистрация: 09.01.2008
Сообщений: 26,238
код программы (содержимое .asm файла) — это и есть листинг программы.
Что Вы имеете в виду под листингом — результат компиляции с адресами и машинными кодами? (если да — то Вам нужно откомпилировать ваш исходник с помощью masm32 )
Форумчанин
Регистрация: 25.04.2011
Сообщений: 107
Да-да, именно результат компиляции с адресами и машинными кодами. А как это сделать?
В учебнике: masm32.exe name.asm/L. но я не совсем понял, как это в моём случае делать, ведь у меня ml.exe он так не делает.
Форумчанин
Регистрация: 16.01.2011
Сообщений: 325
| Как мне получить листинг программы? У меня есть мой .asm файл, что мне дальше делать? P.S. Работаю с Ассемблером через qeditor. |
Полный ппц. А меню в редакторе на что?
Project—>Assemble Link.
Форумчанин
Регистрация: 25.04.2011
Сообщений: 107
Хорошо. А подскажите, какая тут ошибка?
title labl-2; .MODEL tiny; .DATA ; i db 0, 255; iw dw 40000 dw 65535; END
написал вроде простенькую программку, а выдаёт ошибку.
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,162
| написал вроде простенькую программку, а выдаёт ошибку. |
Form_13
А какую ошибку? Вооружись словарем и переведи. В программировании без знания английского языка никак не обойтись!
Белик Виталий 🙂
Регистрация: 23.07.2007
Сообщений: 57,792
| iw dw 40000 dw 65535; |
Запятой нет. Или нет имени второй переменки.
А вообще фраза типа а выдаёт ошибку. заставляет весь интернет трепетать, лихорадочно доставая телепаторы.
Так что готовься ждать правильного ответа в ыдцатом году в пипернадцать минут пипернадцатого.
I’m learning to live.
Источник: www.programmersforum.ru