Личная страница автора

Дизассемблер-отладчик кода для однокристальных контроллеров типа D501.

Дизассемблер отладчик кода программ предназначен для дизассемблирования кода готовых программ для однокристальных контроллеров D501 фирмы Siemens, интерактивного анализа кода, эмуляции исполнения программ в пошаговом режиме, с точками останова.

Программа разработана на языке Visual Basic в среде Excel. Рабочая книга включает 5 рабочих листов:

Лист 1 – листинг кода программы. В первой строке таблицы: A1 – количество ошибок дизассемблирования, B1 - ?, С1 – максимальный адрес кода, G1 – количество меток, К1 – путь и имя файла кода программы. В столбцах листинга:

A – результат анализа содержимого: пустое поле означает, что строка еще не подвергалась анализу, символ P в первой позиции означает, что строка содержит исполняемую инструкцию процессора, D – строка представляет данные, К – строка представляет смещение адреса косвенного перехода. В признаке строки кода после символа P могут следовать символы J, C, M. Они означают соответственно, что на строку есть ссылки в командах условных или безусловных переходов, командах вызова подпрограмм, либо строка помечена вручную или по косвенному переходу.

B – признак ошибки анализа.

С – адрес кода.

DF – коды инструкции или данных.

G – метка: при анализе кода добавляются метки, состоящие из символа J и адреса для перехода и из символа D и адреса для данных.

H – мнемоника инструкции или данных.

I – мнемоника операндов команды или данных, кроме адресов.

J – адреса переходов или операндов.

K – поле для комментариев.

 Лист 2 – таблица замен адресов символами.

 Лист 3 – таблица содержимого именованных регистров контроллера. Регистры представлены как байты и побитно с именами битов.

 Лист 4 – таблица содержимого ОЗУ контроллера.

 Лист 5 – таблица содержимого регистров SFR и SFB.

 Команды меню “Дизассемблер”:

1.      Очистить листинг – очищает содержимое листинга программы.

2.      Загрузить код – загрузка и дизассемблирование кода программы. Открывает форму для задания режима загрузки программного кода. Можно изменить начальный адрес программы и отказаться от замены адресов регистров их символами. После этого нужно выбрать файл кода программы. В процессе дизассемблирования в строке состояния отображается текущий адрес программы.

3.      Дизассемблировать код – дизассемблирует непомеченный участок кода программы начиная с положения указателя. Используется, если участок кода был ошибочно помечен как данные. Перед этим нужно очистить поля результата анализа для соответствующих строк.

4.      Вывести листинг – вывод листинга программы в виде текстового файла.

5.      Вывести исходник – вывод программы в виде исходного текста ассемблера а51.

6.      Загрузить исходник – не реализовано.

7.      Расставить метки переходов – помечает участок кода программы, начиная с положения указателя, как программу. Помечаются также все участки, адресуемые переходами с этого участка.

8.      Сегмент данных… - помечает непомеченный участок кода с положения указателя как сегмент данных. Открывается форма выбора режима. Можно задать, сколько байт данных выводится в каждой строке. Если включить флажок “Суммировать с” и задать базовый адрес, то можно пометить код как таблицу адресов косвенных переходов по команде JMP @A+DPTR.

9.      Расставить метки по косвенным переходам – расставляет метки для косвенных переходов по адресам сегмента данных косвенных адресов, начиная с положения указателя. Также расставляются метки переходов для всех адресуемых участков.

10.  Добавить метку перехода – добавляет метку перехода для текущего положения указателя. Помечает участок кода как программу и расставляет метки переходов.

11.  Добавить метку данных – добавляет метку данных по текущему положению указателя. Участок должен быть помечен как данные.

12.  Инициализировать – перезагружает код программы и инициализирует переменные в соответствии с листингом. Используется после ошибок. При загрузке рабочей книги выполняется автоматически.

При выполнении команд, использующих положение указателя, он должен находиться на поле адреса или первого байта команды. Если указатель находится на втором или третьем байте, выполняется разрыв строки в этой позиции, т.е. добавляется новая строка, в которой указанный байт будет первым.

Команды меню “Отладка”:

1.      Сброс – эмулирует сброс контроллера. Содержимое регистров устанавливается в соответствии с результатами выполнения сброса.

2.      Шаг в – выполнение очередной команды контроллера.

3.      Исполнить до – исполняет программу до адреса позиции указателя.

4.      Завершить подпрограмму – не реализовано.

5.      Шаг через – выполнение программы до адреса следующей строки (например вызов подпрограммы, завершение цикла).

6.      Запуск – запуск программы на исполнение. Остановить можно нажатием кнопки “Останов”.

7.      Точка останова… - не реализовано.

8.      Установить указатель – не реализовано.

9.      Отобразить память – заполнить таблицы данных в соответствии с содержимым ОЗУ. Выполняется автоматически при переходе в режим останова.

10.  Модифицировать память – изменить содержимое ОЗУ в соответствии с таблицами. Выполняется автоматически при запуске программы.

      Программа распространяется FreeWare, ссылка на автора обязательна. У автора не было достаточно времени для всестороннего тестирования программы и реализации всех функций отладки. Проект доступен для модификации, желающие могут заняться, но при коммерческом использовании просьба связаться с автором odivanov@mail.ru

Загрузить программу



Hosted by uCoz