CN114791811A - 一种基于元函数模板的汇编器实现方法 - Google Patents
一种基于元函数模板的汇编器实现方法 Download PDFInfo
- Publication number
- CN114791811A CN114791811A CN202210536303.XA CN202210536303A CN114791811A CN 114791811 A CN114791811 A CN 114791811A CN 202210536303 A CN202210536303 A CN 202210536303A CN 114791811 A CN114791811 A CN 114791811A
- Authority
- CN
- China
- Prior art keywords
- instruction
- assembly
- template
- metafunction
- mapping table
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 64
- 238000013507 mapping Methods 0.000 claims abstract description 168
- 238000004458 analytical method Methods 0.000 claims abstract description 14
- 238000012545 processing Methods 0.000 claims abstract description 11
- 230000006870 function Effects 0.000 claims description 23
- 238000003672 processing method Methods 0.000 claims description 15
- 230000001343 mnemonic effect Effects 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 8
- 238000013461 design Methods 0.000 description 7
- 230000008859 change Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 101150061508 VMAC1 gene Proteins 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/186—Templates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开一种基于元函数模板的汇编器实现方法,步骤包括:步骤1、设置多个汇编段表形成汇编段表集合以及设置一个伪指令映射表;步骤2、遍历所需处理的所有汇编源文件,若遇到伪指令且为非预设类型时,根据伪指令映射表对当前伪指令进行处理,并将处理后的汇编语句归并到对应的汇编指令结构映射表中;步骤3、针对目标处理器指令集分别设置元函数模板集合表、元函数映射表以及指令与元函数模板映射表;步骤4、遍历所有汇编段表集合,确定出元函数模板和指令解析包,确定出包含汇编指令的二进制指令;步骤5、遍历所有汇编段表集合,生成可执行二进制文件。本发明具有实现操作简便、成本低、灵活性以及可扩展性好且实现效率高等优点。
Description
技术领域
本发明涉及汇编器技术领域,尤其涉及一种基于元函数模板的汇编器实现方法。
背景技术
汇编器是编译系统中重要的组成部分,其主要功能是将汇编语言编写的源程序代码编译成二进制指令的目标文件。汇编器的输入为汇编语言程序代码,这些程序代码可以是高级语言编译器编译输出的汇编代码,也可以是手工编写的汇编语言程序代码,汇编器的输出为二进制指令的目标文件。汇编指令与二进制指令之间是——对应的关系,从汇编指令到二进制指令是直译的过程。实现汇编器的难点主要在于如何高效地将汇编指令转换二进制指令,以及如何自适应的应对指令集体系结构的扩展变化下的编译。
汇编器的实现需要实现所有汇编源文件到可执行二进制文件的转换,这其中会涉及到不同指令的处理,如在汇编语句中可能会包含各类型伪指令,也可能不包含伪指令,而对于伪指令的处理与对其他类型指令的处理方式不同,汇编器的实现即是需要实现包含各类型指令的所有汇编源文件到可执行二进制文件的转换。针对于汇编器的设计与实现,现有技术中通常都是对不同的指令集体系结构(Instruction Set Architecture,简称ISA)开发不同的汇编器,以满足不同目标处理器的要求,这会存在以下问题:
1、汇编器是伴随目标处理器的设计而协同开发,因而在设计新的处理器时需要重新开发与之相对应的汇编器,导致汇编器的灵活性与可扩展性差。
2、不同的目标处理器在指令字长、指令编码方式、寄存器设置和功能单元数目等方面都有所不同,使得汇编器在设计和实现上有很大的不同。且处理器的结构不同以及设计思想的不同也会导致汇编器在设计和实现方法上的差异性,因而对每一种新的ISA或者对原有的ISA进行改进和扩展时,也都要重新开发与之相适应的汇编器,即汇编器不能自适应应对ISA的扩展变化、不能适用不同目标处理器。
如专利申请CN100541433C″基于用户描述的汇编器机器实现方法″公开一种基于用户描述的汇编器及其实现方法,该方案采用用户填写规范化的表格描述相关指令集体系结构,通过读入用户描述的指令集体系结构信息,并从用户的描述信息中提取出ISA数据,将结构化的指令结构信息存放入内存中,并将汇编过程中需要的ISA信息进行传递,以用于对汇编源文件的处理,最后生成相应的二进制代码文件。该方案通过按照指令类型来确定指令格式,从而编译出相应的二进制码,但是某一种指令类型下的指令往往对应多种指令格式,按照指令类型来确定指令格式难以覆盖所有指令,且同样会存在对于不同的目标处理器需要重新开发与之相对应的汇编器,当需要增加新的处理操作数方法时,也必须对汇编器源程序代码进行修改以应对新的编译需求,即仍然会存在汇编器的灵活性和可扩展性差、效率低的问题。
综上,现有技术中对不同ISA均需要开发不同汇编器,无法自适应的应对指令集体系结构的扩展变化下的编译、不能适用不同目标处理器,会导致汇编器的实现灵活性和可扩展性差,需要耗费大量的工作量和精力,使得开发效率低、开发周期长,因而亟需提供一种汇编器实现方法,以使得能够提高汇编器实现的效率以及灵活性与可扩展性,降低实现成本。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现操作简便、成本低、灵活性以及可扩展性好且实现效率高的基于元函数模板的汇编器实现方法。
为解决上述技术问题,本发明提出的技术方案为:
一种基于元函数模板的汇编器实现方法,步骤包括:
步骤1:设置多个汇编段表形成汇编段表集合,每一个所述汇编段表中包括用于记录汇编段表的汇编语句信息的汇编指令结构映射表;以及设置一个伪指令映射表,所述伪指令映射表用于记录伪指令和伪指令处理方法的映射关系;
步骤2:遍历所需处理的所有汇编源文件,若遇到伪指令且为非预设类型时,根据所述伪指令映射表对当前伪指令进行处理,并将处理后的汇编语句归并到对应的所述汇编段表的所述汇编指令结构映射表中,若遇到不包含伪指令的汇编语句时,则将所述汇编语句加入指定汇编段表中的所述汇编指令结构映射表中;
步骤3:针对目标处理器指令集分别设置元函数模板集合表、元函数映射表以及指令与元函数模板映射表,所述元函数模板集合表中包含多个元函数模板,所述元函数映射表用于记录元函数模板中的字段所对应的编码方法,所述指令与元函数模板映射表用于记录指令与元函数模板之间的映射关系;
步骤4:遍历所需处理的所有汇编段表集合的所述汇编指令结构映射表,根据所述指令与元函数模板映射表以及所述元函数模板集合表确定出元函数模板和指令解析包;遍历确定出的所述元函数模板,根据所述元函数映射表确定出包含汇编指令的二进制指令;
步骤5遍历所需处理的所有汇编段表集合确定出所有汇编段表的二进制指令内容后,生成可执行二进制文件。
进一步的,所述步骤1中,所述汇编指令结构映射表中记录包括汇编语句、目标地址、二进制指令、指令解析包以及元函数模板的信息,所述汇编语句为当前汇编段表所有的汇编语句,所述目标地址为汇编语句存放的内存地址,所述二进制指令为汇编语句对应的二进制编码,所述指令解析包为当前汇编语句解析后生成的必要信息,所述元函数模板为当前汇编语句对应的元函数模板。
进一步的,所述指令解析包具体包括指令名、功能单元、条件寄存器、参数和参数类型中任意一种或多种,其中所述指令名为当前汇编语句的指令助记符名称,所述功能单元为当前汇编语句所属的功能单元,所述条件寄存器为当前汇编指令所对应的条件寄存器,所述元函数模板包括:元函数模板名称、以及多个字段三元组,其中所述字段三元组包括字段名称、字段的二进制位数和字段的默认二进制编码三部分。
进一步的,所述汇编段表还包括段名、起始地址、用于记录局部变量信息的段局部表,所述段局部表用于记录局部变量名、局部变量类型和局部变量值。
进一步的,所述步骤2的步骤包括:
步骤2.1.逐行遍历每一份汇编源文件并进行判断,若判断到含有section伪指令则转入步骤2.2,若判断到含有非section伪指令的其他伪指令则转入步骤2.3,若判断到为不包含伪指令的汇编语句则转入步骤2.4;
步骤2.2.检查汇编段表集合中是否存在段名为sectionname的汇编段表,若存在则将默认汇编段表设置为sectionname,若不存在则新建一个汇编段表并加入所述汇编段表集合中,将默认汇编段表设置为sectionname;
步骤2.3.根据所述伪指令映射表中当前伪指令对应的处理方法处理当前伪指令,并根据默认汇编段表将处理后的汇编语句归并到对应的汇编段表的所述汇编指令结构映射表中;
步骤2.4.将当前行汇编语句加入默认汇编段表中的所述汇编指令结构映射表当中。
进一步的,所述步骤3中还设置有寄存器编码映射表以用于记录目标处理器中的所有寄存器与对应二进制编码的映射关系,以及设置功能单元编码映射表以用于记录目标处理器中的所有功能单元与其对应二进制编码的映射关系。
进一步的,所述元函数映射表中字段对应的编码方法按照字段的二进制位数和语义指定对应的二进制编码,所述指令与元函数模板映射表包括多个指令五元组,目标处理器指令集的每一条指令对应一个所述指令五元组,所述指令五元组包括指令助记符名称、指令对应的功能单元名称、指令的首个参数类型、指令对应的元函数模板名称和指令操作码五部分。
进一步的,所述步骤4中,确定元函数模板和指令解析包的步骤包括:
步骤4.1.1.依次遍历段表集合的汇编指令结构映射表,分析每一条汇编指令并生成指令解析包;
步骤4.1.2.对每一条汇编指令,根据当前汇编指令对应的所述指令解析包查找所述指令与元函数模板映射表,获得当前汇编指令对应的元函数模板名称和指令操作码,并根据所述元函数模板名称查找所述元函数模板集合表,获得当前汇编指令对应的元函数模板。
进一步的,所述步骤4中,确定包含汇编指令的二进制指令的步骤包括:
步骤4.2.1.对每一个汇编段表集合的所述汇编指令结构映射表,遍历获得的所述元函数模板的所有字段三元组,所述字段三元组包括字段名称、字段的二进制位数和字段的默认二进制编码三部分;
步骤4.2.2.根据获得的每个所述字段三元组中字段名称查找所述元函数映射表,获得所述字段三元组中各字段对应的编码方法,并通过获得的各字段对应的编码方法获得对应的二进制编码,其中若所述元函数映射表没有当前字段名称对应的编码方法,则取当前字段的默认二进制编码作为对应的二进制编码;
步骤4.2.3.根据步骤4.2.2获得的每个字段的二进制编码和指令操作码组合得到当前汇编指令对应的二进制指令编码。
进一步的,所述步骤5的步骤包括:遍历每个汇编段表的所述汇编指令结构映射表,确定出各汇编段表的二进制指令内容,根据每个汇编段表的目标起始地址通过连接器合并成一个最终可执行文件,生成得到最终的可执行二进制文件。
与现有技术相比,本发明的优点在于:
1、本发明基于元函数模板的汇编器实现方法,通过设置多个汇编段表形成汇编段表集合,在每个汇编段表中设置记录汇编段表的汇编语句信息的汇编指令结构映射表,以及设置一个记录伪指令和伪指令处理方法的映射关系的伪指令映射表,在遍历汇编源文件过程中,基于该汇编指令结构映射表、伪指令映射表对伪指令进行处理,同时针对目标处理器指令集分别设置元函数模板集合表、元函数映射表以及指令与元函数模板映射表,遍历汇编段表集合的过程中,根据上述各表确定出包含汇编指令的二进制指令,最终生成可执行二进制文件,可以基于元函数模板快速、高效的实现汇编器,不仅实现操作简单,而且可以大大提高汇编器实现的灵活性以及可扩展性。
2、本发明基于元函数模板的汇编器实现方法,当需要增加新的段时,只需对汇编段表进行扩展,当需要增加新的伪指令时,只需对伪指令映射表进行扩展,当需要新增目标处理器时,也只需要简单的设置对应的元函数模板集合表、元函数映射表和指令与元函数模板映射表等,可兼容不同汇编段表、不同伪指令以及不同目标处理器,汇编程序设计支持具有很好的灵活性和可扩展性。
附图说明
图1是本实施例基于元函数模板的汇编器实现方法的实现流程示意图。
图2本实施例中基于元函数模板实现汇编器所设置的汇编段表的结构示意图。
图3是本实施例中基于元函数模板实现汇编器所使用的伪指令映射表的结构示意图。
图4是本实施例中设置的各表的结构示意图。
图5是本实施例中伪指令映射表的结构示意图。
图6是本实施例中寄存器编码映射表的结构示意图。
图7是本实施例中功能单元映射表的结构示意图。
图8是本实施例中元函数模板集合表和元函数模板的结构示意图。
图9是本实施例中元函数映射表的结构示意图。
图10是本实施例中指令与元函数模板映射表的结构示意图。
图11是本发明基于元函数模板的汇编器实现方法在具体应用实施例中的详细实现流程示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
如图1所示,本实施例基于元函数模板的汇编器实现方法的步骤包括:
步骤1:设置多个汇编段表形成汇编段表集合,每一个汇编段表中包括用于记录汇编段表的汇编语句信息的汇编指令结构映射表;以及设置一个伪指令映射表,伪指令映射表用于记录伪指令和伪指令处理方法的映射关系。
本实施例中,上述汇编指令结构映射表中具体记录包括汇编语句、目标地址、二进制指令、指令解析包以及元函数模板的信息等,汇编语句为当前汇编段表所有的汇编语句,目标地址为汇编语句存放的内存地址,二进制指令为汇编语句对应的二进制编码,指令解析包为当前汇编语句解析后生成的必要信息,元函数模板为当前汇编语句对应的元函数模板。上述指令解析包具体包括指令名、功能单元、条件寄存器、参数和参数类型中任意一种或多种,其中指令名为当前汇编语句的指令助记符名称,功能单元为当前汇编语句所属的功能单元,条件寄存器为当前汇编指令所对应的条件寄存器,元函数模板包括:元函数模板名称、以及多个字段三元组,其中字段三元组包括字段名称、字段的二进制位数和字段的默认二进制编码三部分。
上述的元函数模板具体包括:元函数模板名称、多个字段三元组等,字段三元组是由字段名称、字段的二进制位数和字段的默认二进制编码三部分组成。字段三元组数量具体与目标处理器指令集的指令描述的字段数量一致,字段三元组按照指令描述的字段从高位到低位的顺序进行排序,其中若元函数模板的字段三元组数量相同,且所包含的每个字段三元组相同,则定义为同一个元函数模板,采用相同的元函数模板名称。上述字段三元组相同是指字段名称、字段的二进制位数和字段的默认二进制编码三部分都相同。
如图2所示,本实施例中汇编段表集合由多个汇编段表构成,每一个汇编段表的组成结构具体包括:段名、起始地址、段局部表、汇编指令结构映射表,其中段名为当前段的字符名,起始地址为当前段的起始地址,段局部表用于记录局部变量名、局部变量类型和局部变量值。上述汇编段表至少含有一个段名为text的汇编段表。
如图3所示,本实施例中在伪指令映射表中记录伪指令和伪指令处理方法的映射关系,该映射表的每个条目包括伪指令名和对应的伪指令处理方法。
步骤2:遍历所需处理的所有汇编源文件,若遇到伪指令且为非预设类型时,根据伪指令映射表对当前伪指令进行处理,并将处理后的汇编语句归并到对应的汇编段表的汇编指令结构映射表中,若遇到不包含伪指令的汇编语句时,则将汇编语句加入指定汇编段表中的汇编指令结构映射表中。
在具体应用实施例中,上述预设类型为section伪指令,section伪指令即为用于定义一个段格式的段结构伪指令,步骤2的详细步骤包括:
步骤2.1.逐行遍历每一份汇编源文件并进行判断,若判断到合有section伪指令则转入步骤2.2,若判断到合有非section伪指令的其他伪指令则转入步骤2.3,若判断到为不包含伪指令的汇编语句则转入步骤2.4;
步骤2.2.检查汇编段表集合中是否存在段名为sectionname(段名)的汇编段表,若存在则将默认汇编段表设置为sectionname,若不存在则新建一个汇编段表并加入汇编段表集合中,将默认汇编段表设置为sectionname;
步骤2.3.根据伪指令映射表中当前伪指令对应的处理方法处理当前伪指令,并根据默认汇编段表将处理后的汇编语句归并到对应的汇编段表的汇编指令结构映射表中;
步骤2.4.将当前行汇编语句加入默认汇编段表中的汇编指令结构映射表当中。
上述的默认汇编段表起始为text汇编段表,默认段表的作用是用来决定遍历遇到的汇编语句加入哪个汇编段表中的汇编指令结构映射表当中。
步骤3:针对目标处理器指令集分别设置元函数模板集合表、元函数映射表以及指令与元函数模板映射表,元函数模板集合表中包含多个元函数模板,元函数映射表用于记录元函数模板中的字段所对应的编码方法,指令与元函数模板映射表用于记录指令与元函数模板之间的映射关系。
上述元函数模板集合表包含若干个元函数模板,在元函数映射表中记录了该元函数模板中的字段对应的编码方法,元函数映射表的每个条目包括字段名称和对应的编码方法,字段对应的编码方法具体按照字段的二进制位数和语义指定对应的二进制编码。
上述指令与元函数模板映射表具体由多个指令五元组构成,目标处理器指令集的每一条指令对应一个指令五元组。指令五元组具体是由指令助记符名称、指令对应的功能单元名称、指令的首个参数类型、指令对应的元函数模板名称和指令操作码五部分组成。
在具体应用实施例中,步骤3中还设置有寄存器编码映射表以用于记录目标处理器中的所有寄存器与对应二进制编码的映射关系,以及设置功能单元编码映射表以用于记录目标处理器中的所有功能单元与其对应二进制编码的映射关系。如图4所示,针对目标处理器指令集具体分别设立一个寄存器编码映射表、一个功能单元编码映射表、一个元函数模板集合表、一个元函数映射表以及一个指令与元函数模板映射表,其中寄存器编码映射表的每个条目包括寄存器名称和对应二进制编码,功能单元编码映射表的每个条目包括功能单元名称和对应二进制编码,元函数映射表的每个条目包括字段名称和对应的编码方法。
步骤4:遍历所需处理的所有汇编段表集合的汇编指令结构映射表,根据指令与元函数模板映射表以及元函数模板集合表确定出元函数模板和指令解析包;遍历确定出的元函数模板,根据元函数映射表确定出包含汇编指令的二进制指令;
在具体应用实施例中,上述确定元函数模板和指令解析包的详细步骤包括:
步骤4.1.1.依次遍历段表集合的汇编指令结构映射表,分析每一条汇编指令并生成指令解析包;
步骤4.1.2.对每一条汇编指令,根据当前汇编指令对应的指令解析包查找指令与元函数模板映射表,获得当前汇编指令对应的元函数模板名称和指令操作码,并根据元函数模板名称查找元函数模板集合表,获得当前汇编指令对应的元函数模板。
在具体应用实施例中,上述确定包含汇编指令的二进制指令的步骤包括:
步骤4.2.1.对每一个汇编段表集合的汇编指令结构映射表,遍历获得的元函数模板的所有字段三元组,字段三元组包括字段名称、字段的二进制位数和字段的默认二进制编码三部分;
步骤4.2.2.根据获得的每个字段三元组中字段名称查找元函数映射表,获得字段三元组中各字段对应的编码方法,并通过获得的各字段对应的编码方法获得对应的二进制编码,其中若元函数映射表没有当前字段名称对应的编码方法,则取当前字段的默认二进制编码作为对应的二进制编码;
步骤4.2.3.根据步骤4.2.2获得的每个字段的二进制编码和指令操作码组合得到当前汇编指令对应的二进制指令编码。
步骤5遍历所需处理的所有汇编段表集合确定出所有汇编段表的二进制指令内容后,生成可执行二进制文件。
遍历每个汇编段表的汇编指令结构映射表,确定出各汇编段表的二进制指令内容,根据每个汇编段表的目标起始地址通过连接器合并成一个最终可执行文件,生成得到最终的可执行二进制文件。
本发明通过设置多个汇编段表形成汇编段表集合,在每个汇编段表中设置记录汇编段表的汇编语句信息的汇编指令结构映射表,以及设置一个记录伪指令和伪指令处理方法的映射关系的伪指令映射表,在遍历汇编源文件过程中,基于该汇编指令结构映射表、伪指令映射表对伪指令进行处理,同时针对目标处理器指令集分别设置元函数模板集合表、元函数映射表以及指令与元函数模板映射表,遍历汇编段表集合的过程中,根据上述各表确定出包含汇编指令的二进制指令,最终生成可执行二进制文件,可以基于元函数模板实现汇编器。本发明上述方法,不仅实现操作简单,而且可以大大提高汇编器实现的灵活性以及可扩展性,当需要增加新的段时,只需对汇编段表进行扩展,当需要增加新的伪指令时,只需对伪指令映射表进行扩展,另外当需要增加新的字段语义动作时,只需增加一个元函数定义即可,对其他元函数和其他模块没有影响,当需要新增目标处理器时,也只需要简单的设置对应的元函数模板集合表、元函数映射表和指令与元函数模板映射表等,可兼容不同汇编段表、不同伪指令以及不同目标处理器,对汇编程序设计支持具有很好的灵活性和可扩展。
在具体应用实施例中,如图5所示包含以下18条伪指令及其对应的伪指令处理方法:
.include、.global、.macro、.file、.type、.text、.data、.section、.byte、.word、.int、.long、.string、.zero、.float、.set、.if、.align。当需要增加新的伪指令时,只需对伪指令映射表进行扩展,即可满足新的伪指令的汇编需求。
在具体应用实施例中,如图6所示,目标处理器包含16个基址寄存器AR0~AR15和16个地址偏移寄存器OR0~OR15,使用5位编码对其进行区分示例目标处理器向量单元寄存器包括64个通用寄存器VR0~VR63,使用6位编码对其进行区分,目标处理器标量单元寄存器包括64个通用寄存器R0~R63,使用6位编码对其进行区分。
在具体应用实施例中,如图7所示,目标处理器包含SIEU、SMAC1、SMAC2、SBR、SLDST、VMAC0、VMAC1、VMAC2、VMAC3、VLDST0、VLDST1共11个功能单元,使用4位编码对其进行区分。
在具体应用实施例中,如图8所示,包含M_NUM=18个元函数模板,其中MAC_R包含10个字段三元组,R_RESERVED包含10个字段三元组。由于上述两个元函数模板存在字段三元组不相同的情况,所以划分为2个元函数模板。
在具体应用实施例中,如图9所示,采用的元函数映射表包含F_NUM=30项,对应的处理器指令集需要F_NUM=30个字段编码方法来对字段进行编码。
在具体应用实施例中,如图10所示,共有N_NUM=759项五元组,每项五元组对应目标处理器指令集的每一条指令。其中元函数模板MAC_R占308组,元函数模板R_RESERVED占179组,元函数模板IMM_R_R占80组,这三个元函数模板已经涵盖指令集75%的指令;同时有5条指令单独占用一个元函数模板。由此说明大部分指令能使用同一个元函数模板,不同指令类型只要它们生成二进制码的语义过程是一样的那么它们就能使用同一个元函数模板,可以根据元函数模板的描述而即时产生相应的汇编功能,元函数模板能兼顾指令格式的普遍性和特殊性,以此动态的适应ISA的改进和扩展。
以下以采用本发明上述方法实现汇编器为例对本发明进行进一步说明,如图11所示,本发明在具体应用实施例中实现汇编器的详细步骤为:
S1:设置一个汇编段表集合。
该汇编段表集合由多个汇编段表构成,如图2所示,每一个汇编段表的组成结构包括:段名、起始地址、段局部表、汇编指令结构映射表,汇编段表中至少含有一个段名为text的汇编段表。在汇编指令结构映射表中记录了当前汇编段表的汇编语句信息,汇编指令结构映射表包括汇编语句、目标地址、二进制指令、指令解析包、元函数模板,如图3所示,汇编语句记录当前汇编段表所有的汇编语句,目标地址记录汇编语句存放的内存地址;其中二进制指令记录汇编语句对应的二进制编码,指令解析包为当前汇编语句解析后生成的必要信息,元函数模板为当前汇编语句对应的元函数模板。上述指令解析包包括:指令名、功能单元、条件寄存器、参数和参数类型。
上述元函数模板包括:元函数模板名称、多个字段三元组,字段三元组由字段名称、字段的二进制位数和字段的默认二进制编码三部分组成,字段三元组数量与目标处理器指令集的指令描述的字段数量一致,字段三元组按照指令描述的字段从高位到低位的顺序排序。若元函数模板的字段三元组数量相同,且所包含的每个字段三元组相同,则定义为同一个元函数模板,采用相同的元函数模板名称。
S2:设置伪指令映射表。
在伪指令映射表中记录了伪指令和伪指令处理方法的映射关系,该映射表的每个条目包括伪指令名和对应的伪指令处理方法。
S3:遍历所有汇编源文件,逐行遍历每一份汇编源文件,每次遍历时执行:
3.1若含有.section伪指令,如.section sectionname,则检查汇编段表集合中是否存在段名为sectionname的汇编段表。若存在,则将默认汇编段表设置为sectionname;若不存在则新建一个汇编段表加入汇编段表集合中并将默认汇编段表设置为sectionname;
3.2若遇到其他的伪指令,则根据伪指令映射表,使用伪指令名对应的处理方法处理当前伪指令;并且根据默认汇编段表将处理后的汇编语句归并到对应的汇编段表的汇编指令结构映射表中。
3.3若遇到不包含伪指令的汇编语句,则将该行汇编语句加入默认汇编段表中的汇编指令结构映射表当中。
上述默认汇编段表起始为text汇编段表。
S4:针对目标处理器指令集设立一个寄存器编码映射表、一个功能单元编码映射表、一个元函数模板集合表、一个元函数映射表以及一个指令与元函数模板映射表。
在寄存器编码映射表记录了目标处理器中的所有寄存器与其对应二进制编码的映射关系,该映射表的每个条目包括寄存器名称和对应二进制编码。在功能单元编码映射表记录了目标处理器中的所有功能单元与其对应二进制编码的映射关系,该映射表的每个条目包括功能单元名称和对应二进制编码。元函数模板集合表包含若干个元函数模板。在元函数映射表记录了上述元函数模板中的字段对应的编码方法,映射表的每个条目包括字段名称和对应的编码方法,字段对应的编码方法按照字段的二进制位数和语义指定对应的二进制编码。指令与元函数模板映射表由多个指令五元组构成,目标处理器指令集的每一条指令对应一个指令五元组。指令五元组由指令助记符名称、指令对应的功能单元名称、指令的首个参数类型、指令对应的元函数模板名称和指令操作码五部分组成。
S5遍历所有汇编段表集合,确定结构中的元函数模板和指令解析包,每次遍历时执行:
5.1依次遍历段表集合的汇编指令结构映射表,分析每一条汇编指令,生成指令解析包。
5.2对于每一条汇编指令,根据该汇编指令的指令解析包,查找指令与元函数模板映射表,获得该汇编指令对应的元函数模板名称和指令操作码。
5.3根据元函数模板名称查找元函数模板集合表,获得该汇编指令对应的元函数模板。
S6:遍历所有汇编段表集合,确定结构中所包含汇编指令的二进制指令,每次遍历时执行:
6.1针对每一个段表集合的汇编指令结构映射表,遍历上述步骤获得的元函数模板的所有字段三元组。
6.2对上述步骤获得的每个字段三元组,根据字段名称查找元函数映射表,获得该字段对应的编码方法,通过该字段对应的编码方法获得对应的二进制编码。若元函数映射表没有该字段名称对应的编码方法,则取该字段的默认二进制编码。
6.3根据上述步骤获得的每个字段的二进制编码和指令操作码组合得到该汇编指令对应的二进制指令编码。
S7:遍历所有汇编段表集合,生成可执行二进制文件。
对每一个汇编段表结构,遍历该汇编段表的汇编指令结构映射表,确定该汇编段表的二进制指令内容。根据每个汇编段表包含的目标起始地址,通过连接器将它们合并成一个最终可执行文件。
上述各步骤的执行顺序可以根据实际需求配置,例如步骤S1、S2,步骤S3、S4等可以设置为同步执行,也可以设置后按照先后顺序执行,具体可以根据实际需求确定。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (10)
1.一种基于元函数模板的汇编器实现方法,其特征在于,步骤包括:
步骤1:设置多个汇编段表形成汇编段表集合,每一个所述汇编段表中包括用于记录汇编段表的汇编语句信息的汇编指令结构映射表;以及设置一个伪指令映射表,所述伪指令映射表用于记录伪指令和伪指令处理方法的映射关系;
步骤2:遍历所需处理的所有汇编源文件,若遇到伪指令且为非预设类型时,根据所述伪指令映射表对当前伪指令进行处理,并将处理后的汇编语句归并到对应的所述汇编段表的所述汇编指令结构映射表中,若遇到不包含伪指令的汇编语句时,则将所述汇编语句加入指定汇编段表中的所述汇编指令结构映射表中;
步骤3:针对目标处理器指令集分别设置元函数模板集合表、元函数映射表以及指令与元函数模板映射表,所述元函数模板集合表中包含多个元函数模板,所述元函数映射表用于记录元函数模板中的字段所对应的编码方法,所述指令与元函数模板映射表用于记录指令与元函数模板之间的映射关系;
步骤4:遍历所需处理的所有汇编段表集合的所述汇编指令结构映射表,根据所述指令与元函数模板映射表以及所述元函数模板集合表确定出元函数模板和指令解析包;遍历确定出的所述元函数模板,根据所述元函数映射表确定出包含汇编指令的二进制指令;
步骤5:遍历所需处理的所有汇编段表集合,确定出所有汇编段表的二进制指令内容后,生成可执行二进制文件。
2.根据权利要求1所述的基于元函数模板的汇编器实现方法,其特征在于,所述步骤1中,所述汇编指令结构映射表中记录包括汇编语句、目标地址、二进制指令、指令解析包以及元函数模板的信息,所述汇编语句为当前汇编段表所有的汇编语句,所述目标地址为汇编语句存放的内存地址,所述二进制指令为汇编语句对应的二进制编码,所述指令解析包为当前汇编语句解析后生成的必要信息,所述元函数模板为当前汇编语句对应的元函数模板。
3.根据权利要求2所述的基于元函数模板的汇编器实现方法,其特征在于,所述指令解析包具体包括指令名、功能单元、条件寄存器、参数和参数类型中任意一种或多种,其中所述指令名为当前汇编语句的指令助记符名称,所述功能单元为当前汇编语句所属的功能单元,所述条件寄存器为当前汇编指令所对应的条件寄存器,所述元函数模板包括:元函数模板名称、以及多个字段三元组,其中所述字段三元组包括字段名称、字段的二进制位数和字段的默认二进制编码三部分。
4.根据权利要求1所述的基于元函数模板的汇编器实现方法,其特征在于,所述汇编段表还包括段名、起始地址、用于记录局部变量信息的段局部表,所述段局部表用于记录局部变量名、局部变量类型和局部变量值。
5.根据权利要求1所述的基于元函数模板的汇编器实现方法,其特征在于,所述步骤2的步骤包括:
步骤2.1.逐行遍历每一份汇编源文件并进行判断,若判断到含有section伪指令则转入步骤2.2,若判断到含有非section伪指令的其他伪指令则转入步骤2.3,若判断到为不包含伪指令的汇编语句则转入步骤2.4;
步骤2.2.检查汇编段表集合中是否存在段名为sectionname的汇编段表,若存在则将默认汇编段表设置为sectionname,若不存在则新建一个汇编段表并加入所述汇编段表集合中,将默认汇编段表设置为sectionname;
步骤2.3.根据所述伪指令映射表中当前伪指令对应的处理方法处理当前伪指令,并根据默认汇编段表将处理后的汇编语句归并到对应的汇编段表的所述汇编指令结构映射表中;
步骤2.4.将当前行汇编语句加入默认汇编段表中的所述汇编指令结构映射表当中。
6.根据权利要求1~5中任意一项所述的基于元函数模板的汇编器实现方法,其特征在于,所述步骤3中还设置有寄存器编码映射表以用于记录目标处理器中的所有寄存器与对应二进制编码的映射关系,以及设置功能单元编码映射表以用于记录目标处理器中的所有功能单元与其对应二进制编码的映射关系。
7.根据权利要求1~5中任意一项所述的基于元函数模板的汇编器实现方法,其特征在于,所述元函数映射表中字段对应的编码方法按照字段的二进制位数和语义指定对应的二进制编码,所述指令与元函数模板映射表包括多个指令五元组,目标处理器指令集的每一条指令对应一个所述指令五元组,所述指令五元组包括指令助记符名称、指令对应的功能单元名称、指令的首个参数类型、指令对应的元函数模板名称和指令操作码五部分。
8.根据权利要求1~5中任意一项所述的基于元函数模板的汇编器实现方法,其特征在于,所述步骤4中,确定元函数模板和指令解析包的步骤包括:
步骤4.1.1.依次遍历段表集合的汇编指令结构映射表,分析每一条汇编指令并生成指令解析包;
步骤4.1.2.对每一条汇编指令,根据当前汇编指令对应的所述指令解析包查找所述指令与元函数模板映射表,获得当前汇编指令对应的元函数模板名称和指令操作码,并根据所述元函数模板名称查找所述元函数模板集合表,获得当前汇编指令对应的元函数模板。
9.根据权利要求1~5中任意一项所述的基于元函数模板的汇编器实现方法,其特征在于,所述步骤4中,确定包含汇编指令的二进制指令的步骤包括:
步骤4.2.1.对每一个汇编段表集合的所述汇编指令结构映射表,遍历获得的所述元函数模板的所有字段三元组,所述字段三元组包括字段名称、字段的二进制位数和字段的默认二进制编码三部分;
步骤4.2.2.根据获得的每个所述字段三元组中字段名称查找所述元函数映射表,获得所述字段三元组中各字段对应的编码方法,并通过获得的各字段对应的编码方法获得对应的二进制编码,其中若所述元函数映射表没有当前字段名称对应的编码方法,则取当前字段的默认二进制编码作为对应的二进制编码;
步骤4.2.3.根据步骤4.2.2获得的每个字段的二进制编码和指令操作码组合得到当前汇编指令对应的二进制指令编码。
10.根据权利要求1~5中任意一项所述的基于元函数模板的汇编器实现方法,其特征在于,所述步骤5的步骤包括:遍历每个汇编段表的所述汇编指令结构映射表,确定出各汇编段表的二进制指令内容,根据每个汇编段表的目标起始地址通过连接器合并成一个最终可执行文件,生成得到最终的可执行二进制文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210536303.XA CN114791811B (zh) | 2022-05-17 | 2022-05-17 | 一种基于元函数模板的汇编器实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210536303.XA CN114791811B (zh) | 2022-05-17 | 2022-05-17 | 一种基于元函数模板的汇编器实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114791811A true CN114791811A (zh) | 2022-07-26 |
CN114791811B CN114791811B (zh) | 2024-04-12 |
Family
ID=82462940
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210536303.XA Active CN114791811B (zh) | 2022-05-17 | 2022-05-17 | 一种基于元函数模板的汇编器实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114791811B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117519665A (zh) * | 2023-09-28 | 2024-02-06 | 中国人民解放军国防科技大学 | 一种模型驱动的汇编器自动生成方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040039896A1 (en) * | 2002-08-26 | 2004-02-26 | Pechanek Gerald George | Methods and apparatus for meta-architecture defined programmable instruction fetch functions supporting assembled variable length instruction processors |
CN102830975A (zh) * | 2012-08-15 | 2012-12-19 | 深圳市翌日科技有限公司 | 一种汇编语言到高级语言的代码转换方法和装置 |
US20130185798A1 (en) * | 2012-01-13 | 2013-07-18 | Accessdata Group, Llc | Identifying software execution behavior |
CN113900923A (zh) * | 2021-08-16 | 2022-01-07 | 中国人民解放军战略支援部队信息工程大学 | 一种跨指令集架构的二进制函数相似性检查系统及方法 |
-
2022
- 2022-05-17 CN CN202210536303.XA patent/CN114791811B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040039896A1 (en) * | 2002-08-26 | 2004-02-26 | Pechanek Gerald George | Methods and apparatus for meta-architecture defined programmable instruction fetch functions supporting assembled variable length instruction processors |
US20130185798A1 (en) * | 2012-01-13 | 2013-07-18 | Accessdata Group, Llc | Identifying software execution behavior |
CN102830975A (zh) * | 2012-08-15 | 2012-12-19 | 深圳市翌日科技有限公司 | 一种汇编语言到高级语言的代码转换方法和装置 |
CN113900923A (zh) * | 2021-08-16 | 2022-01-07 | 中国人民解放军战略支援部队信息工程大学 | 一种跨指令集架构的二进制函数相似性检查系统及方法 |
Non-Patent Citations (1)
Title |
---|
邹耀;刘佩林;: "基于用户描述的可配置汇编器", 计算机工程, no. 01, 5 January 2009 (2009-01-05) * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117519665A (zh) * | 2023-09-28 | 2024-02-06 | 中国人民解放军国防科技大学 | 一种模型驱动的汇编器自动生成方法及装置 |
CN117519665B (zh) * | 2023-09-28 | 2024-05-31 | 中国人民解放军国防科技大学 | 一种模型驱动的汇编器自动生成方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN114791811B (zh) | 2024-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8464232B2 (en) | Compiler compiler system with syntax-controlled runtime and binary application programming interfaces | |
CN112346722B (zh) | 一种实现编译型嵌入式Python的方法 | |
Gyllenhaal | A machine description language for compilation | |
JPH06501583A (ja) | 多言語最適化コンパイラ内のフォールディングメカニズムを構成する方法 | |
JP2001216169A (ja) | 第1ビット・アーキテクチャの命令を第2ビット・アーキテクチャの命令に変換する方法、システム、プログラムおよびデータ構造 | |
CN114327477A (zh) | 智能合约执行方法、装置、电子装置和存储介质 | |
CN114791811B (zh) | 一种基于元函数模板的汇编器实现方法 | |
Nelson | A comparison of PASCAL intermediate languages | |
CN109558121A (zh) | 接口驱动程序的开发方法、装置、设备及存储介质 | |
CN116775127B (zh) | 一种基于RetroWrite框架的静态符号执行插桩方法 | |
US20070169054A1 (en) | Process of automatically translating a high level programming language into an extended activity diagram | |
CN113835688B (zh) | 一种科学计算语言解释器的对象封装方法 | |
CN114579141A (zh) | require框架转化为VUE框架的方法及装置 | |
CN114895917A (zh) | 一种可扩展式汇编指令转换二进制指令的编译方法 | |
JPH07182179A (ja) | オブジェクト指向データベース管理装置 | |
JP3266097B2 (ja) | 非リエントラントプログラムの自動リエントラント化方法及びシステム | |
CN111767033A (zh) | 用于机械臂程序开发的编程系统及功能扩展方法 | |
Mailund | Domain-Specific Languages in R: Advanced Statistical Programming | |
CN112988260B (zh) | 应用冷启动优化方法、装置、计算机设备及存储介质 | |
WO2024222455A1 (zh) | 一种硬件加速指令确定方法、系统、电子设备及存储介质 | |
CN113094040B (zh) | 一种小程序编译方法和装置 | |
JPH08286927A (ja) | アセンブラ処理方式 | |
Meyer-Baese et al. | Software Tool for Embedded Microprocessor Systems | |
CN117270863A (zh) | 一种基于增量编译的Verilog语法分析方法 | |
CN118484199A (zh) | 一种混合指令的编译方法和编译器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |