一种面向异os的汇编器及汇编移植方法

文档序号:6648881阅读:253来源:国知局
一种面向异os的汇编器及汇编移植方法
【专利摘要】本发明公开了一种面向异OS的汇编器及汇编移植方法,本发明涉及计算机代码移植领域,该方法包括获取源代码,将所述源代码进行编译,获取源汇编程序;选择目标操作系统,按照所述目标操作系统的汇编格式,将所述源汇编程序转化为符合所述汇编格式的目标汇编程序;获取所述目标操作系统的应用程序二进制接口规范,将所述目标汇编程序转化为符合所述应用程序二进制接口规范的新目标汇编程序;面向所述目标操作系统,将所述新目标汇编程序进行封装,以完成汇编移植。通过本发明的面向异OS汇编器可以转换成面向不同目标操作系统的可运行的汇编程序,这样就克服了不同OS带来的代码移植的困难。
【专利说明】一种面向异OS的汇编器及汇编移植方法

【技术领域】
[0001]本发明涉及计算机代码移植领域,特别涉及一种面向异OS的汇编器及汇编移植方法。

【背景技术】
[0002]近年来,移动设备的发展取得了长足的进步,也在人们的生活中扮演了越来越重要的角色,人们对移动设备运行程序的性能的要求越来越高,而能够开发出高效运行的可执行代码也成为程序设计师们所追求的目标。高层程序设计语言(C/C++、Java)设计开发简捷、高效,它们对解决工程应用中的实际问题非常有效,但是对高层语言的优化还是停留在顶层的设计上,优化能力有一定局限,而且高层语言较底层语言而言变化快,高层语言还有高低版本的兼容问题。
[0003]优化汇编是一件困难且技巧性很强的工作,通常为了使程序的性能有所提升,一般会选择通过使用编译器的一些优化选项来进行编译优化,更激进的做法可能是直接对汇编进行手动修改以获得性能的提升。移动设备的开发者时常需要将一段性能不错的汇编程序迀移到其他操作系统中使用,这时他们的需求往往有两方面:一是能够将原操作系统中的汇编程序高效移植到目标操作系统中,即尽量做较少的工作就可以完成系统间的汇编移植;其二是由源操作系统到目标操作系统的优化传承,即将源系统中的汇编程序不错的性能效果可以在新的平台中体现,然而,在实际嵌入式平台汇编移植过程中,上述两个需求都难以得到满足,这是因为汇编程序从源系统移植到目标系统中时,操作系统不同,编译器也不同所导致的汇编不同的结果,开发者手动解决这些问题需要花费大量的时间成本,而解决这些问题也并不容易。
[0004]对于相同处理器架构的硬件设备,在源操作系统下编译的汇编往往由于操作系统的不同以及该系统下的编译器的不同而不能在目标操作系统的机器上直接编译运行,这使得在源系统下经过编译或者手动优化的汇编难以在目标操作系统的机器上运行,更无法体现优化效果,如果要运行具有相同功能的程序,还需要根据目标操作系统的汇编的特点进行重构,而要使这段代码具有不错的性能,则要进行再次优化,这严重地影响了开发效率和成本。
[0005]当程序员做一些代码优化工作后,要对程序进行性能测评,对于同一段程序,往往在相同机器上进行优化先后的对比测评,这样虽然可以获得优化前后性能测评数据,但是就相同的一段代码,还不能获取在不同目标操作系统上编译运行的测评数据,不能与商用编译器编译的汇编进行对比,这就缺失了相对于商业编译器的测评数据,不能做出相对于商用编译器更近一步的优化工作,同时也不能够借鉴商用编译器的优点。
[0006]发明专利“实现通信协议在不同操作系统上移植的方法”,该发明涉及一种实现通信协议系统在不同操作系统上的移植方法,在所述操作系统设置内部函数接口名称与所述通信协议系统可识别函数接口名称之间的对应关系表,所述操作系统接收所述通信协议系统的调用指令,依据上述对应关系表,所述操作系统将上述调用指令中函数接口名称转换成相应的内部函数接口名称,所述操作系统依据内部函数接口名称调用函数,返回所述通信协议系统。该发明还公开一种实现通信协议系统在不同操作系统上的移植系统。相较于直接修改通信协议的源代码,该发明屏蔽操作系统的原函数接口名称,使通信协议系统可识别该操作系统的函数接口名称,减少修改源代码和调试通信协议的繁琐,提高用户使用效率。但是该发明在于实现通信协议系统在不同操作系统上的移植方法,并不针对汇编代码进行移植,而本发明在于面向不同操作系统进行汇编移植并进行优化效果传播,上述发明与本发明的方法和目的无关。
[0007]发明专利“一种汇编语言到高级语言的代码转换方法和装置”,该发明提供一种汇编语言到高级语言的代码转换方法,包括获取汇编指令,还包括:步骤S100,建立高级语言的输出文本,并用该高级语言代码来模拟汇编指令对应处理器运行环境;步骤200,查找汇编指令对应的高级语言函数,并建立汇编指令与高级语言函数之间的映射关系表;步骤S300,遍历汇编指令,提取包含指令地址、操作符和若干个操作码的数据项;步骤S400,解析出所有函数,自动生成并输出所有函数的声明到高级语言的输出文本中;步骤S500,将每个函数生成对应的高级语言代码,并输出到高级语言的输出文本中;步骤S600,在输出文本中加入使高级语言代码成功执行的辅助代码。该方法可高效的将汇编代码正确地转换为高级语言。但是上述发明在于提供一种汇编语言到高级语言的代码转换方法,而本发明是在于面向不同操作系统进行汇编移植,本发明与上述发明的方法和目的无关。


【发明内容】

[0008]针对现有技术不足,本发明提出了一种面向异OS的汇编器及汇编转化方法,以解决以上技术问题。
[0009]本发明提出一种面向异OS的汇编移植方法,包括:
[0010]步骤1,获取源代码,将所述源代码进行编译,获取源汇编程序;
[0011]步骤2,选择目标操作系统,按照所述目标操作系统的汇编格式,将所述源汇编程序转化为符合所述汇编格式的目标汇编程序;
[0012]步骤3,获取所述目标操作系统的应用程序二进制接口规范,将所述目标汇编程序转化为符合所述应用程序二进制接口规范的新目标汇编程序;
[0013]步骤4,面向所述目标操作系统,将所述新目标汇编程序进行封装,以完成汇编移植。
[0014]所述的面向异OS的汇编移植方法,所述步骤1还包括:选择32位指令集或64位指令集。
[0015]所述的面向异OS的汇编移植方法,所述步骤4还包括:将所述新目标汇编程序的接口提供给运行于所述目标操作系统上的代码进行调用。
[0016]所述的面向异OS的汇编移植方法,还包括:
[0017]将用于测试所述新目标汇编程序的代码与所述新目标汇编程序进行封装。
[0018]所述的面向异OS的汇编移植方法,还包括:
[0019]根据所述目标操作系统的性质,对所述新目标汇编程序进行优化,以提高所述新目标汇编程序的效率。
[0020]本发明还提出一种面向异OS的汇编器,包括:
[0021]编译模块,用于获取源代码,将所述源代码进行编译,获取源汇编程序;
[0022]格式转化模块,选择目标操作系统,按照所述目标操作系统的汇编格式,将所述源汇编程序转化为符合所述汇编格式的目标汇编程序;
[0023]应用程序二进制接口规范转化模块,用于获取所述目标操作系统的应用程序二进制接口规范,将所述目标汇编程序转化为符合所述应用程序二进制接口规范的新目标汇编程序;
[0024]封装模块,用于面向所述目标操作系统,将所述新目标汇编程序进行封装,以完成汇编转化。
[0025]所述的面向异OS的汇编器,所述编译模块还用于选择32位指令集或64位指令集。
[0026]所述的面向异OS的汇编器,所述封装模块还用于将所述新目标汇编程序的接口提供给运行于所述目标操作系统上的代码进行调用。
[0027]所述的面向异OS的汇编器,还包括:
[0028]测试封装模块,用于将用于测试所述新目标汇编程序的代码与所述新目标汇编程序进彳T封装。
[0029]所述的面向异OS的汇编器,还包括:
[0030]优化模块,用于根据所述目标操作系统的性质,对所述新目标汇编程序进行优化,以提高所述新目标汇编程序的效率。
[0031]由以上方案可知,本发明的优点在于:
[0032]本发明可以满足开发者汇编移植和优化效果传承的需求,降低了开发者将使用过的性能不错的汇编迀移到其他操作系统中的成本,开发者不需要在一个新的系统中重新编译汇编码并重新优化,结合编译器优化或者手动优化的工作,对这些优化后的汇编进行自动的转化移植,可以将相同处理器架构下一种操作系统移动设备中进行优化后的代码的优化效果平滑的转接到相同处理器架构下不同目标操作系统的移动设备中,这可以极大节省开发时间,减小开发者的工作负担,同时提高程序在新系统中的性能。
[0033]本发明的方法是通过对比分析相同处理器不同目标操作系统下的汇编差异(格式差异,ABI规范差异,库调用差异等),建立不同平台间汇编差异的映射,并将映射关系写入本发明异OS汇编器,由异OS汇编器实现汇编差异的自动转化,可以使源操作系统中的汇编可以在目标操作系统中直接运行并不丢失优化效果,本发明还结合目标操作系统的特点进行面向目标系统的汇编优化,并将这些优化写入异OS汇编器并将相应的优化写成优化选项提供给用户进行选择,这样做,即实现了汇编移植,也进行了优化传播,并且提供了面向目标操作系统的优化。
[0034]同时本发明提供的一个异OS汇编器,可以将linux下的生成汇编转换为以Android、1S、Windows操作系统的移动设备上可运行的汇编,使在linux下经过编译器或手动优化的汇编移植到在这些移动设备上直接运行,从而提高开发者效率和程序性能,目前市场上还没有类似的解决方案,本发明具有以下优点:
[0035]克服OS带来的壁皇,经过分析对比相同处理器架构不同操作系统下汇编的差异部分,并考虑ABI不一致问题,本发明建立系统之间的汇编差异的映射,并将在异OS汇编器中实现这些映射的转化,这样源操作系统下编译的汇编,经过本发明的异OS汇编器可以转换成面向不同目标操作系统的可运行的汇编,这样就克服了不同os带来的代码移植的困难;
[0036]益于优化传播,将性能优化平滑传播到新平台,利用本发明的异OS汇编器可以将源操作系统下的代码直接转换为不同目标操作系统下的优化代码,完成优化效果的传播;
[0037]益于优化融合,在性能分析基础上将商用编译器的优势融入现有平台,通过使用异OS汇编器,将源系统中的汇编转化为各目标系统的汇编,并在市场上现有的移动终端上直接运行,本发明可以获取源系统中的汇编在新的系统中的性能测评数据,这可以和在源系统上的汇编性能测评数据进行对比,经过分析可以获知源系统中的编译器哪些优化工作做的不够好,及其中的原因,以此来改进源系统中的编译器优化性能。

