首页> 中国专利> 一种汇编语言程序的开发方法和装置

一种汇编语言程序的开发方法和装置

摘要

本发明提供了一种汇编语言程序的开发方法和装置,其中的方法具体包括:编写汇编语言程序,其中,使用自定义助记符代替需要用到的寄存器;针对所述汇编语言程序的自定义助记符,为其分配寄存器;根据分配结果,在所述汇编语言程序中将自定义助记符替换为相应的寄存器。本发明能够使得开发人员脱离寄存器的束缚,进而提高工作效率。

著录项

  • 公开/公告号CN101876916A

    专利类型发明专利

  • 公开/公告日2010-11-03

    原文格式PDF

  • 申请/专利号CN201010208542.X

  • 发明设计人 许健;

    申请日2010-06-13

  • 分类号G06F9/45;

  • 代理机构北京润泽恒知识产权代理有限公司;

  • 代理人苏培华

  • 地址 100081 北京市海淀区中关村南大街甲10号银海大厦南706室

  • 入库时间 2023-12-18 00:56:43

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-05-31

    未缴年费专利权终止 IPC(主分类):G06F9/45 授权公告日:20140205 终止日期:20180613 申请日:20100613

    专利权的终止

  • 2014-02-05

    授权

    授权

  • 2010-12-15

    实质审查的生效 IPC(主分类):G06F9/45 申请日:20100613

    实质审查的生效

  • 2010-11-03

    公开

    公开

说明书

技术领域

本发明涉及程序开发技术领域,特别是涉及一种汇编语言程序的开发方法和装置。

背景技术

一条计算机指令通常由两个部分组成:操作码和操作数;其中,操作码可用来规定这条指令完成什么操作,如取数、做加法或输出数据等,操作数则表示这条指令所完成操作的对象,它可以是一个立即数,或者一个数据所在的地址等等。

汇编语言(Assembly Language)是面向机器的程序设计语言;在用汇编语言编写一条指令时,可以用助记符(Memoni)代替操作码,用地址符号(Symbol)代替操作数,故该指令可以有明显的标识,易于理解和记忆;而且,汇编语言程序经汇编生成的可执行文件简短,占用内存少,执行速度快,因而,汇编语言是高效的程序设计语言,在程序开发中起着重要的作用。

在一条指令的操作数用于表示数据所在的地址时,需要用到寄存器寻址,因而,在汇编语言程序中可能需要使用计算机中的各种寄存器,例如,8位寄存器、16为寄存器和32位寄存器等,而这些寄存器在汇编语言程序中通常是以特定的地址符号表示,例如所述地址符号可以为:AH、AL、BH、BL、CH、CL、DH和DL等;现有一种典型汇编语言程序的开发方法可以包括以下步骤:

步骤1、建立一个表格,用来记录时间与寄存器之间的关系,其中,该表格可以是脑中的印象,或者Excel表格;

步骤2、在编写一条指令时,如果需要使用到寄存器,则查询表格并根据约束条件选取寄存器(暂不考虑溢出),并在表格上做标识,以记录该寄存器的值需要保护;进一步,若该指令需要的寄存器的值不再需要保护,则在表格上取消掉对应寄存器的标识;

步骤3、表格切换到下一个时间,复制之前的寄存器标识情况,然后开始编写下一条指令。

可以看出,每编写一条指令,都需要确定寄存器的地址符号,使得开发人员受到严重的寄存器束缚,从而影响开发人员的工作效率。

总之,需要本领域技术人员迫切解决的一个技术问题就是:如何使得开发人员脱离寄存器的束缚,进而提高工作效率。

发明内容

本发明所要解决的技术问题是提供一种汇编语言程序的开发方法和装置,能够使得开发人员脱离寄存器的束缚,进而提高工作效率。

为了解决上述问题,本发明公开了一种汇编语言程序的开发方法,包括:

编写汇编语言程序,其中,使用自定义助记符代替需要用到的寄存器;

针对所述汇编语言程序的自定义助记符,为其分配寄存器;

根据分配结果,在所述汇编语言程序中将自定义助记符替换为相应的寄存器。

优选的,所述针对所述汇编语言程序的自定义助记符,为其分配寄存器的步骤包括:

针对当前处理器,配置寄存器参数和寄存器约束条件;

根据所述寄存器参数和寄存器约束条件,为所述自定义助记符分配寄存器。

优选的,所述寄存器约束条件包括:在函数调用及返回时需要保护和还原的寄存器集合,寄存器如何传递参数及返回值,以及指令可以使用的寄存器集合。

优选的,所述寄存器参数包括寄存器类型和数量。

本发明还公开了一种汇编语言程序的开发装置,包括:

编写模块,用于编写汇编语言程序,其中,使用自定义助记符代替需要用到的寄存器;

分配模块,用于针对所述汇编语言程序的自定义助记符,为其分配寄存器;

替换模块,用于根据分配结果,在所述汇编语言程序中将自定义助记符替换为相应的寄存器。

优选的,所述分配模块包括:

多个配置选项,用于展示当前处理器的寄存器参数和寄存器约束条件选项,供用户选择;

分配单元,用于根据用户选择结果,为所述自定义助记符分配寄存器。

优选的,所述寄存器约束条件包括:在函数调用及返回时需要保护和还原的寄存器集合,寄存器如何传递参数及返回值,以及指令可以使用的寄存器集合。

优选的,所述寄存器参数包括寄存器类型和数量。

与现有技术相比,本发明具有以下优点:

在编写汇编语言程序时,使用自定义助记符代替需要用到的寄存器,而在编写完成后,再针对所述自定义助记符分配寄存器,并根据分配结果,在所述汇编语言程序中将自定义助记符替换为相应的寄存器;因而,相对于现有技术,每编写一条指令,都需要确定意义不明的a0,al,a2,a3等特定的寄存器地址符号,本发明的自定义助记符可以具有丰富的意义,因而,可以在直观易懂的同时,使开发人员脱离寄存器的束缚,有利于提高汇编语言程序的开发效率;

再者,针对不同的处理器具有不同的寄存器参数,以及,不同情况会有不同的寄存器约束条件的情形,本发明可以通过对辅助程序的配置选项进行适当的设置,便可以适应不同的处理器,以及,适应不同的寄存器约束条件,有利于汇编语言程序在指令集相兼容的处理器之间或者不同的开发约束条件之间进行移植。

附图说明

图1是本发明一种汇编语言程序的开发方法实施例的流程图;

图2是本发明一种汇编语言程序的开发装置的结构图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

本实施例可以适用于各种汇编语言,如ARM(Advanced RISC Machines)、DSP(Digital Signal Processor)汇编语言等等。

所有软件,都要翻译成CPU能直接识别的命令,才能由计算机去执行,这种能被CPU直接识别和执行的命令称为指令;基于指令编出的程序称为汇编语言源程序,经汇编后,就变成机器可执行的目标程序;因此,本实施例中的汇编语言程序即是汇编语言源程序。

在实际中,由于DSP具有比较多的寄存器,且这些寄存器大多使用直观名称,例如,a0,a1,a2...aN;r0,r1,...rM等,其中,N,M为自然数;故下面主要以DSP上的指令集为例对本发明进行说明。

一条指令可以用助记符代替操作码,用地址符号代替操作数,以加法指令为例:指令格式:ADD DST,SRC

功能:DST←DST+SRC

操作说明:ADD指令将目的操作数DST与源操作数SRC相加,并将结果存回目的操作数DST;

其中,ADD指令中目的操作数DST的类型可以是寄存器或存储器,源操作数SRC的类型可以是寄存器、存储器或立即数,以下为ADD指令的示例:

ADD AL,20                     ;累加器内容与立即数相加

ADD DX,SI                     ;寄存器内容相加

ADD AX,[BX]                   ;寄存器与存储器内容相加

ADD DATA[DI],AL               ;存储器内容与寄存器相加

ADD BYTEPTR[BP][SI],50H       ;存储器内容与立即数相加

可以看出,在编写过程中,需要用到各种寄存器,如AL(累加器低8位,Accumulator Low),DX(数据寄存器,Data),SI(源变址寄存器,Source Index),AX(累加器,Accumulator)等;而这些寄存器通常以特定的地址符号表示,导致人们难以阅读汇编语言程序,从而不利于开发和维护。

以ADD AL,20指令为例,在编写时,如果需要使用到寄存器,现有技术还需要进行寄存器的分配工作:也即,查询表格并根据约束条件选取寄存器AL,并在表格上做标识,以记录该寄存器AL的值需要保护。

如果在编写过程中,不为目的操作数分配寄存器,而是采用一个用户易读的自定义助记符(例如,采用SquareTemp代表临时面积)来描述它该目的操作数,那么,可以在程序编写完成后为每一个自定义助记符分配寄存器。

本专利的发明人注意到了这一点,因而创造性地提出了本发明实施例的核心构思之一,即在编写汇编语言程序时,使用自定义助记符代替需要用到的寄存器,而在编写完成后,再针对所述自定义助记符分配寄存器,并根据分配结果,在所述汇编语言程序中将自定义助记符替换为相应的寄存器;相对于现有技术,每编写一条指令,都需要确定寄存器的地址符号,且所述地址符号导致开发人员难以阅读的情形,由于可以赋予自定义助记符丰富的意义,且直观易读,因此,开发人员可以在脱离寄存器的情况下,进行汇编语言程序的开发,从而提高现有汇编语言程序的开发效率。

参照图1,示出了本发明一种汇编语言程序的开发方法实施例的流程图,具体可以包括:

步骤101、编写汇编语言程序,其中,使用自定义助记符代替需要用到的寄存器;

在实际中,采用各种字符来创建所述自定义助记符;所述字符可以是计算机中使用的字母、数字、字和符号等;可以采用英文或者中文拼音。

例如,对于某个需要用到寄存器的目的操作数,其用于代表矩形面积,则可以采用Square,mianji等等;又如,假设两个操作数分别用于代表线段的两个端点,则它们的自定义助记符可以是LinePointl和LinePoint2,或者,duandianl和duandian2等等。

可以理解,本领域技术人员可以根据实际情况,赋予自定义助记符丰富的意义,本发明对此不加以限制。

步骤102、针对所述汇编语言程序的自定义助记符,为其分配寄存器;

例如,可以基于记录时间与寄存器之间关系的表格,来执行上述分配操作;当然,本领域技术人员可以根据需要,采用其它分配算法,来为自定义助记符分配寄存器,本发明对此不加以限制。

不同的处理器(CPU)可能具有不同的寄存器参数,其中,所述寄存器参数可以包括寄存器类型及数量等;所述寄存器类型可以包括AX(累加器,Accumulator),RX(地址寄存器,Address)等等;相应地,所述寄存器数量则代表累加器及地址寄存器的数量。

例如,处理器1具有5个寄存器,为a0-a4,而处理器2则具有10个寄存器,为a0-a9。

这样,采用现有技术,如果针对处理器1和处理器2编写实现同样功能的汇编语言程序,则需要编写两次;也即,基于现有技术开发的汇编语言程序依赖于具体的处理器,不能通用,也不能在不同处理器之间移植。

针对上述情形,在本发明的一种优选实施例中,本步骤可以进一步包括以下子步骤:

子步骤A1、针对当前处理器,配置寄存器参数和寄存器约束条件;

子步骤A2、根据所述寄存器参数和寄存器约束条件,为所述自定义助记符分配寄存器。

在实际中,可开发或者使用已有的汇编开发辅助程序,该辅助程序对于不同的处理器可以有不同的配置选项,以适应不同的寄存器参数和寄存器约束条件;另外,在执行所述分配工作时,该辅助程序可分析所述汇编语言程序的每一个自定义助记符(例如LinePointl),并为其分配寄存器。

例如,所述寄存器约束条件可以包括:在函数调用及返回时,需要保护和还原的寄存器集合,寄存器如何传递参数及返回值,以及指令可以使用的寄存器集合等等。

即使对于同一个处理器,不同情况也可能会有不同的寄存器约束条件;本优选实施例通过对辅助程序配置选项进行适当的设置,即可以适应不同的处理器,适应不同的寄存器约束条件,有利于在指令集相兼容的处理器之间或者不同的开发约束条件之间进行移植。

