Вам нужен инструмент, для которого вы можете определить синтаксис языка ассемблера, а затем создать собственные анализаторы.Вы, анализаторы, можете быть простыми («сколько места занимает инструкция?») Или сложными («Сколько циклов потребуется для этого isntruction?» [Который зависит от предыдущей последовательности инструкций и, возможно, от сложной модели процессора, который вы используете).забота о]).
Один специально разработанный для этого - New Jersey Machine Toolkit .Он действительно предназначен для создания генераторов кода и отладчиков.Я подозреваю, что это было бы хорошо при "количестве байтов инструкции".Не ясно, хорошо ли это для более сложных анализов.И я полагаю, что он настаивает на том, чтобы вы придерживались его стиля синтаксиса, а не вашего.
Тот, который специально не предназначен для этого, но хорошо разбирает / анализирует языки в целом, - это наша DMSSoftware Reengineering Toolkit .
DMS может получить описание грамматики практически для любого контекстно-свободного языка (охватывающего большинство синтаксиса ассемблера), а затем может анализировать конкретный экземпляр этой грамматики (ассемблерного кода) в AST.для дальнейшей обработки.Мы покончили с несколькими языками ассемблера, включая IBM 370, 8-разрядную линию процессора Motorola и довольно специфический DSP, без проблем.
Вы можете указать грамматику атрибута (вычисление по AST) для DMSбез труда.Это отличный способ кодирования анализов, которые нуждаются только в локальной информации, такой как «Насколько велика эта инструкция?».Для более сложного анализа вам понадобится модель процессора, основанная на серии инструкций;Передача такой модели машины AST для отдельных команд была бы простым способом применить модель машины для вычисления более сложных вещей, таких как «Сколько времени занимает эта инструкция?».
Другие анализы, такие как поток управления и данныепоток, предоставляются в общей форме DMS.Вы можете использовать оценщик атрибутов для сбора локальных фактов («control-next для этой инструкции - ...», «данные из этой инструкции передаются в ...») и передавать их в анализаторы потока для вычисления фактов глобального потока («если я выполню эту инструкцию, какие другие инструкции могут быть выполнены в нисходящем направлении?» ..)
Вам необходимо настроить DMS для вашего конкретного языка (ассемблера). предназначен для настройки для подобных задач.
Да, вы, вероятно, можете все это кодировать в Python;в конце концов, это машина Тьюринга.Но, вероятно, не так просто.
Дополнительное преимущество: DMS готова применить преобразования к вашему коду, основываясь на ваших анализах.Таким образом, вы могли бы также реализовать свой оптимизатор с ним.В конце концов, вам необходимо подключить аналитическую индикацию, что оптимизация безопасна, к фактическим шагам оптимизации.