您需要的是一个可以定义汇编语言语法,然后构建自定义分析器的工具。您的分析器可能很简单(“一条指令需要多少空间?”)或复杂(“这条指令需要多少个周期来执行?”[这取决于前面的指令序列,也可能取决于您所使用的处理器的复杂模型)关心])。
New Jersey Machine Toolkit是专门为此而设计的工具包。它实际上是为了构建代码生成器和调试器而设计的。我怀疑它擅长“指令字节计数”。目前尚不清楚它是否擅长更复杂的分析。我相信它坚持要求您遵循其语法风格,而不是您的语法风格。
我们的DMS 软件重组工具包不是专门为此设计的,但通常擅长解析/分析语言 。
DMS 可以为几乎任何上下文无关语言(涵盖大多数汇编语言语法)提供语法描述,然后可以将该语法的特定实例(汇编代码)解析为 AST 以便进一步处理。我们已经毫无问题地使用了几种汇编语言,包括 IBM 370、摩托罗拉的 8 位 CPU 系列和相当特殊的 DSP。
您可以轻松地向 DMS 指定属性语法(通过 AST 计算)。这些是对只需要本地信息的分析进行编码的好方法,例如“这条指令有多大?”。对于更复杂的分析,您需要一个由一系列指令驱动的处理器模型;将这样的机器模型传递给单个指令的 AST 将是应用机器模型来计算更复杂的事物(例如“这条指令需要多长时间?”)的简单方法。
DMS 以通用形式提供其他分析,例如控制流和数据流。您可以使用属性评估器来收集本地事实(“该指令的下一个控制是...”,“该指令的数据流向...”)并将它们提供给流分析器以计算全局流事实( “如果我执行这条指令,下游可能会执行哪些其他指令?”..)
您必须为您的特定(汇编)语言配置 DMS。它旨在针对此类任务进行配置。
是的,您可以用 Python 编写所有这些内容;毕竟,它是一台图灵机。但可能没那么容易。
另一个好处是:DMS 愿意根据您的分析对您的代码进行转换。所以你也可以用它来实现你的优化器。毕竟,您需要将表明优化安全的分析与实际优化步骤联系起来。