Как сделать листинг программы assembler

В дополнение: если добавить ключ -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 [четкое выражение] Начинает повторяемую трансляцию кодового блока; счетчик цикла определен четким выражением
Читайте также:
Нужна ли на компьютере программа nvidia

· Директивы, которые определяют символы во время трансляции

Источник: 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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru