В дополнение: если добавить ключ -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