Дизассемблер

Компонент Дизассемблер

Модуль Дизассемблер считывает скомпилированную машинную программу из памяти SoC и преобразует её обратно в удобочитаемый вид (исходный код на языке ассемблера). При наличии в образе заголовков секций формата ELF дизассемблер извлекает из них оригинальные символьные метки и границы сегментов. Если заголовки отсутствуют, декодирование структуры выполняется путём прямого последовательного анализа ячеек памяти.

Автоматическое определение меток

Везде, где это технически возможно, дизассемблер пытается автоматически восстановить структуру переходов в программе. Все обнаруженные переходы и адреса вызовов получают стандартизированные имена вида logisim_label_<x>, где <x> — сквозной порядковый номер метки в проекте (начиная с 1). С целью упрощения навигации по коду метки сортируются и перечисляются строго сверху вниз по ходу роста адресов памяти.

Автоматическое указание адреса и кода операции

Для каждой успешно распознанной машинной инструкции дизассемблер автоматически добавляет в конце строки комментарий. В данном комментарии указывается текущий физический адрес счётчика команд (PC), а также шестнадцатеричный или двоичный код операции (opcode) данной команды.

Поддержка точек останова (Breakpoints)

Дизассемблер предоставляет полноценный инструмент интерактивной отладки с помощью точек останова. Установить или снять точку останова на выбранной инструкции можно тремя способами:

Как только управляющий автомат процессора достигает адреса с установленной точкой останова, моделирование немедленно приостанавливается, а Контроллер состояния моделирования выдаёт сигнал прерывания.

Важное правило отладки: Инструкция, на которой сработал останов, в этот момент ещё не выполняется — процессор замирает строго перед её дешифрацией. При срабатывании триггера останова графическое окно дизассемблера автоматически фокусируется и прокручивается к строке, вызвавшей паузу.