Задал ваш вопрос для Arduino UNO ИИ получил довольно подробный ответ. Задавал вопрос, т.к. пользовался только методоми 1 или 3 из ответа.
Вопрос:
Как в программе Proteus с проектом на Arduino UNO получить полный ассемблерный листинг программы отдельным файлом?
Ответ ИИ
В самой среде Proteus нет одной волшебной кнопки «Экспортировать в ассемблер» для Arduino-проектов (так как Proteus использует скрытый инструментарий avr-gcc для компиляции .ino файлов в .hex).
Однако получить полный ассемблерный листинг можно несколькими способами. Выбор способа зависит от того, что именно вам нужно: просто посмотреть код при отладке или получить физический текстовый файл .asm / .lst.
Ниже приведены 3 рабочих метода.
Способ 1. Использование утилиты avr-objdump (Самый надежный)
Когда Proteus компилирует проект Arduino, он создает не только файл прошивки .hex, но и отладочный файл .elf (обычно он остается в папке с проектом или во временной папке). Из файла .elf можно «вытащить» полный ассемблерный листинг.
-
Соберите проект в Proteus (Build Project).
-
Найдите в папке с вашим проектом файл с расширением .elf (его имя совпадает с именем проекта).
-
Вам понадобится утилита avr-objdump.exe. Она входит в состав Arduino IDE (путь примерно такой: C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avr-objdump.exe) или в пакете AVR Toolchain.
-
Откройте командную строку (cmd) в папке с .elf файлом и выполните команду:
avr-objdump.exe -S -C -h -d имя_проекта.elf > listing.asm
Расшифровка флагов:
-
-S (заглавная) — смешивает ассемблерный код с исходным C/C++ кодом (очень удобно для анализа).
-
-C — декодирует (demangle) имена функций C++ (в Arduino много скрытых C++ функций, без этого флага их имена будут нечитаемыми).
-
-h — выводит заголовки секций памяти.
-
-d — дизассемблирует только секции с кодом.
-
> listing.asm — перенаправляет вывод в текстовый файл.
Итог: Вы получите файл listing.asm, который можно открыть в Блокноте, Notepad++ или любой IDE.
Способ 2. Просмотр ассемблера прямо во время отладки в Proteus
Если вам не нужен отдельный файл, а вы просто хотите видеть ассемблерные инструкции при пошаговой отладке симуляции:
-
Загрузите прошивку в модель ATmega328P (Arduino UNO) в Proteus.
-
Запустите симуляцию и поставьте точку останова (Breakpoint) на нужной строке C++ кода.
-
Когда симуляция остановится, откройте окно исходного кода (Source Code).
-
В меню окна исходного кода найдите опцию Show Assembly (Показать ассемблер) или нажмите правой кнопкой мыши по коду и выберите соответствующий пункт (в разных версиях Proteus это может быть в контекстном меню или на панели инструментов отладчика).
-
Теперь рядом с каждой строкой C++ кода вы будете видеть соответствующие ей ассемблерные инструкции и значения регистров.
Способ 3. Через Arduino IDE (Альтернативный и очень удобный)
Поскольку встроенный редактор кода в Proteus довольно примитивен, большинство инженеров пишут код в Arduino IDE, получают там листинг, а в Proteus загружают только готовый .hex.
-
В Arduino IDE зайдите в Файл → Настройки (File → Preferences).
-
Поставьте галочку Показывать подробный вывод при компиляции (Show verbose output during: compilation).
-
Скомпилируйте скетч. В нижнем окне лога появится путь к временной папке, где лежит скомпилированный .elf файл.
-
Скопируйте этот .elf файл в удобное место.
-
С помощью avr-objdump (как в Способе 1) сделайте из него .asm файл.
-
В Proteus просто укажите путь к готовому .hex файлу (который тоже остался во временной папке Arduino IDE) в свойствах микросхемы ATmega328P.
Способ 4. Настройка флагов компилятора внутри Proteus (Для продвинутых)
Если вы принципиально хотите, чтобы Proteus сам генерировал .lst файл при нажатии кнопки Build, нужно передать компилятору avr-gcc специальные флаги.
Примечание: В разных версиях Proteus интерфейс может немного отличаться, так как компиляция Arduino в нем реализована через обертку.
-
В окне редактора исходного кода (Source Code) перейдите в меню Source → Compiler Configuration (или нажмите правой кнопкой мыши по проекту в дереве проекта → Properties / Build settings).
-
Найдите поле Compiler Flags (Флаги компилятора) или Additional Options.
-
Добавьте туда следующую строку:
-Wa,-ahlms=listing.lst
-
Сохраните и пересоберите проект.
-
После успешной сборки в папке с проектом появится файл listing.lst, содержащий полный листинг (исходник + ассемблер + адреса).
Резюме: Если вам нужен файл для анализа, изучения или сдачи лабораторной — Способ 1 (или 3) является стандартом индустрии для микроконтроллеров AVR. Если нужно просто отладить конкретный участок кода — используйте Способ 2.