【专利附图】

【附图说明】
[0038]图1为面向异OS的汇编器结构图;
[0039]图2为面向异OS的汇编器工作流程图;
[0040]其中附图标记为:
[0041]步骤100为面向异OS的汇编器具体工作流程,包括:
[0042]步骤101/102/103/104/105/106/107/108/109。

【具体实施方式】
[0043]下面结合附图和实施例详细对本发明的【具体实施方式】进行说明。
[0044]以下为本发明的整体流程,如图1所示:
[0045]自动转换源汇编到面向不同操作系统的可运行的汇编。用户可以选择面向32位或者64位指令集将源代码在linux上的交叉编译工具编译为源汇编,再次选择面向的移动设备的目标操作系统,和汇编器提供的针对不同目标操作系统的转换选项进行转换,汇编器会根据用户提供的选项自动生成相应选项下的汇编。针对用户选择的目标操作系统,和汇编器提供的选项,生成可运行的汇编,选择的目标操作系统不同,汇编器选项不同,汇编器生成可执行的不同的汇编。
[0046]面向不同操作系统,汇编器进行汇编层级的优化。本发明的汇编器支持编译器对源代码优化后的汇编转换,同时提供面向目标操作系统的优化,在确保转化后的汇编在目标操作系统上的可运行性的同时,针对不同的操作系统,本发明通过分析对比,修改热区的汇编得到性能的提升,并将修改写入汇编器,提供给用户相应的优化选项,实现汇编器面向异OS的自动优化。不同的操作系统进行不同的优化,这样本发明提供了一个优化选项集。通过使用不同的汇编器优化选项,可以在用户选择的操作系统下得到不同的优化效果,用户可以根据自己程序的特性进行选择,将性能提高最大化。
[0047]以下为本发明的具体步骤,如图2所示:用户首先对移动设备的操作系统和异OS汇编器优化选项进行选择,由异OS汇编器调度选项对应的汇编器模块将源操作系统的汇编转化为目标操作系统能够运行的汇编。这里使用的处理器架构相同,可选的移动设备操作系统有:Android、Wp8、1S ;可选的指令集有:32位指令集和64位指令集。
[0048]执行步骤101,用户选定目标指令集,异OS汇编器生成源汇编。由于32位指令集和64位指令集的汇编指令差异很大,本发明只对具有相同指令集的汇编进行转化,用户根据自己的目标操作系统参数对32位或者64位指令集进行指定,执行步骤102,异OS汇编器调用linux下生成相应指令集汇编的交叉编译工具将源代码编译为相应指令集的源汇编;
[0049]执行步骤103,用户选择目标OS (OS为操作系统,本发明中OS皆代表操作系统),异OS汇编器处理源操作系统与目标操作系统下汇编格式差异,生成目标汇编程序。异OS汇编器内部结构分为分别处理Android、Windows, 1S这三种移动设备操作系统汇编的模块,执行步骤104,平台相关的汇编格式映射。汇编器会对每种目标操作系统生成平台适应的汇编,汇编器通过伪指令、指令、常量、函数名修饰规则等方面建立由源汇编到目标操作系统汇编的转接关系进行自动转接,解决汇编格式差异问题,例如,伪指令的格式差异,比如linux下汇编.cpu、.type等伪指令在1S环境下会报错,那么本发明注释掉这些指令;指令格式的差异,比如linux下汇编bcc、bcs、beq等指令在1S下要转换为b.cc、b.cs、b.eq ;
[0050]执行步骤105,平台相关的ABI映射。处理异OS中ABI (应用程序二进制接口 )规范不一致问题,将目标汇编程序转化为符合所述应用程序二进制接口规范的新目标汇编程序。由于不同操作系统的ABI规范是不一致的,所以在汇编移植的时候,往往需要更加复杂的汇编修改方法来解决这个问题,例如,linux下汇编在存放函数参数的时候用的是x0—x7号寄存器,超出8个参数的函数参数将放在栈上,而在1S环境中,汇编在存放函数参数的时候使用的是x0 — x2号寄存器,超出3个参数的函数参数放在栈上,如果源程序中含可变参数列表的函数,汇编中函数参数分配会出现问题,由linux下的汇编转向1S汇编时,函数原来放在x2-x7号寄存器中的参数会失效,而1S中的汇编除了在x0-x2中读取参数夕卜,还要从栈上读取参数,这样会导致不可预知的后果,往往使程序崩溃,汇编器的解决办法是,对汇编的栈空间进行扩展,给栈腾出存放参数的空间,将1S放在x2-x7号寄存器上的值,依次压入栈中来解决问题;又如,在Linux下的汇编中调用系统函数,不需要进行函数的声明,而在Wp8下使用系统函数,则需要在汇编中插入要使用的函数的声明,例如要使用 bl sprintf,则要对 sprintf 声明 import sprintf ο
[0051 ] 执行步骤106,面向目标平台,进行目标平台适应的代码封装,提供给目标系统的程序可调用的接口调用来使用汇编提供的功能,即将所述新目标汇编程序的接口提供给所述目标操作系统。面向目标操作系统修改完汇编的格式差异和ABI不一致问题之后,只是对源汇编代码中不适合目标操作系统的部分进行替换和删除,以确保源汇编中的指令在目标系统上的正确性,但是直接放到目标操作系统中还不能直接运行,缺少目标系统中的汇编代码做衔接。如果要实现代码的无缝衔接即直接可以在目标系统中运行,本发明还要面向目标系统进行封装,即异OS汇编器在前三个步骤处理过后的汇编中添加目标系统的汇编,使整个汇编文件在目标系统中可以编译通过并正确运行,并向目标系统提供可调用的函数接口,目标系统中的程序可以通过调用接口,使用汇编提供的功能,例如,需要在汇编文件的头部需要加入ARM AREA |.text |,CODE, READONLY, ARM才能使汇编文件在windowsphone下整体编译通过;再如,加EXPORT I ? testiiYAPADXZ声明,以提供char*test ()函数给源码调用。
[0052]执行步骤107,代码优化,性能测试封装,提供性能测评数据,将用于测试所述新目标汇编程序的代码与所述新目标汇编程序进行封装。完成源汇编从linux到目标操作系统汇编的转换和封装之后,目标操作系统可以通过调用接口来使用这段汇编。汇编器提供了针对性能测评的进一步的封装,即汇编器提供对汇编进行性能测试的代码,提供可在目标系统运行的C代码,代码中调用汇编,并嵌入时间测度函数,来测度汇编运行时间,提供给开发者一个可视的汇编程序的性能评估数据,本发明可以利用这一测评数据在不同操作系统上进行对比,同时考虑操作系统和该系统下硬件特性这些因素,给程序性能提供更多的可参考数据,在对商用编译器性能分析的基础上将其优势融入现有平台,例如由一段相同的C代码编译为汇编,通过本发明的异OS汇编器转换为Android、windows phone、和1S下的汇编,结合这些系统的特点,通过改动汇编中不同的地方,测度汇编运行的时间,如果在某个平台下的汇编获得性能提升,则将这些可以带来性能提升的改动写入异OS汇编器实现自动转换,并测试这种改动在本发明的编译器中实现会不会带来性能提升。
[0053]执行步骤109,优化封装,针对目标平台进行迭代优化,提供面向目标平台的优化选项,根据所述目标操作系统的性质,对所述新目标汇编程序进行优化,以提高所述新目标汇编程序的效率,然后执行步骤108,是否具有优化空间,若具有优化空间,则执行步骤107,否则结束操作。为了使移植到不同目标操作系统上的汇编有不错的性能,本发明结合目标系统的特性,对汇编进行优化,并在本发明的异OS汇编器中写入这样的优化的自动实现,并将这些不同的优化的自动实现写成优化选项,在转化汇编的时候用户只需选择相应的优化选项,异OS汇编器就会按照优化选项对应的优化实现在用户转换的汇编中,用户在使用异OS汇编器进行转换的时候,可以在选择目标操作系统的时候,选择相应系统下提供的优化选项生成目标汇编,选择目标系统选项生成平台适应的汇编,而选择优化选项则将汇编按照选项进行优化。对于异OS汇编器的开发者来说,因为有整个的汇编转化工具,可以方便地实现系统间的汇编转换,可以致力于面向目标系统的汇编的性能的改进,而不用为移植这项繁琐的工作所困扰,获得的提升性能的实现又可以写入异OS汇编转化器中,通过这样的迭代,本发明最终可以实现汇编的移植,并使这段汇编获得很好的性能。例如汇编器对较短的代码量的汇编函数直接嵌入到调用点,并将调用者的栈空间进行相应的修改,以使得到的新的函数可以正确运行,用户只需要提供功能参数和代码量的行数参数,汇编器进行自动的识别,并将被调用者的函数嵌入到调用点,这减少了汇编级的函数调用。
[0054]本发明的面向异OS的汇编器包括以下模块:
[0055]编译模块,用于获取源代码,将所述源代码进行编译,获取源汇编程序;
[0056]格式转化模块,选择目标操作系统,按照所述目标操作系统的汇编格式,将所述源汇编程序转化为符合所述汇编格式的目标汇编程序,其中还用于选择32位指令集或64位指令集;
[0057]应用程序二进制接口规范转化模块,用于获取所述目标操作系统的应用程序二进制接口规范,将所述目标汇编程序转化为符合所述应用程序二进制接口规范的新目标汇编程序;
[0058]封装模块,用于面向所述目标操作系统,将所述新目标汇编程序进行封装,以完成汇编转化,其中还用于将所述新目标汇编程序的接口提供给运行于所述目标操作系统上的代码进行调用。
[0059]测试封装模块,用于将用于测试所述新目标汇编程序的代码与所述新目标汇编程序进彳T封装。
[0060]优化模块,用于根据所述目标操作系统的性质,对所述新目标汇编程序进行优化,以提高所述新目标汇编程序的效率。
【权利要求】
1.一种面向异03的汇编移植方法,其特征在于,包括: 步骤1,获取源代码,将所述源代码进行编译,获取源汇编程序; 步骤2,选择目标操作系统,按照所述目标操作系统的汇编格式,将所述源汇编程序转化为符合所述汇编格式的目标汇编程序; 步骤3,获取所述目标操作系统的应用程序二进制接口规范,将所述目标汇编程序转化为符合所述应用程序二进制接口规范的新目标汇编程序; 步骤4,面向所述目标操作系统,将所述新目标汇编程序进行封装,以完成汇编移植。
2.如权利要求1所述的面向异03的汇编移植方法,其特征在于,所述步骤1还包括:选择32位指令集或64位指令集。
3.如权利要求1所述的面向异03的汇编移植方法,其特征在于,所述步骤4还包括:将所述新目标汇编程序的接口提供给运行于所述目标操作系统上的代码进行调用。
4.如权利要求1所述的面向异03的汇编移植方法,其特征在于,还包括: 将用于测试所述新目标汇编程序的代码与所述新目标汇编程序进行封装。
5.如权利要求1所述的面向异03的汇编移植方法,其特征在于,还包括: 根据所述目标操作系统的性质,对所述新目标汇编程序进行优化,以提高所述新目标汇编程序的效率。
6.一种面向异03的汇编器,其特征在于,包括: 编译模块,用于获取源代码,将所述源代码进行编译,获取源汇编程序; 格式转化模块,选择目标操作系统,按照所述目标操作系统的汇编格式,将所述源汇编程序转化为符合所述汇编格式的目标汇编程序; 应用程序二进制接口规范转化模块,用于获取所述目标操作系统的应用程序二进制接口规范,将所述目标汇编程序转化为符合所述应用程序二进制接口规范的新目标汇编程序; 封装模块,用于面向所述目标操作系统,将所述新目标汇编程序进行封装,以完成汇编转化。
7.如权利要求6所述的面向异03的汇编器,其特征在于,所述编译模块还用于选择32位指令集或64位指令集。
8.如权利要求6所述的面向异03的汇编器,其特征在于,所述封装模块还用于将所述新目标汇编程序的接口提供给运行于所述目标操作系统上的代码进行调用。
9.如权利要求6所述的面向异03的汇编器,其特征在于,还包括: 测试封装模块,用于将用于测试所述新目标汇编程序的代码与所述新目标汇编程序进行封装。
10.如权利要求6所述的面向异03的汇编器,其特征在于,还包括: 优化模块,用于根据所述目标操作系统的性质,对所述新目标汇编程序进行优化,以提高所述新目标汇编程序的效率。
【文档编号】G06F9/45GK104503819SQ201510003749
【公开日】2015年4月8日 申请日期:2015年1月5日 优先权日:2015年1月5日
【发明者】吕方, 卢廷玉, 郭磊, 闫晓超, 黄磊, 李星, 刘颖, 付晓丽, 胡丹琪, 王晨曦 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1