指令流压缩、解压缩方法及装置与流程

文档序号:22343807发布日期:2020-09-25 18:15阅读:118来源:国知局
指令流压缩、解压缩方法及装置与流程
本发明涉及计算机
技术领域
,更具体地,涉及一种指令流压缩、解压缩方法及装置。
背景技术
:现有的针对intel64位指令流的压缩算法,主要包括以下步骤:进行指令间的压缩之后,再利用lz(lempel-ziv)压缩算法进行进一步压缩。根据空间局部性原理,一定范围内指令往往只访问同一个地址或者相邻的地址,这些地址之间存在一定的关系。进行指令间压缩的基本思路是对指令流中指令地址部分进行压缩,通过记录偏移地址等方法来达到压缩的目的。指令间压缩的具体过程包括:逐个分析当前指令所访问的指令是否与之前的指令相同或者相邻,若是,则计算当前指令地址与前面相同或者相邻地址的偏移地址,并且用偏移地址与前面指令序号对当前指令的地址部分进行替换。但现有指令流压缩方法存在压缩率不理想的不足。技术实现要素:本发明实施例提供一种指令流压缩、解压缩方法及装置,用以解决或者至少部分地解决现有技术存在的压缩率较低的缺陷。第一方面,本发明实施例提供一种指令流压缩方法,包括:对于待压缩指令流中的每一条指令,根据所述指令中各部分是否存在及长度,生成标志位,作为压缩后的所述指令的第一个字节;对于所述指令中存在的每一部分,对存在的所述部分进行编码,将编码结果作为压缩后的所述指令中存在的所述部分对应的字节,获得进行单指令压缩之后的所述待压缩指令流;根据lzma压缩算法,对进行单指令压缩之后的所述待压缩指令流进行指令间冗余的压缩。优选地,所述根据所述指令中各部分是否存在及长度,生成标志位,作为压缩后的所述指令的第一个字节的具体步骤包括:对于legacyprefix、rexprefix、modrm或sib部分,若所述部分存在,则将所述标志位中所述部分对应的位设置为1;若所述部分不存在,则将所述标志位中所述部分对应的位设置为0;对于opcode部分,根据所述部分的长度和前缀,对所述标志位中所述部分对应的两个位进行设置;对于displacement和immediate部分,若displacement和immediate部分中的任一个存在,则将所述标志位中displacement和immediate部分对应的位设置为1;若displacement和immediate部分均不存在,则将所述标志位中displacement和immediate部分对应的位设置为0。优选地,所述对存在的所述部分进行编码,将编码结果作为压缩后的所述指令中所述部分对应的字节的具体步骤包括:对于legacyprefix部分,对所述legacyprefix部分中存在的组别分别进行编码,生成压缩后的所述指令中所述legacyprefix部分对应的字节中,所述组别对应的位;对于rexprefix部分,对所述rexprefix中的后四位进行编码,生成压缩后的所述指令中所述rexprefix部分对应的字节。优选地,所述对存在的所述部分进行编码,将编码结果作为压缩后的所述指令中所述部分对应的字节的具体步骤包括:对于opcode部分,将所述opcode部分中的后两个字节,作为压缩后的所述指令中所述opcode部分对应的字节。优选地,所述对存在的所述部分进行编码,将编码结果作为压缩后的所述指令中所述部分对应的字节的具体步骤包括:对于displacement和immediate部分,根据游程编码方法,对所述displacement和immediate部分进行编码,生成压缩后的所述指令中所述displacement和immediate部分对应的字节。第二方面,本发明实施例提供一种指令流解压缩方法,包括:根据lzma解压算法,对待解压指令流进行初次解压;对于经过初次解压后的所述待解压指令流中的每一条指令,根据所述指令中的第一个字节,确定解压后的所述指令中各部分是否存在及长度;对于解压后的所述指令中存在的每一部分,对所述指令中所述部分对应的字节进行解码,将解码结果作为解压后的所述指令中的所述部分。第三方面,本发明实施例提供一种指令流压缩装置,包括:标志生成模块,用于对于待压缩指令流中的每一条指令,根据所述指令中各部分是否存在及长度,生成标志位,作为压缩后的所述指令的第一个字节;编码压缩模块,用于对于所述指令中存在的每一部分,对存在的所述部分进行编码,将编码结果作为压缩后的所述指令中存在的所述部分对应的字节,获得进行单指令压缩之后的所述待压缩指令流;lzma压缩模块,用于根据lzma压缩算法,对进行单指令压缩之后的所述待压缩指令流进行指令间冗余的压缩。第四方面,本发明实施例提供一种指令流解压缩装置,包括:lzma解压模块,用于根据lzma解压算法,对待解压指令流进行初次解压;标志读取模块,用于对于经过初次解压后的所述待解压指令流中的每一条指令,根据所述指令中的第一个字节,确定解压后的所述指令中各部分是否存在及长度;解码解压模块,用于对于解压后的所述指令中存在的任一部分,对所述指令中所述部分对应的字节进行解码,将解码结果作为解压后的所述指令中的所述部分。第五方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,执行所述程序时实现如第一方面的各种可能的实现方式中任一种可能的实现方式所提供的指令流压缩方法的步骤,或如第二方面的各种可能的实现方式中任一种可能的实现方式所提供的指令流解压缩方法的步骤。第六方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面的各种可能的实现方式中任一种可能的实现方式所提供的指令流压缩方法的步骤,或如第二方面的各种可能的实现方式中任一种可能的实现方式所提供的指令流解压缩方法的步骤。本发明实施例提供的指令流压缩、解压缩方法及装置,通过考虑指令内部的冗余关系,实现基于标志位推导的指令内部压缩方法,并利用lzma算法实现指令间冗余的压缩,能极大地提升指令流的压缩效果、提高压缩率。进一步地,通过结合指令内部以及指令之间的冗余关系,能进一步提高压缩率。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为根据本发明实施例提供的指令流压缩方法的流程示意图;图2为根据本发明实施例提供的指令流压缩方法的压缩效果示意图;图3为根据本发明实施例提供的指令流解压缩方法的流程示意图;图4为根据本发明实施例提供的指令流压缩装置的结构示意图;图5为根据本发明实施例提供的指令流解压缩装置的结构示意图;图6为根据本发明实施例提供的电子设备的实体结构示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。为了克服现有技术的上述问题,本发明实施例提供一种指令流压缩方法及装置,其发明构思是,针对指令流的压缩算法仅考虑指令间的冗余,压缩率不理想的问题,根据指令格式的规律,利用标志位来编码其中的冗余部分,以达到指令内部压缩的目的,解压时,可以利用这些标志位重新推导出指令内部的冗余信息,且并不破坏指令之间的冗余模式,可以进一步利用lzma压缩算法实现指令间冗余的压缩,从而能够进一步提高压缩率。图1为根据本发明实施例提供的指令流压缩方法的流程示意图。如图1所示,该方法包括:步骤s101、对于待压缩指令流中的每一条指令,根据指令中各部分是否存在及长度,生成标志位,作为压缩后的指令的第一个字节。需要说明的是,本发明实施例提供的指令流压缩方法,尤其适用于对intel64位指令流的压缩。图2为根据本发明实施例提供的指令流压缩方法的压缩效果示意图。intel64位指令主要可以分为7部分,如图2中的上部分所示,依次为legacyprefix、rexprefix、opcode、modrm、sib、displacement和immediate。其中legacyprefix本是32位下的前缀,但是64位下新引入了rex前缀。需要注意的是在32位模式下rex前缀将会被忽略,但是在64位模式下,legacyprefix依然有效,且当legacyprefix与rexprefix冲突的情况下,将以rexprefix为准。legacyprefix:该前缀为可选的,其最多可以选用4个前缀,每个前缀1个字节。该前缀主要可分为4个组,每个组别的详细信息可见表1。表1legacyprefix详细信息rexprefix:rex前缀的取值范围为40h-4fh,二进制格式为“0100wrxb”。其中高4位“0100”固定,低四位为四个标志,分别有不同的功能。其中rex.w是操作数大小的标志位,rex.r则主要用于modr/m的扩展,rex.w可作为sib的扩展位,rex.b可根据rex.r和rex.x分别用于sib,modr/m和opcode的扩展。opcode:opcode是必须存在的部分,可以分别为1个字节,2个字节,以及3个字节。当指令为2字节时,高8位固定为0x0f,而当指令为3个字节时,前两个字节为0x0f3a或者0x0f38。modrm:modrm大小为1个字节,其高两位表示寻址模式(mod),其与r/m可组合成32个寻址模式。而reg/opcode部分为3位,其可与rex.r组合对寄存器进行补充,也可对opcode进行补充。而r/m则可与rex.b组合对寄存器进行扩展。也可与mod组合形成新的寻址模式。sib:sib的大小也为一个字节。sib是对modrm寻址方式的一个补充,由modrm.r/m=100引出,其通过[base+index*scale]来寻址。displacement:该部分表示偏移地址可表示1-4字节,通常与[base+index*8+displacement]配合进行内存寻址。immediate:表示立即数,也可取1-4字节。根据上述intel指令编码规则,本发明实施例可以对任一条指令构建其标志位,如图2中的中部分所示。将指令中的各部分与标志位中的位一一对应,需要注意的是opcode部分可以对应标志位中的两个位,而displacement和immediate两部分则可以对应标志位中的同一个位。上述7个部分的标志位正好可以组成一个ascii码,用1字节来存储,作为压缩后的指令的第一个字节。对于legacyprefix,rexprefix,modrm,sib,以及displacement+immediate这几部分而言,这些标志位分别表示在本指令中,这些指令部分是否存在。对于opcode部分,因为它是指令中必须存在的部分,因此它的标志位可以表示其长度以及相应的编码。步骤s102、对于指令中存在的每一部分,对存在的部分进行编码,将编码结果作为压缩后的指令中存在的部分对应的字节,获得进行单指令压缩之后的所述待压缩指令流。具体地,根据标志位可以确定指令的各部分是否存在。对于指令中的任一部分,若该部分不存在,压缩后的指令中也不存在该部分对应的字节;若该部分存在,则根据该部分中的冗余,继续对其进行编码,减少该部分所占用的字节的数量,达到压缩的目的。通过对每一条指令执行上述步骤,可以实现对每一条指令内部的冗余的压缩,获得进行单指令压缩之后的所述待压缩指令流。步骤s103、根据lzma压缩算法,对进行单指令压缩之后的待压缩指令流进行指令间冗余的压缩。需要说明的是,在不同的指令间,事实上legacyprefix,rexprefix,opcode,modrm,sib这几部分的取值有较大的重复性。显而易见,指令之间的同一部分重复的可能性较高。为了对这些指令间的冗余进行压缩,本发明实施例所采用的方法为在指令内部压缩时,针对指令的各部分进行单独的编码,因此两条指令中编码前相同的部分在编码后依然相同,从而达到保护指令间冗余模式的目的。因此,步骤s102之后,可以根据lzma算法对压缩后的各指令进行指令间的压缩,使得这些指令间的冗余模式可以被压缩算法高效压缩。其中,指令间的以下几部分频繁重复的地方将被有效地进行压缩。1、前缀与操作码:legacyprefix,rexprefix的取值范围较小,而且虽然指令集中的指令十分多,但是平时频繁使用的指令则集中在某一小部分,因此在指令流中opcode部分也集中在常用指令上,这一点与risc指令集的思想类似,因此这些部分的冗余将会被压缩。2、modrm与sib:modrm与sib本身也是指令中的标志位,可用于扩展寄存器,表示寻址方式等,由于常用的寄存器与寻址方式也有限,在不同的指令之间这些标识位也往往会大量重复。3、循环结构:由于空间局部性,例如循环等结构通常会使得指令流中部分指令块呈现十分类似甚至相同的结构。由于lz系列的压缩技术对这种重复模式的压缩效率十分高,因此,本发明实施例也可以利用其中的lzma(lempel-ziv-markovchain-algorithm)压缩技术来协助压缩指令间的冗余信息。需要注意的是,为了能使用lzma算法,本发明实施例在为指令内部各部分编码时,也充分考虑并且实现了对指令间冗余模式的保护。同时也巧妙地设计了标志位,使其能在满足能够表示指令内部冗余信息这一要求的同时,可用ascii码表示,以适用于lzma的压缩。本发明实施例通过考虑指令内部的冗余关系,实现基于标志位推导的指令内部冗余压缩方法,并通过lzma算法实现指令之间冗余关系的压缩,能极大地提升指令流的压缩效果、提高压缩率。基于上述各实施例的内容,根据指令中各部分是否存在及长度,生成标志位,作为压缩后的指令的第一个字节的具体步骤包括:对于legacyprefix、rexprefix、modrm或sib部分,若部分存在,则将标志位中部分对应的位设置为1;若部分不存在,则将标志位中部分对应的位设置为0。具体地,如图2所示,该字节中的第1、2、5、6位分别对应legacyprefix、rexprefix、modrm和sib部分。按照字节中的位从高到低的顺序,该字节中的第1、2、5、6位为1,则表示legacyprefix、rexprefix、modrm、sib部分存在;第1、2、5、6位为0,则表示legacyprefix、rexprefix、modrm、sib部分不存在。对于opcode部分,根据部分的长度和前缀,对标志位中部分对应的两个位进行设置。具体地,如图2所示,opcode部分对应标志位3-4位,这两位表示了其长度以及相应的编码。编码如表2所示,当指令为1,2,3字节时,将分别为其前缀赋予不同的编码,这些编码将储存于第3-4位标志位中。表2opcode(标志位3-4位)若opcode部分的长度为1字节,则可以将标志位中的第3-4位(即opcode部分对应的两个位)设置为00;若opcode部分的长度为2字节,则可以将标志位中的第3-4位设置为01;若opcode部分的长度为3字节,且前两个字节为0x0f3a(即opcode部分中的前缀为0f3a),则可以将标志位中的第3-4位设置为11;若opcode部分的长度为3字节,且前两个字节为0x0f38(即opcode部分中的前缀为0f38),则可以将标志位中的第3-4位设置为10。对于displacement和immediate部分,若displacement和immediate部分中的任一个存在,则将标志位中displacement和immediate部分对应的位设置为1;若displacement和immediate部分均不存在,则将标志位中displacement和immediate部分对应的位设置为0。具体地,如图2所示,该字节中的第7位对应displacement和immediate部分。该字节中的第7位为1,表示displacement部分或immediate部分存在;该字节中的第7位为0,表示displacement部分和immediate部分均不存在。本发明实施例通过考虑指令内部的冗余关系,实现基于标志位推导的压缩方法,随后通过lzma算法实现指令间冗余的压缩,能极大地提升指令流的压缩效果、提高压缩率。基于上述各实施例的内容,对存在的部分进行编码,将编码结果作为压缩后的指令中部分对应的字节的具体步骤包括:对于legacyprefix部分,对legacyprefix部分中存在的组别分别进行编码,生成压缩后的指令中legacyprefix部分对应的字节中,组别对应的位。具体地,legacyprefix的取值与编码如表3所示,可以用7个位来为这些值进行编码,因此存储空间可以从原来的0-4字节降到现在的0-1字节。压缩后的指令中legacyprefix部分对应一个字节,按照字节中的位从高到低的顺序,该字节的第6-7位与legacyprefix部分中的组别一对应,该字节的第3-5位与legacyprefix部分中的组别二对应,该字节的第2位与legacyprefix部分中的组别三对应,该字节的第1位与legacyprefix部分中的组别四对应。表3legacyprefix(独立编码)对于rexprefix部分,对rexprefix中的后四位进行编码,生成压缩后的指令中rexprefix部分对应的字节。具体地,而rexprefix编码则较为特殊,其高4位为固定的0100,因此可以只存储其后四位,将40h-4fh分别编码为0-f,如表4所示。该部分的存储空间将从原来的0/2个字节下降到0/1字节。表4rexprefix(独立编码)取值范围编码40h-4fh0-f本发明实施例通过考虑指令内部的冗余关系,实现基于标志位推导的指令内部冗余压缩方法,随后利用lzma实现指令间冗余的压缩,极大地提升指令流的压缩效果、提高压缩率。基于上述各实施例的内容,对存在的部分进行编码,将编码结果作为压缩后的指令中部分对应的字节的具体步骤包括:对于opcode部分,将opcode部分中的后两个字节,作为压缩后的指令中opcode部分对应的字节。具体地,对于opcode部分,前缀及长度已编码为标志位,因此,只需要直接存储该部分的最后两个字节,作为压缩后的指令中opcode部分对应的字节,存储空间占用从原来的2-6字节可降到固定的2字节。解压时,可通过标志位的3-4位来恢复opcode部分的前缀。本发明实施例通过考虑指令内部的冗余关系,实现基于标志位推导的指令内部冗余压缩方法,随后利用lzma实现指令间冗余的压缩,极大地提升指令流的压缩效果、提高压缩率。基于上述各实施例的内容,对存在的部分进行编码,将编码结果作为压缩后的指令中部分对应的字节的具体步骤包括:对于displacement和immediate部分,根据游程编码方法,对displacement和immediate部分进行编码,生成压缩后的指令中displacement和immediate部分对应的字节。具体地,针对displacement+immediate部分,由于它们在高位通常存在重复多次的“0”和“f”,因此可以利用游程编码来减少这些冗余。由于压缩后这部分的尺寸无法预估,因此可以在该部分前新增一个字节来表示其长度,这时16进制的数字正好可以表示displacement+immediate部分1-16字节的长度。需要说明的是,对于modrm以及sib这两部分,利用标志位可以使它们在该指令不存在这些部分时不占用空间;若这两部分中的任一部分存在,则可以直接存储该部分的字节,作为压缩后的指令中该部分对应的字节。可以理解的是,压缩后的指令中,按照legacyprefix、rexprefix、opcode、modrm、sib、displacement和immediate部分的顺序,每一存在的部分对应的字节,位于上一存在的部分对应的字节之后。本发明实施例通过考虑指令内部的冗余关系,实现基于标志位推导的指令内部冗余压缩方法,随后可使用lzma要算法实现指令间冗余的压缩,能极大地提升指令流的压缩效果、提高压缩率。图3为根据本发明实施例提供的指令流解压缩方法的流程示意图。基于上述各实施例的内容,如图3所示,该方法包括:步骤s301、根据lzma解压算法,对待解压指令流进行初次解压。可以理解的是,本发明实施例提供的指令流解压缩方法,适用于使用本发明上述任一指令流压缩方法实施例提供的指令流压缩方法获得的压缩后的指令流(即待解压指令流)的解压缩。由于待解压指令流是通过在步骤s102之后的lzma算法进行指令间冗余压缩获得的,因此首先利用lzma解压算法实现对待解压指令流的初次解压,恢复指令间的冗余。步骤s302、对于进行初次解压后的待解压指令流中的每一条指令,根据指令中的第一个字节,确定解压后的指令中各部分是否存在及长度。利用lzma解压算法实现初次解压之后,对于经过一次解压的待解压指令流中的每一条指令,根据该指令中的第一个字节,可以确定解压后的指令中,legacyprefix、rexprefix、modrm、sib、displacement和immediate部分是否存在,以及opcode部分的长度。按照字节中的位从高到低的顺序,该字节中的第1、2、5、6位为1,则表示legacyprefix、rexprefix、modrm、sib部分存在;第1、2、5、6位为0,则表示legacyprefix、rexprefix、modrm、sib部分不存在。根据该字节中的第3-4位的值,可以确定opcode部分的长度为1字节、2字节还是3字节,以及长度为3字节时,前缀为0f3a还是0f38。该字节中的第7位为1,表示displacement部分或immediate部分存在;该字节中的第7位为0,表示displacement部分和immediate部分均不存在。步骤s303、对于解压后的指令中存在的每一部分,对指令中部分对应的字节进行解码,将解码结果作为解压后的指令中的部分。具体地,若解压后的指令中legacyprefix部分存在,则可以根据待解压的指令中legacyprefix部分对应的字节的第1-7位,获得解压后的指令中legacyprefix部分的四个组别的前缀是否存在以及具体值,从而获得解压后的指令中的legacyprefix部分。若解压后的指令中rexprefix部分存在,则可以根据待解压的指令中rexprefix部分对应的字节中的编码(0-f),获得解压后的指令中rexprefix部分的低四位(相应地为40h-4fh),高四位用0100补足,从而获得解压后的指令中的rexprefix部分。对于opcode部分,长度和前缀已通过标志位确定,将待解压的指令中opcode部分对应的字节补在前缀之后,即可获得解压后的指令中的opcode部分。若解压后的指令中modrm或sib,则可以直接从待解压的指令中获得modrm或sib对应的字节,作为解压后的指令中的modrm或sib部分。若解压后的指令中displacement部分或immediate部分存在,则可以采用游程编码方法对应的解码方法,对待解压的指令中displacement部分和immediate部分对应的字节进行解码,获得解压后的指令中的displacement部分和immediate部分。本发明实施例通过考虑指令内部的冗余关系,实现基于标志位推导的压缩方法,能极大地提升指令流的压缩效果、提高压缩率。图4为根据本发明实施例提供的指令流压缩装置的结构示意图。基于上述各实施例的内容,如图4所示,该装置包括标志生成模块401、编码压缩模块402和lzma压缩模块403,其中:标志生成模块401,用于对于待压缩指令流中的每一条指令,根据指令中各部分是否存在及长度,生成标志位,作为压缩后的指令的第一个字节;编码压缩模块402,用于对于指令中存在的每一部分,对存在的部分进行编码,将编码结果作为压缩后的指令中存在的部分对应的字节,获得进行单指令压缩之后的待压缩指令流;lzma压缩模块403,用于根据lzma压缩算法,对进行单指令压缩之后的待压缩指令流进行指令间冗余的压缩。具体地,标志生成模块401与编码压缩模块402电连接,编码压缩模块402与lzma压缩模块403电连接。标志生成模块401可以根据intel指令编码规则,可以对每一条指令构建其标志位,如图2中的中部分所示。将指令中的各部分与标志位中的位一一对应,需要注意的是opcode部分可以对应标志位中的两个位,而displacement和immediate两部分则可以对应标志位中的同一个位。对于指令中的每一部分,若该部分不存在,压缩后的指令中也不存在该部分对应的字节;若该部分存在,则编码压缩模块402根据该部分中的冗余,继续对其进行编码,减少该部分所占用的字节的数量,达到压缩的目的。lzma压缩模块403利用lzma算法,压缩指令间的冗余信息,对进行单指令压缩之后的待压缩指令流进行指令间冗余的压缩。本发明实施例提供的指令流压缩装置,用于执行本发明上述各实施例提供的指令流压缩方法,该指令流压缩装置包括的各模块实现相应功能的具体方法和流程详见上述指令流压缩方法的实施例,此处不再赘述。该指令流压缩装置用于前述各实施例的指令流压缩方法。因此,在前述各实施例中的指令流压缩方法中的描述和定义,可以用于本发明实施例中各执行模块的理解。本发明实施例本发明实施例通过考虑指令内部以及指令之间的冗余关系,实现基于标志位推导的指令内部压缩方法,并最终利用lzma实现指令间冗余的压缩,可以极大地提升指令流的压缩效果、提高压缩率。图5为根据本发明实施例提供的指令流解压缩装置的结构示意图。基于上述各实施例的内容,如图5所示,该装置包括lzma解压模块501、标志读取模块502和解码解压模块503,其中:lzma解压模块501,用于根据lzma解压算法,对待解压指令流进行初次解压;标志读取模块502,用于对于经过初次解压后的待解压指令流中的每一条指令,根据指令中的第一个字节,确定解压后的指令中各部分是否存在及长度;解码解压模块503,用于对于解压后的指令中存在的每一部分,对指令中部分对应的字节进行解码,将解码结果作为解压后的指令中的部分。具体地,lzma解压模块501与标志读取模块502电连接,标志读取模块502与解码解压模块503电连接。lzma解压模块501利用lzma解压算法实现对待解压指令流的初次解压,恢复指令间的冗余。对于经过初次解压后的待解压指令流中的每一条指令,标志读取模块502根据该指令中的第一个字节,可以确定解压后的指令中,legacyprefix、rexprefix、modrm、sib、displacement和immediate部分是否存在,以及opcode部分的长度。对于解压后的指令中存在的每一部分,解码解压模块503对指令中该部分对应的字节进行解码,将解码结果作为解压后的指令中的该部分。本发明实施例提供的指令流解压缩装置,用于执行本发明上述各实施例提供的指令流解压缩方法,该指令流解压缩装置包括的各模块实现相应功能的具体方法和流程详见上述指令流解压缩方法的实施例,此处不再赘述。该指令流解压缩装置用于前述各实施例的指令流解压缩方法。因此,在前述各实施例中的指令流解压缩方法中的描述和定义,可以用于本发明实施例中各执行模块的理解。本发明实施例本发明实施例通过考虑指令内部的冗余关系,实现基于标志位推导的压缩方法,能极大地提升指令流的压缩效果、提高压缩率。图6为根据本发明实施例提供的电子设备的实体结构示意图。基于上述实施例的内容,如图6所示,该电子设备可以包括:处理器(processor)601、存储器(memory)602和总线603;其中,处理器601和存储器602通过总线603完成相互间的通信;处理器601用于调用存储在存储器602中并可在处理器601上运行的计算机程序指令,以执行上述各方法实施例所提供的指令流压缩方法,例如包括:对于待压缩指令流中的每一条指令,根据指令中各部分是否存在及长度,生成标志位,作为压缩后的指令的第一个字节;对于指令中存在的每一部分,对部分进行编码,将编码结果作为压缩后的指令中部分对应的字节,获得进行单指令压缩之后的待压缩指令流;根据lzma压缩算法,对进行单指令压缩之后的待压缩指令流进行指令间冗余的压缩;或者执行上述各方法实施例所提供的指令流解压缩方法,例如包括:根据lzma解压算法,对待解压指令流进行初次解压;对于经过初次解压后的待解压指令流中的每一条指令,根据指令中的第一个字节,确定解压后的指令中各部分是否存在及长度;对于解压后的指令中存在的每一部分,对指令中部分对应的字节进行解码,将解码结果作为解压后的指令中的部分。本发明另一实施例公开一种计算机程序产品,计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的指令流压缩方法,例如包括:对于待压缩指令流中的每一条指令,根据指令中各部分是否存在及长度,生成标志位,作为压缩后的指令的第一个字节;对于指令中存在的每一部分,对部分进行编码,将编码结果作为压缩后的指令中部分对应的字节,获得进行单指令压缩之后的待压缩指令流;根据lzma压缩算法,对进行单指令压缩之后的待压缩指令流进行指令间冗余的压缩;或者执行上述各方法实施例所提供的指令流解压缩方法,例如包括:根据lzma解压算法,对待解压指令流进行初次解压;对于经过初次解压后的待解压指令流中的每一条指令,根据指令中的第一个字节,确定解压后的指令中各部分是否存在及长度;对于解压后的指令中存在的每一部分,对指令中部分对应的字节进行解码,将解码结果作为解压后的指令中的部分。此外,上述的存储器602中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。本发明另一实施例提供一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行上述各方法实施例所提供的指令流压缩方法,例如包括:对于待压缩指令流中的每一条指令,根据指令中各部分是否存在及长度,生成标志位,作为压缩后的指令的第一个字节;对于指令中存在的每一部分,对部分进行编码,将编码结果作为压缩后的指令中部分对应的字节,获得进行单指令压缩之后的待压缩指令流;根据lzma压缩算法,对进行单指令压缩之后的待压缩指令流进行指令间冗余的压缩;或者执行上述各方法实施例所提供的指令流解压缩方法,例如包括:根据lzma解压算法,对待解压指令流进行初次解压;对于经过初次解压后的待解压指令流中的每一条指令,根据指令中的第一个字节,确定解压后的指令中各部分是否存在及长度;对于解压后的指令中存在的每一部分,对指令中部分对应的字节进行解码,将解码结果作为解压后的指令中的部分。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行上述各个实施例或者实施例的某些部分的方法。最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1