汇编指令翻译器

汇编语言翻译器
  项目上用自定义指令的汇编语言来写硬件驱动,需要将编写的汇编指令转换为机器识别的2进制码。同时,需要检测汇编程序中的错误,并进行统计。
  整个翻译器包括获取存储单词,指令检测,翻译和统计三个部分。如下图
  1,单词获取及存储
  首先,需要从给定的程序文本文件中,获取单词,包括宏定义、全局变量、函数名、指令名、寄存器参数、立即数参数和其他符号。
  单词的判断和分类主要依靠编程规范中的标识符确定,比如“:”前代表函数名、“&”代表宏定义、行首与第一个“,”前为指令名等。同时规定一条指令必须写在一行,不能跨行。因为单词分析是以行位单位。
  在获取单词的同时按照编程规范要求,将单词存储在全局结构中,构建程序框架。具体而言,函数应该属于某个文件,指令应该属于某个函数,而参数应该属于某条指令。至此,获取阶段完成,从输入的文件中得到按结构存储的指令程序集合。
  2,指令检测
  在获取和存储完成后,需要对指令格式进行检测。包括指令名、参数个数和参数类型。实现中,将存储在全局结构中的指令与自定义指令格式进行比对,包括指令全称、指令类型、操作数个数和操作数类型。在本阶段,还需要对宏定义、全局变量和函数跳转做出展开,将变量还原为数值或者函数行号。
  3,翻译为2进制
  根据命令编码表,将指令各部分转换为2进制数,并补足空位。主要包括,将指令翻译为命令编码,操作数根据类型翻译为寄存器地址、片上存储区地址或立即数。
  4,统计
  由于需要对编写的程序做出一定的评判,顾需要统计信息。当前主要按执行单元进行统计,包括总调用次数,寄存器使用次数,跳转时的局部性等。这部分工作还有待完成。

  翻译器实现难点主要集中在词法分析和存储这部分。更重要的是,前期的设计尤其是编程模型和自定义指令的描述和抽象是做好翻译器的先决条件。

汇编指令翻译器_第1张图片

你可能感兴趣的:(汇编工具)