Дизассемблер
Модуль Дизассемблер считывает скомпилированную машинную программу из памяти SoC и преобразует её обратно в удобочитаемый вид (исходный код на языке ассемблера). При наличии в образе заголовков секций формата ELF дизассемблер извлекает из них оригинальные символьные метки и границы сегментов. Если заголовки отсутствуют, декодирование структуры выполняется путём прямого последовательного анализа ячеек памяти.
Автоматическое определение меток
Везде, где это технически возможно, дизассемблер пытается автоматически восстановить структуру переходов в программе. Все обнаруженные переходы и адреса вызовов получают стандартизированные имена вида logisim_label_<x>, где <x> — сквозной порядковый номер метки в проекте (начиная с 1). С целью упрощения навигации по коду метки сортируются и перечисляются строго сверху вниз по ходу роста адресов памяти.
Автоматическое указание адреса и кода операции
Для каждой успешно распознанной машинной инструкции дизассемблер автоматически добавляет в конце строки комментарий. В данном комментарии указывается текущий физический адрес счётчика команд (PC), а также шестнадцатеричный или двоичный код операции (opcode) данной команды.
Поддержка точек останова (Breakpoints)
Дизассемблер предоставляет полноценный инструмент интерактивной отладки с помощью точек останова. Установить или снять точку останова на выбранной инструкции можно тремя способами:
- Щелчком мыши на левой панели нумерации строк рядом с целевой инструкцией;
- Выделением строки с инструкцией и нажатием клавиши b на клавиатуре;
- Использованием управляющих кнопок интерфейса Добавить точку останова (Add break point) или Удалить точку останова (Remove break point).
Как только управляющий автомат процессора достигает адреса с установленной точкой останова, моделирование немедленно приостанавливается, а Контроллер состояния моделирования выдаёт сигнал прерывания.
Важное правило отладки: Инструкция, на которой сработал останов, в этот момент ещё не выполняется — процессор замирает строго перед её дешифрацией. При срабатывании триггера останова графическое окно дизассемблера автоматически фокусируется и прокручивается к строке, вызвавшей паузу.