汇编指令翻译器
汇编语⾔翻译器
项⽬上⽤⾃定义指令的汇编语⾔来写硬件驱动,需要将编写的汇编指令转换为机器识别的2进制码。同时,需要检测汇编程序中的错误,并进⾏统计。
整个翻译器包括获取存储单词,指令检测,翻译和统计三个部分。如下图
1,单词获取及存储
汇编判断指令⾸先,需要从给定的程序⽂本⽂件中,获取单词,包括宏定义、全局变量、函数名、指令名、寄存器参数、⽴即数参数和其他符号。
单词的判断和分类主要依靠编程规范中的标识符确定,⽐如“:”前代表函数名、“&”代表宏定义、⾏⾸与第⼀个“,”前为指令名等。同时规定⼀条指令必须写在⼀⾏,不能跨⾏。因为单词分析是以⾏位单位。
在获取单词的同时按照编程规范要求,将单词存储在全局结构中,构建程序框架。具体⽽⾔,函数应该属于某个⽂件,指令应该属于某个函数,⽽参数应该属于某条指令。⾄此,获取阶段完成,从输⼊的⽂件中得到按结构存储的指令程序集合。
2,指令检测
在获取和存储完成后,需要对指令格式进⾏检测。包括指令名、参数个数和参数类型。实现中,将存储在全局结构中的指令与⾃定义指令格式进⾏⽐对,包括指令全称、指令类型、操作数个数和操作数类型。在本阶段,还需要对宏定义、全局变量和函数跳转做出展开,将变量还原为数值或者函数⾏号。
3,翻译为2进制
根据命令编码表,将指令各部分转换为2进制数,并补⾜空位。主要包括,将指令翻译为命令编码,操作数根据类型翻译为寄存器地址、⽚上存储区地址或⽴即数。
4,统计
由于需要对编写的程序做出⼀定的评判,顾需要统计信息。当前主要按执⾏单元进⾏统计,包括总调⽤次数,寄存器使⽤次数,跳转时的局部性等。这部分⼯作还有待完成。
翻译器实现难点主要集中在词法分析和存储这部分。更重要的是,前期的设计尤其是编程模型和⾃定义指令的描述和抽象是做好翻译器的先决条件。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论