CN111708574A - 指令流压缩、解压缩方法及装置 - Google Patents
指令流压缩、解压缩方法及装置 Download PDFInfo
- Publication number
- CN111708574A CN111708574A CN202010470472.9A CN202010470472A CN111708574A CN 111708574 A CN111708574 A CN 111708574A CN 202010470472 A CN202010470472 A CN 202010470472A CN 111708574 A CN111708574 A CN 111708574A
- Authority
- CN
- China
- Prior art keywords
- instruction
- compression
- compressed
- byte
- decompressed
- 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
- 230000006835 compression Effects 0.000 title claims abstract description 137
- 238000007906 compression Methods 0.000 title claims abstract description 137
- 238000000034 method Methods 0.000 title claims abstract description 79
- 230000006837 decompression Effects 0.000 title claims description 56
- 238000006073 displacement reaction Methods 0.000 claims description 41
- 238000004590 computer program Methods 0.000 claims description 10
- 230000000694 effects Effects 0.000 abstract description 12
- 238000009795 derivation Methods 0.000 abstract description 10
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 3
- 230000007547 defect Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000003252 repetitive effect Effects 0.000 description 2
- 239000013589 supplement Substances 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30178—Runtime instruction translation, e.g. macros of compressed or encrypted instructions
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明实施例提供一种指令流压缩、解压缩方法及装置。其中,压缩方法包括:对于待压缩指令流中的任一条指令,根据指令中各部分是否存在及长度,生成标志位,作为压缩后的指令的第一个字节;对于指令中存在的任一部分,对部分进行编码,将编码结果作为压缩后的指令中部分对应的字节,获得进行单指令压缩之后的待压缩指令流;根据LZMA压缩算法,对进行单指令压缩之后的待压缩指令流进行指令间冗余的压缩。本发明实施例通过考虑指令内部以及指令之间的冗余关系,实现基于标志位推导的压缩方法,能极大地提升指令流的压缩效果、提高压缩率。
Description
技术领域
本发明涉及计算机技术领域,更具体地,涉及一种指令流压缩、解压缩方法及装置。
背景技术
现有的针对Intel 64位指令流的压缩算法,主要包括以下步骤:进行指令间的压缩之后,再利用LZ(Lempel-Ziv)压缩算法进行进一步压缩。
根据空间局部性原理,一定范围内指令往往只访问同一个地址或者相邻的地址,这些地址之间存在一定的关系。进行指令间压缩的基本思路是对指令流中指令地址部分进行压缩,通过记录偏移地址等方法来达到压缩的目的。指令间压缩的具体过程包括:逐个分析当前指令所访问的指令是否与之前的指令相同或者相邻,若是,则计算当前指令地址与前面相同或者相邻地址的偏移地址,并且用偏移地址与前面指令序号对当前指令的地址部分进行替换。
但现有指令流压缩方法存在压缩率不理想的不足。
发明内容
本发明实施例提供一种指令流压缩、解压缩方法及装置,用以解决或者至少部分地解决现有技术存在的压缩率较低的缺陷。
第一方面,本发明实施例提供一种指令流压缩方法,包括:
对于待压缩指令流中的每一条指令,根据所述指令中各部分是否存在及长度,生成标志位,作为压缩后的所述指令的第一个字节;
对于所述指令中存在的每一部分,对存在的所述部分进行编码,将编码结果作为压缩后的所述指令中存在的所述部分对应的字节,获得进行单指令压缩之后的所述待压缩指令流;
根据LZMA压缩算法,对进行单指令压缩之后的所述待压缩指令流进行指令间冗余的压缩。
优选地,所述根据所述指令中各部分是否存在及长度,生成标志位,作为压缩后的所述指令的第一个字节的具体步骤包括:
对于Legacy Prefix、REX prefix、ModRM或SIB部分,若所述部分存在,则将所述标志位中所述部分对应的位设置为1;若所述部分不存在,则将所述标志位中所述部分对应的位设置为0;
对于Opcode部分,根据所述部分的长度和前缀,对所述标志位中所述部分对应的两个位进行设置;
对于Displacement和Immediate部分,若Displacement和Immediate部分中的任一个存在,则将所述标志位中Displacement和Immediate部分对应的位设置为1;若Displacement和Immediate部分均不存在,则将所述标志位中Displacement和Immediate部分对应的位设置为0。
优选地,所述对存在的所述部分进行编码,将编码结果作为压缩后的所述指令中所述部分对应的字节的具体步骤包括:
对于Legacy Prefix部分,对所述Legacy Prefix部分中存在的组别分别进行编码,生成压缩后的所述指令中所述Legacy Prefix部分对应的字节中,所述组别对应的位;
对于REX prefix部分,对所述REX prefix中的后四位进行编码,生成压缩后的所述指令中所述REX prefix部分对应的字节。
优选地,所述对存在的所述部分进行编码,将编码结果作为压缩后的所述指令中所述部分对应的字节的具体步骤包括:
对于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、对于待压缩指令流中的每一条指令,根据指令中各部分是否存在及长度,生成标志位,作为压缩后的指令的第一个字节。
需要说明的是,本发明实施例提供的指令流压缩方法,尤其适用于对Intel 64位指令流的压缩。
图2为根据本发明实施例提供的指令流压缩方法的压缩效果示意图。Intel 64位指令主要可以分为7部分,如图2中的上部分所示,依次为Legacy Prefix、REX prefix、Opcode、ModRM、SIB、Displacement和Immediate。其中Legacy Prefix本是32位下的前缀,但是64位下新引入了REX前缀。需要注意的是在32位模式下REX前缀将会被忽略,但是在64位模式下,Legacy Prefix依然有效,且当Legacy Prefix与REX prefix冲突的情况下,将以REX prefix为准。
Legacy Prefix:该前缀为可选的,其最多可以选用4个前缀,每个前缀1个字节。该前缀主要可分为4个组,每个组别的详细信息可见表1。
表1 Legacy Prefix详细信息
REX prefix: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个字节时,前两个字节为0x0F 3A或者0x0F 38。
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字节来存储,作为压缩后的指令的第一个字节。
对于Legacy Prefix,REX Prefix,ModRM,SIB,以及Displacement+Immediate这几部分而言,这些标志位分别表示在本指令中,这些指令部分是否存在。
对于Opcode部分,因为它是指令中必须存在的部分,因此它的标志位可以表示其长度以及相应的编码。
步骤S102、对于指令中存在的每一部分,对存在的部分进行编码,将编码结果作为压缩后的指令中存在的部分对应的字节,获得进行单指令压缩之后的所述待压缩指令流。
具体地,根据标志位可以确定指令的各部分是否存在。
对于指令中的任一部分,若该部分不存在,压缩后的指令中也不存在该部分对应的字节;若该部分存在,则根据该部分中的冗余,继续对其进行编码,减少该部分所占用的字节的数量,达到压缩的目的。
通过对每一条指令执行上述步骤,可以实现对每一条指令内部的冗余的压缩,获得进行单指令压缩之后的所述待压缩指令流。
步骤S103、根据LZMA压缩算法,对进行单指令压缩之后的待压缩指令流进行指令间冗余的压缩。
需要说明的是,在不同的指令间,事实上Legacy Prefix,REX Prefix,Opcode,ModRM,SIB这几部分的取值有较大的重复性。显而易见,指令之间的同一部分重复的可能性较高。为了对这些指令间的冗余进行压缩,本发明实施例所采用的方法为在指令内部压缩时,针对指令的各部分进行单独的编码,因此两条指令中编码前相同的部分在编码后依然相同,从而达到保护指令间冗余模式的目的。
因此,步骤S102之后,可以根据LZMA算法对压缩后的各指令进行指令间的压缩,使得这些指令间的冗余模式可以被压缩算法高效压缩。
其中,指令间的以下几部分频繁重复的地方将被有效地进行压缩。
1、前缀与操作码:Legacy Prefix,REX Prefix的取值范围较小,而且虽然指令集中的指令十分多,但是平时频繁使用的指令则集中在某一小部分,因此在指令流中Opcode部分也集中在常用指令上,这一点与RISC指令集的思想类似,因此这些部分的冗余将会被压缩。
2、ModRM与SIB:ModRM与SIB本身也是指令中的标志位,可用于扩展寄存器,表示寻址方式等,由于常用的寄存器与寻址方式也有限,在不同的指令之间这些标识位也往往会大量重复。
3、循环结构:由于空间局部性,例如循环等结构通常会使得指令流中部分指令块呈现十分类似甚至相同的结构。
由于LZ系列的压缩技术对这种重复模式的压缩效率十分高,因此,本发明实施例也可以利用其中的LZMA(Lempel-Ziv-Markov chain-Algorithm)压缩技术来协助压缩指令间的冗余信息。需要注意的是,为了能使用LZMA算法,本发明实施例在为指令内部各部分编码时,也充分考虑并且实现了对指令间冗余模式的保护。同时也巧妙地设计了标志位,使其能在满足能够表示指令内部冗余信息这一要求的同时,可用ASCII码表示,以适用于LZMA的压缩。
本发明实施例通过考虑指令内部的冗余关系,实现基于标志位推导的指令内部冗余压缩方法,并通过LZMA算法实现指令之间冗余关系的压缩,能极大地提升指令流的压缩效果、提高压缩率。
基于上述各实施例的内容,根据指令中各部分是否存在及长度,生成标志位,作为压缩后的指令的第一个字节的具体步骤包括:对于Legacy Prefix、REX prefix、ModRM或SIB部分,若部分存在,则将标志位中部分对应的位设置为1;若部分不存在,则将标志位中部分对应的位设置为0。
具体地,如图2所示,该字节中的第1、2、5、6位分别对应Legacy Prefix、REXprefix、ModRM和SIB部分。
按照字节中的位从高到低的顺序,该字节中的第1、2、5、6位为1,则表示LegacyPrefix、REX prefix、ModRM、SIB部分存在;第1、2、5、6位为0,则表示Legacy Prefix、REXprefix、ModRM、SIB部分不存在。
对于Opcode部分,根据部分的长度和前缀,对标志位中部分对应的两个位进行设置。
具体地,如图2所示,Opcode部分对应标志位3-4位,这两位表示了其长度以及相应的编码。编码如表2所示,当指令为1,2,3字节时,将分别为其前缀赋予不同的编码,这些编码将储存于第3-4位标志位中。
表2 Opcode(标志位3-4位)
若Opcode部分的长度为1字节,则可以将标志位中的第3-4位(即Opcode部分对应的两个位)设置为00;若Opcode部分的长度为2字节,则可以将标志位中的第3-4位设置为01;若Opcode部分的长度为3字节,且前两个字节为0x0F 3A(即Opcode部分中的前缀为0F3A),则可以将标志位中的第3-4位设置为11;若Opcode部分的长度为3字节,且前两个字节为0x0F 38(即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算法实现指令间冗余的压缩,能极大地提升指令流的压缩效果、提高压缩率。
基于上述各实施例的内容,对存在的部分进行编码,将编码结果作为压缩后的指令中部分对应的字节的具体步骤包括:对于Legacy Prefix部分,对Legacy Prefix部分中存在的组别分别进行编码,生成压缩后的指令中Legacy Prefix部分对应的字节中,组别对应的位。
具体地,Legacy Prefix的取值与编码如表3所示,可以用7个位来为这些值进行编码,因此存储空间可以从原来的0-4字节降到现在的0-1字节。
压缩后的指令中Legacy Prefix部分对应一个字节,按照字节中的位从高到低的顺序,该字节的第6-7位与Legacy Prefix部分中的组别一对应,该字节的第3-5位与LegacyPrefix部分中的组别二对应,该字节的第2位与Legacy Prefix部分中的组别三对应,该字节的第1位与Legacy Prefix部分中的组别四对应。
表3 Legacy prefix(独立编码)
对于REX prefix部分,对REX prefix中的后四位进行编码,生成压缩后的指令中REX prefix部分对应的字节。
具体地,而REX Prefix编码则较为特殊,其高4位为固定的0100,因此可以只存储其后四位,将40H-4FH分别编码为0-F,如表4所示。该部分的存储空间将从原来的0/2个字节下降到0/1字节。
表4 REX pref ix(独立编码)
取值范围 | 编码 |
40H-4FH | 0-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这两部分,利用标志位可以使它们在该指令不存在这些部分时不占用空间;若这两部分中的任一部分存在,则可以直接存储该部分的字节,作为压缩后的指令中该部分对应的字节。
可以理解的是,压缩后的指令中,按照Legacy Prefix、REX prefix、Opcode、ModRM、SIB、Displacement和Immediate部分的顺序,每一存在的部分对应的字节,位于上一存在的部分对应的字节之后。
本发明实施例通过考虑指令内部的冗余关系,实现基于标志位推导的指令内部冗余压缩方法,随后可使用LZMA要算法实现指令间冗余的压缩,能极大地提升指令流的压缩效果、提高压缩率。
图3为根据本发明实施例提供的指令流解压缩方法的流程示意图。基于上述各实施例的内容,如图3所示,该方法包括:步骤S301、根据LZMA解压算法,对待解压指令流进行初次解压。
可以理解的是,本发明实施例提供的指令流解压缩方法,适用于使用本发明上述任一指令流压缩方法实施例提供的指令流压缩方法获得的压缩后的指令流(即待解压指令流)的解压缩。
由于待解压指令流是通过在步骤S102之后的LZMA算法进行指令间冗余压缩获得的,因此首先利用LZMA解压算法实现对待解压指令流的初次解压,恢复指令间的冗余。
步骤S302、对于进行初次解压后的待解压指令流中的每一条指令,根据指令中的第一个字节,确定解压后的指令中各部分是否存在及长度。
利用LZMA解压算法实现初次解压之后,对于经过一次解压的待解压指令流中的每一条指令,根据该指令中的第一个字节,可以确定解压后的指令中,Legacy Prefix、REXprefix、ModRM、SIB、Displacement和Immediate部分是否存在,以及Opcode部分的长度。
按照字节中的位从高到低的顺序,该字节中的第1、2、5、6位为1,则表示LegacyPrefix、REX prefix、ModRM、SIB部分存在;第1、2、5、6位为0,则表示Legacy Prefix、REXprefix、ModRM、SIB部分不存在。
根据该字节中的第3-4位的值,可以确定Opcode部分的长度为1字节、2字节还是3字节,以及长度为3字节时,前缀为0F3A还是0F38。
该字节中的第7位为1,表示Displacement部分或Immediate部分存在;该字节中的第7位为0,表示Displacement部分和Immediate部分均不存在。
步骤S303、对于解压后的指令中存在的每一部分,对指令中部分对应的字节进行解码,将解码结果作为解压后的指令中的部分。
具体地,若解压后的指令中Legacy Prefix部分存在,则可以根据待解压的指令中Legacy Prefix部分对应的字节的第1-7位,获得解压后的指令中Legacy Prefix部分的四个组别的前缀是否存在以及具体值,从而获得解压后的指令中的Legacy Prefix部分。
若解压后的指令中REX prefix部分存在,则可以根据待解压的指令中REX prefix部分对应的字节中的编码(0-F),获得解压后的指令中REX prefix部分的低四位(相应地为40H-4FH),高四位用0100补足,从而获得解压后的指令中的REX prefix部分。
对于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根据该指令中的第一个字节,可以确定解压后的指令中,Legacy Prefix、REX prefix、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-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明另一实施例提供一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行上述各方法实施例所提供的指令流压缩方法,例如包括:对于待压缩指令流中的每一条指令,根据指令中各部分是否存在及长度,生成标志位,作为压缩后的指令的第一个字节;对于指令中存在的每一部分,对部分进行编码,将编码结果作为压缩后的指令中部分对应的字节,获得进行单指令压缩之后的待压缩指令流;根据LZMA压缩算法,对进行单指令压缩之后的待压缩指令流进行指令间冗余的压缩;或者执行上述各方法实施例所提供的指令流解压缩方法,例如包括:根据LZMA解压算法,对待解压指令流进行初次解压;对于经过初次解压后的待解压指令流中的每一条指令,根据指令中的第一个字节,确定解压后的指令中各部分是否存在及长度;对于解压后的指令中存在的每一部分,对指令中部分对应的字节进行解码,将解码结果作为解压后的指令中的部分。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行上述各个实施例或者实施例的某些部分的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种指令流压缩方法,其特征在于,包括:
对于待压缩指令流中的每一条指令,根据所述指令中各部分是否存在及长度,生成标志位,作为压缩后的所述指令的第一个字节;
对于所述指令中存在的每一部分,对存在的所述部分进行编码,将编码结果作为压缩后的所述指令中所述存在的部分对应的字节,获得进行单指令压缩之后的所述待压缩指令流;
根据LZMA压缩算法,对进行单指令压缩之后的所述待压缩指令流进行指令间冗余的压缩。
2.根据权利要求1所述的指令流压缩方法,其特征在于,所述根据所述指令中各部分是否存在及长度,生成标志位,作为压缩后的所述指令的第一个字节的具体步骤包括:
对于Legacy Prefix、REX prefix、ModRM或SIB部分,若所述部分存在,则将所述标志位中所述部分对应的位设置为1;若所述部分不存在,则将所述标志位中所述部分对应的位设置为0;
对于Opcode部分,根据所述部分的长度和前缀,对所述标志位中所述部分对应的两个位进行设置;
对于Displacement和Immediate部分,若Displacement和Immediate部分中的任一个存在,则将所述标志位中Displacement和Immediate部分对应的位设置为1;若Displacement和Immediate部分均不存在,则将所述标志位中Displacement和Immediate部分对应的位设置为0。
3.根据权利要求1所述的指令流压缩方法,其特征在于,所述对存在的所述部分进行编码,将编码结果作为压缩后的所述指令中所述部分对应的字节的具体步骤包括:
对于Legacy Prefix部分,对所述Legacy Prefix部分中存在的组别分别进行编码,生成压缩后的所述指令中所述Legacy Prefix部分对应的字节中,所述组别对应的位;
对于REX prefix部分,对所述REX prefix中的后四位进行编码,生成压缩后的所述指令中所述REX prefix部分对应的字节。
4.根据权利要求1所述的指令流压缩方法,其特征在于,所述对存在的所述部分进行编码,将编码结果作为压缩后的所述指令中所述部分对应的字节的具体步骤包括:
对于Opcode部分,将所述Opcode部分中的后两个字节,作为压缩后的所述指令中所述Opcode部分对应的字节。
5.根据权利要求1所述的指令流压缩方法,其特征在于,所述对存在的所述部分进行编码,将编码结果作为压缩后的所述指令中所述部分对应的字节的具体步骤包括:
对于Displacement和Immediate部分,根据游程编码方法,对所述Displacement和Immediate部分进行编码,生成压缩后的所述指令中所述Displacement和Immediate部分对应的字节。
6.一种指令流解压缩方法,其特征在于,包括:
根据LZMA解压算法,对待解压指令流进行初次解压;
对于经过初次解压后的所述待解压指令流中的每一条指令,根据所述指令中的第一个字节,确定解压后的所述指令中各部分是否存在及长度;
对于解压后的所述指令中存在的每一部分,对所述指令中所述部分对应的字节进行解码,将解码结果作为解压后的所述指令中的所述部分。
7.一种指令流压缩装置,其特征在于,包括:
标志生成模块,用于对于待压缩指令流中的每一条指令,根据所述指令中各部分是否存在及长度,生成标志位,作为压缩后的所述指令的第一个字节;
编码压缩模块,用于对于所述指令中存在的每一部分,对存在的所述部分进行编码,将编码结果作为压缩后的所述指令中存在的所述部分对应的字节,获得进行单指令压缩之后的所述待压缩指令流;
LZMA压缩模块,用于根据LZMA压缩算法,对进行单指令压缩之后的所述待压缩指令流进行指令间冗余的压缩。
8.一种指令流解压缩装置,其特征在于,包括:
LZMA解压模块,用于根据LZMA解压算法,对待解压指令流进行初次解压;
标志读取模块,用于对于经过初次解压后的所述待解压指令流中的每一条指令,根据所述指令中的第一个字节,确定解压后的所述指令中各部分是否存在及长度;
解码解压模块,用于对于解压后的所述指令中存在的每一部分,对所述指令中所述部分对应的字节进行解码,将解码结果作为解压后的所述指令中的所述部分。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至5任一所述的指令流压缩方法的步骤或如权利要求6所述的指令流解压缩方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求至1至5任一所述的指令流压缩方法的步骤如权利要求6所述的指令流解压缩方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010470472.9A CN111708574B (zh) | 2020-05-28 | 2020-05-28 | 指令流压缩、解压缩方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010470472.9A CN111708574B (zh) | 2020-05-28 | 2020-05-28 | 指令流压缩、解压缩方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111708574A true CN111708574A (zh) | 2020-09-25 |
CN111708574B CN111708574B (zh) | 2023-03-31 |
Family
ID=72537035
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010470472.9A Active CN111708574B (zh) | 2020-05-28 | 2020-05-28 | 指令流压缩、解压缩方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111708574B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111124495A (zh) * | 2019-12-16 | 2020-05-08 | 海光信息技术有限公司 | 一种数据处理方法、解码电路及处理器 |
CN112165588A (zh) * | 2020-09-28 | 2021-01-01 | 成都微光集电科技有限公司 | 屏幕叠加显示系统和方法、图片压缩方法 |
CN114238250A (zh) * | 2021-11-03 | 2022-03-25 | 奇安信科技集团股份有限公司 | 程序文件压缩方法、装置及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030229709A1 (en) * | 2002-06-05 | 2003-12-11 | Microsoft Corporation | Method and system for compressing program code and interpreting compressed program code |
CN101292429A (zh) * | 2005-11-18 | 2008-10-22 | 英特尔公司 | 使用多个马尔可夫链进行压缩 |
CN110990358A (zh) * | 2019-09-30 | 2020-04-10 | 咪咕文化科技有限公司 | 一种解压缩方法、电子设备及计算机可读存储介质 |
-
2020
- 2020-05-28 CN CN202010470472.9A patent/CN111708574B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030229709A1 (en) * | 2002-06-05 | 2003-12-11 | Microsoft Corporation | Method and system for compressing program code and interpreting compressed program code |
CN101292429A (zh) * | 2005-11-18 | 2008-10-22 | 英特尔公司 | 使用多个马尔可夫链进行压缩 |
CN110990358A (zh) * | 2019-09-30 | 2020-04-10 | 咪咕文化科技有限公司 | 一种解压缩方法、电子设备及计算机可读存储介质 |
Non-Patent Citations (1)
Title |
---|
张瑞峰等: "一种改进算法的低功耗嵌入式系统代码压缩设计", 《微电子学与计算机》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111124495A (zh) * | 2019-12-16 | 2020-05-08 | 海光信息技术有限公司 | 一种数据处理方法、解码电路及处理器 |
CN112165588A (zh) * | 2020-09-28 | 2021-01-01 | 成都微光集电科技有限公司 | 屏幕叠加显示系统和方法、图片压缩方法 |
CN114238250A (zh) * | 2021-11-03 | 2022-03-25 | 奇安信科技集团股份有限公司 | 程序文件压缩方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111708574B (zh) | 2023-03-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111708574B (zh) | 指令流压缩、解压缩方法及装置 | |
WO2022120912A1 (zh) | 编码方法、解码方法、装置及计算机可读存储介质 | |
CN103400174B (zh) | 一种二维码的编码方法、解码方法及系统 | |
US7965207B2 (en) | Variable length integer encoding system and method | |
US6196466B1 (en) | Data compression method using multiple base number systems | |
US20130307709A1 (en) | Efficient techniques for aligned fixed-length compression | |
US20130099947A1 (en) | Data Compression Utilizing Variable and Limited Length Codes | |
CN104579360B (zh) | 一种数据处理的方法和设备 | |
JP3588349B2 (ja) | 10進数を2進数にエンコード/デコードする方法 | |
CN107094021A (zh) | 数据压缩 | |
GB2542707A (en) | Data processing method and apparatus | |
JP2003218703A (ja) | データ符号化装置及びデータ復号装置 | |
CN110996105A (zh) | 可变速率压缩的方法和可变速率解压缩的方法 | |
CN111131403A (zh) | 一种物联网设备的消息编解码方法及装置 | |
TWI273779B (en) | Method and apparatus for optimized lossless compression using a plurality of coders | |
CN106557553B (zh) | 数据匹配的方法及装置 | |
US8934727B2 (en) | Image processing apparatus, image processing method, and image forming apparatus | |
CN101325418B (zh) | 一种基于概率查表的哈夫曼快速解码方法 | |
EP2442256A1 (en) | Method of encoding and decoding text on a matrix code symbol | |
JP5933742B2 (ja) | 反復構造発見ベースの3dモデル圧縮のビットストリームを生成する方法及び装置 | |
CN112449191A (zh) | 压缩多个图像的方法、解压缩图像的方法和装置 | |
CN118450131A (zh) | 定长码单元含多个编码参数变长码的数据解码方法和装置 | |
CN112527951B (zh) | 整数数据的存储方法、装置及存储介质 | |
CN110348554B (zh) | 数字信息编解码方法、装置、电子设备和存储介质 | |
CN113839678A (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 |