步骤103、根据分配结果,在所述汇编语言程序中将自定义助记符替换为相应的寄存器。

在实际中,可按照辅助程序给出的分配结果,替换原汇编语言程序中对应的自定义助记符部分。

为使本领域技术人员更好地理解本发明,以下以一个汇编语言程序的开发过程为例进行说明,所述开发过程具体可以包括:

步骤S1、编写该汇编语言程序,其中,该汇编语言程序的代码中使用UsedForMpy(乘数),SquareTemp(临时平方)、SquareSum(平方和),CubeTemp(临时立方),CubeSum(立方和)等自定义助记符,所述代码具体可以包括:

;下段代码之前用到了UsedForMpy,SquareSum,CubeSum

mpy UsedForMpy,UsedForMpy,SquareTemp  ;SquareTemp=UsedForMpy*UsedForMpy

add SquareTemp,SquareSum    ;SquareSum=SquareSum+SquareTemp

mpy UsedForMpy,SquareTemp,CubeTemp  ;CubeTemp=UsedForMpy*SquareTemp

add CubeTemp,CubeSum    ;CubeSum=CubeSum*CubeTemp

inc UsedForMpy  ;UsedForMpy=UsedForMpy+1

;上段代码之后用到了UsedForMpy,SquareSum,CubeSum

其中,“;”为注释标记,“;”后面的内容为程序注释,其目的在于说明程序,给自己或其他程序开发人员在阅读程序时提供帮助,使程序更容易理解,也就是增强程序代码的可读性,其对程序的编译和运行不起作用。

另外,不同的程序开发环境下可以使用不同的注释标记,本发明对此不加以限制。

步骤S2、使用辅助程序为其中的自定义助记符分配寄存器,假设分配结果为:

UsedForMpy→a0

SquareTemp→a3

SquareSum→a1

CubeTemp→a3

CubeSum→a2

其中,所述a0-a3为当前处理器中的寄存器地址符号,“→”符号代表自定义助记符到寄存器地址符号的映射关系;

步骤S3、根据分配结果,对所述汇编语言程序中自定义助记符做对应的替换,得到最终的开发结果:

mpy a0,a0,a3

add a3,a1

mpy a0,a3,a3

add a3,a2

inc a0

因此,本发明的汇编语言程序开发方法可以具有如下优点:

1、相对于意义不明的a0,al,a2,a3等特定的寄存器地址符号,本发明的自定义助记符可以具有丰富的意义,因而,可以在直观易懂的同时,使开发人员脱离寄存器的束缚,有利于汇编语言程序的开发和维护;

2、针对不同的处理器具有不同的寄存器数量,以及,不同情况会有不同的寄存器约束条件的情形,本发明可以通过对辅助程序的配置选项进行适当的设置,便可以适应不同的处理器,适应不同的寄存器约束条件,有利于在指令集相兼容的处理器之间或者不同的开发约束条件之间进行移植。

以上主要对DSP上的指令集开发进行了详细介绍,可以理解,本发明不局限于DSP,例如,还可以应用于ARM等其它处理器。

参照图2,示出了本发明一种汇编语言程序的开发装置的结构图,具体可以包括:

编写模块201,用于编写汇编语言程序,其中,使用自定义助记符代替需要用到的寄存器;

分配模块202,用于针对所述汇编语言程序的自定义助记符,为其分配寄存器;

替换模块203,用于根据分配结果,在所述汇编语言程序中将自定义助记符替换为相应的寄存器。

针对不同的处理器具有不同的寄存器数量,以及,不同情况会有不同的寄存器约束条件的情形,在本发明的一种优选实施例中,所述分配模块202可以进一步包括:

多个配置选项B1,用于展示当前处理器的寄存器参数和寄存器约束条件选项,供用户选择;

分配单元B2,用于根据用户选择结果,为所述自定义助记符分配寄存器。

在实际中,所述寄存器约束条件可以包括:在函数调用及返回时需要保护和还原的寄存器集合,寄存器如何传递参数及返回值,以及指令可以使用的寄存器集合,等等;所述寄存器参数可以包括寄存器类型和数量等。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上对本发明所提供的一种汇编语言程序的开发方法和装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号