数据存取程序指令编码的制作方法

文档序号:6378358阅读:183来源:国知局
专利名称:数据存取程序指令编码的制作方法
技术领域
本发明涉及数据处理系统领域。更具体地说,本发明涉及用在数据处理系统中的数据存取程序指令的编码。
众所周知,要为数据处理系统提供数据存取指令。这类程序指令的一个实例是ARM指令集的LDR/LDRB/STR/STRB类指令(例如参见ARM体系结构参考手册)。这是一组相互正交编码的指令,即,它们指定不同的主操作,但每个主操作可以使用和所有其它指令相同的寻址模式或其它的子操作。ARM指令集是32位指令集,而LDR/LDRB/STR/STRB类指令有20位影响寻址模式的计算,即4位(位[19:16]指定基址寄存器;13位(位[25]和位[11:0]指定立即偏移(第一形式指令),或指定变址寄存器以及要向其施加的位移(或旋转)(第二形式指令);以及3位(P=位[24],U=位[23],W=位[21])指定要对基址寄存器值和偏移执行的操纵(manipulation)。
可以指定的寻址模式的实例是偏移寻址、前变址寻址、后变址寻址以及非特许后变址寻址。这些数据存取指令由于可以指定数据存取操作而提供了相当大的灵活性。这有助于减少将所需数据传送到存储器或从中传送出所需的指令数,从而增加了速度并提高了代码密度。
数据处理系统内的一个常见问题是可用的编码位空间是有限资源,并在此编码位空间上对不同情况下所用的不同类型指令进行竞争要求。常常有这种情况可以提供的可能有用的指令数超过了处理器体系结构中可用的编码位空间。于是,能够提高编码位空间使用效率的措施就极为有利。
从本发明的一个方面来看,提供了用于处理数据的装置,所述装置包括寄存器库,具有可操作上保存各个数据值的一个或多个寄存器;数据存取电路,可操作上执行数据存取操作,以在所述装置和存储器电路中的已寻址存储器位置之间传送一个或多个数据值;以及指令解码器,它对数据存取程序指令作出响应,以控制所述数据存取电路执行各个数据存取操作,每个所述数据存取程序指令包括指定偏移值的地址偏移字段,还包括指定所述寄存器库中基地址寄存器的基址寄存器字段,并指定在所述偏移值和所述基地址寄存器中保存的基地址值上要执行的操纵,以形成在执行所述数据存取程序指令时在所述存储器电路内要存取的存储器地址值;其中所述数据存取程序指令具有(i)第一形式,包括具有第一地址偏移字段长度的地址偏移字段;以及(ii)第二形式,包括具有第二地址偏移字段长度的地址偏移字段,所述第一地址偏移字段长度大于所述第二地址偏移字段长度,且所述第一形式能够指定在所述基地址值和所述偏移值上要执行的可能操纵数少于所述第二形式。
本发明认识到,实际上大多数编程器和编译器不会均匀使用由提供大偏移字段和大量操纵模式选择的数据存取指令可提供的大量可能性。更具体地说,例如,偏移的低值比高值更常用。而且,将偏移加到基址寄存器值上的简单偏移寻址比任何其它类型的操纵更常用。两个或更多个较少用的选项同时出现(例如大偏移值和后变址寻址)是不常见的。程序的统计分析表明,所用的指令类型分布中的不均匀性是程序的通用特性,并不是特定编程器或特定编译策略的特性。本发明认识到并利用了这种特性。具体地说,本发明提供的数据存取程序指令具有第一形式,它包括长的偏移字段和很少的地址操纵选项(或只有一个);以及第二形式,它有较短的偏移字段但有较大量的地址操纵选项。这样,数据存取指令所用的编码位空间的总量就可减少,同时保存绝大多数情况下直接提供所需操作的指令的可用性。
在优选实施例中,所述操纵通过如下一种方式形成修改的地址值将所述偏移值加到所述基地址值上;以及从所述基地址值中减去所述偏移值。
在优选实施例中,所述操纵还允许以下选项中至少一项用于数据存取操作使用所述基地址值作为所述存储器地址值;使用所述修改的地址值作为所述存储器地址值;使用所述基地址值并将所述修改的地址值写回到所述基地址寄存器中作为所述存储器地址值;以及使用所述修改的地址值并将所述修改的地址值写回到所述基地址寄存器中作为所述存储器地址值。
在优选实施例中,所述装置可以在多种模式下操作,其中至少一种模式是特许的,且至少一种是非特许的,数据存取都标有特许或非特许,以使代码对所述存储器电路具有不同的存取级别。
在优选实施例中,所述操纵的至少一种形式允许强制使存储器存取成为非特许的,不论其当前模式如何。
应理解到,本技术在用于指定在寻址模式中要采用的操纵的编码位空间和用于指定偏移字段的编码位空间之间作了权衡。具体地说,优选实施例是这样的第一形式的指令用固定的操纵操作,因此其不需要指令中有操纵模式控制字段,而第二形式的指令包括操纵模式控制字段,用于指定可能使用的多个不同操纵之一。
应理解到,在第一形式指令和第二形式指令中都可用的任何操纵导致编码位空间的低效率使用,因为能利用第二形式指令中这种操纵执行的任何数据存取操作同样也可利用第一形式指令中相同的操纵来执行。因此,在优选实施例中,所述第一形式和所述第二形式提供的操纵集是不相交的。
从本发明的另一方面来看,提供了一种处理数据的方法,所述方法包括以下步骤将数据值保存在寄存器库的一个或多个寄存器的各个寄存器中,所述寄存器库构成数据处理装置的一部分;用数据存取电路执行数据存取操作,以在所述数据处理装置和存储器电路中的已寻址存储器位置之间传送一个或多个数据值;以及对数据存取程序指令作出响应,用指令解码器控制所述数据存取电路来执行各个数据存取操作,每个所述数据存取程序指令包括指定偏移值的地址偏移字段,还包括指定所述寄存器库中基地址寄存器的基址寄存器字段,并指定在所述偏移值和所述基地址寄存器中保存的基地址值上要执行的操纵,以形成在执行所述数据存取程序指令时在所述存储器电路内要存取的存储器地址值;其中所述数据存取程序指令具有(i)第一形式,包括具有第一地址偏移字段长度的地址偏移字段;以及(ii)第二形式,包括具有第二地址偏移字段长度的地址偏移字段,所述第一地址偏移字段长度大于所述第二地址偏移字段长度,且所述第一形式能够指定在所述基地址值和所述偏移值上要执行的可能操纵数少于所述第二形式。
从本发明的又一方面来看,提供了一种计算机程序产品,其具有的计算机程序可操作上用于控制数据处理装置,所述计算机程序保存一个或多个数据值,供寄存器库的一个或多个寄存器的各个寄存器内的操纵使用,并包括数据存取代码,可操作上用于用数据存取电路执行数据存取操作,以在所述数据处理装置和存储器电路中已寻址存储器位置之间传送一个或多个数据值;其中所述数据存取代码包括多个数据存取程序指令,每个所述数据存取程序指令包括指定偏移值的地址偏移字段,还包括指定所述寄存器库中基地址寄存器的基址寄存器字段,并指定在所述偏移值和所述基地址寄存器中保存的基地址值上要执行的操纵,以形成在执行所述数据存取程序指令时在所述存储器电路中要存取的存储器地址值;其中所述数据存取程序指令包括至少一个这样的数据存取程序指令每个指令具有(i)第一形式,包括具有第一地址偏移字段长度的地址偏移字段;以及(ii)第二形式,包括具有第二地址偏移字段长度的地址偏移字段,所述第一地址偏移字段长度大于所述第二地址偏移字段长度,且所述第一形式能够指定在所述基地址值和所述偏移值上要执行的可能操纵数少于所述第二形式。
现仅以示例方式参阅附图来说明本发明的实施例,附图中

图1示出使用数据存取指令的数据处理装置的示意图;图2示出第一形式数据存取指令的示意图;图3示出第二形式数据存取指令的示意图;图4示出在解码第一形式和第二形式数据存取指令时指令解码器的操作流程示意图;以及图5示出可以实现按照上述技术的程序指令的通用计算机体系结构的示意图。
图1为数据处理装置2的示意图,其处理器核心包含寄存器库4,该寄存器库具有多个程序寄存器用于存储各个数据值;乘法器6;移位器8;加法器10;指令解码器12;指令流水线14以及加载/存储单元16。应理解到,数据处理装置2通常会含有该技术领域专业人员所熟知的更多的电路元件,但为清晰起见在图1中省略了这些电路元件。操作时,将程序指令从存储器(未示出)取出送到指令流水线14。当程序指令到达指令流水线14中的解码级时,就被指令解码器12解码,产生控制信号,加到包括寄存器库4、乘法器6、移位器8和加法器10的数据处理逻辑上,以执行所需的数据处理操作。
一种可以执行且指令解码器12可对其作出响应的程序指令类型是数据存取指令。这种数据存取指令指定由加载/存储单元16要执行的加载或存储操作,以在连接到数据处理装置2的存储器内指定的地址或地址序列中写入或读出数据。在这种加载/存储体系结构型的数据处理装置中,正在存取的数据值被写入寄存器库4内的各寄存器中或从中读出。但这并不是基本要求。
正如从现有的ARM指令集所提供的数据存取指令类型所知,这些数据存取指令能指定立即偏移值和要用的操纵模式。指令解码器12对指定这些参数的数据存取指令中的字段作出响应,并将这些参数传送到加载/存储单元16上以便操作。数据存取指令中所包含的基址寄存器指定字段指定了寄存器库4中的一个程序寄存器,该程序寄存器由加载/存储单元16读取,以获得在数据存取操作中要用的基地址值。用于存取存储器的存储器地址值是由该基地址通过操纵形成的,该操纵例如可包括加上在指令的地址偏移字段中包含的偏移值。在该装置中,传入存储器或从中传出的各个数据值由加载/存储单元16从寄存器库4中读取或写入寄存器库4。
图2示意性示出第一形式的数据存取指令。该指令包括两个16位的半字。在该第一形式中,在半字HW1中位[8]=1,向指令解码器12指示半字HW2含有长12位偏移值字段“偏移12”,且该指令使用固定地址操纵,其中在基地址值上加零扩展偏移值,且其结果用作数据存取的存储器地址值。
字段Rn指定保存基地址值的寄存器。字段Rd指定数据存取操作的源寄存器或目的寄存器。半字HW1中的位[15:9]指定该指令是数据存取指令,而半字HW1中的位[7:4]是指定要执行的数据存取详情的操作码字段要执行加载还是存储,要在存储器中存取的数据长度(例如8位字节、16位半字或32位字),以及在将窄数据值加载到较宽寄存器中的情况下,该值是零扩展还是符号扩展。
图3示出第二形式的数据存取指令。在该第二形式中,在半字HW1中位[8]=0,向指令解码器12指示半字HW2含有短8位偏移值字段“偏移8”,还含有3位P、U和W,它们指定要使用的地址操纵。字段Rn和Rd以及位[15:9]和半字HW1的位[7:4]指定的事项与图2相同。
U位指定要在基地址值上加上还是减去零扩展偏移值以形成修改的地址值。
P位指定用于数据存取的存储器地址值是基地址值还是修改的地址值。
W位指定保存基地址值的寄存器是保持不变还是将修改的地址值写入其中。
此外,当P、U和W位指定了第一形式所用的地址操纵时(即将偏移加到基地址值上,修改的地址值用于数据存取,并且保存基地址值的寄存器保持不变),不论处理器处于非特许还是特许操作模式,数据存取均标记为非特许。应理解,P、U和W位的这个组合不然就是冗余的,因为第一形式的指令使所需数据存取操作都可用。
由上述可见,图2所示的第一形式的数据存取指令提供了大的偏移字段,其代价是固定的地址操纵,而图3所示的第二形式的数据存取指令提供了较小的偏移字段,但对于要执行的地址操纵给出了较多数量的选项。已经发现,第一形式和第二形式数据存取指令的组合在提供对所需数据存取操作类型的良好覆盖同时减少指定这些参数所用的编码位空间的量方面特别有利。所节省的编码位空间然后可用于其它目的,这是相当有利的。上述编码需要13位来指定偏移和地址操纵(HW1[8]和HW2[11:0]),而在ARM指令集中所用的简单编码(P、U、W、偏移12)则需要15位。
作为另一种编码,也可以使用HW1[15:9]=1111100,而不是图2和3所示的1110101。
用HW1[7]而不用HW1[8]来区分两种形式的指令,并用HW1[8,6:4]作为操作码字段,而不用HW1[7:4]。
在图3中,HW2[11]=1,而不是图中所示的0。
图4示出了由指令解码器12执行的处理操作的流程示意图。应该理解,图4所示的顺序处理实际上在指令解码器12中可能不会发生,而是可以采用相当程度的并行处理。但图4有助于理解所需的解码以及所执行的操作。
在步骤18,指令解码器通过第一半字HW1的最有效的7位来识别数据存取指令。如果识别出另一类型的指令,则在步骤19对其解码。在步骤20,指令解码器12检查第一半字HW1中的位[8],以确定数据存取指令是第一形式还是第二形式的指令。如果位[8]等于“1”,则数据存取指令具有第一形式,且处理进入步骤24,在步骤24操作码被解码,以确定与所需数据存取指令相关联的其它参数,并使用长12位偏移值和加有偏移的偏移寻址的固定操纵模式。
如果在步骤20确定位[8]=0,则处理进入步骤28,在步骤28,半字HW2的操纵模式控制字段[10:8]被解码,以确定要使用上述哪一种地址操纵模式。然后,在步骤30,使用较小的8位偏移值和指定的操纵来执行操作码HW1[7:4]所指定的数据存取。
图5示出了可以实现按照上述技术的程序指令的通用计算机200的示意图。通用计算机200包括中央处理单元202、随机存取存储器204、只读存储器206、网络接口卡208、硬盘驱动器210、显示驱动器212和监控器214,以及带有键盘218和鼠标220的用户输入/输出电路216,全部通过公用总线222连接。操作时,中央处理单元202将执行计算机程序指令,这些指令可存储在一个或多个随机存取存储器204、只读存储器206和硬盘驱动器210中,或通过网络接口卡208动态下载。所执行的处理结果可通过显示驱动器212和监控器214向用户显示。用于控制通用计算机200操作的用户输入可以通过用户输入/输出电路216从键盘218或鼠标220接收。应理解到,计算机程序可以用各种不同的计算机语言来写。计算机程序可以存储并分布在记录介质上,或动态下载到通用计算机200上。在适当的计算机程序控制下操作时,通用计算机200可以执行上述技术,并可认为是构成执行上述技术的装置。通用计算机200的体系结构可以大不相同,而图5仅是一个实例而已。
权利要求
1.用于处理数据的装置,所述装置包括寄存器库,具有可操作上保存各个数据值的一个或多个寄存器;数据存取电路,可操作上执行数据存取操作,以在所述装置和存储器电路中已寻址的存储器位置之间传送一个或多个数据值;以及指令解码器,其响应于数据存取程序指令来控制所述数据存取电路执行各个数据存取操作,每个所述数据存取程序指令包括指定偏移值的地址偏移字段,还包括指定所述寄存器库内基地址寄存器的基址寄存器字段,并指定在所述偏移值和所述基地址寄存器中所保存的基地址值上要执行的操纵,以形成在执行所述数据存取程序指令时在所述存储器电路中要存取的存储器地址值;其中所述数据存取程序指令具有(i)第一形式,其包括具有第一地址偏移字段长度的地址偏移字段;以及(ii)第二形式,其包括具有第二地址偏移字段长度的地址偏移字段,所述第一地址偏移字段长度大于所述第二地址偏移字段长度,且所述第一形式能够指定在所述基地址值和所述偏移值上要执行的可能操纵数少于所述第二形式。
2.如权利要求1所述的装置,其中所述操纵通过如下一种方式形成修改的地址值将所述偏移值加到所述基地址值上;以及从所述基地址值中减去所述偏移值。
3.如权利要求1和2中任一项所述的装置,其中所述操纵还允许如下选项中至少一项用于数据存取操作使用所述基地址值作为所述存储器地址值;使用所述修改的地址值作为所述存储器地址值;使用所述基地址值并将所述修改的地址值写回到所述基地址寄存器中作为所述存储器地址值;以及使用所述修改的地址值并将所述修改的地址值写回到所述基地址寄存器中作为所述存储器地址值。
4.如权利要求1、2和3中任一项所述的装置,其中所述装置可在多种模式下操作,其中至少一种模式是特许的,且至少一种是非特许的,数据存取都标有特许或非特许,以使代码对所述存储器电路具有不同的存取级别。
5.如权利要求4所述的装置,其中所述操纵的至少一种形式允许强制使存储器存取为非特许的,不管当前模式如何。
6.如上述权利要求中任一项所述的装置,其中所述第一形式的数据存取程序指令用固定的操纵操作,其中所述基地址值和所述偏移值之和用作所述存储器地址值,且在执行后所述基地址值不变。
7.如上述权利要求中任一项所述的装置,其中所述第二形式的数据存取程序指令包括操纵模式控制字段,其指定要使用多个不同操纵中的哪一个。
8.如上述权利要求中任一项所述的装置,其中由所述第一形式和所述第二形式提供的操纵集是不相交的。
9.如上述权利要求中任一项所述的装置,其中所述数据值在所述寄存器库的各个寄存器与所述已寻址存储器位置之间传送。
10.一种处理数据的方法,所述方法包括以下步骤将数据值保存在寄存器库的一个或多个寄存器的各个寄存器中,所述寄存器库构成数据处理装置的一部分;用数据存取电路执行数据存取操作,以在所述数据处理装置和存储器电路中的已寻址存储器位置之间传送一个或多个数据值;以及响应于数据存取程序指令,用指令解码器控制所述数据存取电路来执行各个数据存取操作,每个所述数据存取程序指令包括指定偏移值的地址偏移字段,还包括指定所述寄存器库中基地址寄存器的基址寄存器字段,并指定在所述偏移值和所述基地址寄存器中保存的基地址值上要执行的操纵,以形成在执行所述数据存取程序指令时在所述存储器电路中要存取的存储器地址值;其中所述数据存取程序指令具有(i)第一形式,其包括具有第一地址偏移字段长度的地址偏移字段;以及(ii)第二形式,其包括具有第二地址偏移字段长度的地址偏移字段,所述第一地址偏移字段长度大于所述第二地址偏移字段长度,且所述第一形式能够指定在所述基地址值和所述偏移值上要执行的可能操纵数少于所述第二形式。
11.如权利要求10所述的方法,其中所述操纵通过如下一种方式形成修改的地址值将所述偏移值加到所述基地址值上;以及从所述基地址值中减去所述偏移值。
12.如权利要求10和11中任一项所述的方法,其中所述操纵还允许以下选项中至少一项用于数据存取操作使用所述基地址值作为所述存储器地址值;使用所述修改的地址值作为所述存储器地址值;使用所述基地址值并将所述修改的地址值写回到所述基地址寄存器中作为所述存储器地址值;以及使用所述修改的地址值并将所述修改的地址值写回到所述基地址寄存器中作为所述存储器地址值。
13.如权利要求10、11和12中任一项所述的方法,其中所述方法可在多种模式下操作,其中至少一种模式是特许的,且至少一种模式是非特许的,数据存取都标有特许或非特许,以允许代码对所述存储器电路具有不同的存取级别。
14.如权利要求13所述的方法,其中所述操纵的至少一种形式允许强制使存储器存取成为非特许的,不管其当前模式如何。
15.如权利要求10-14中任一项所述的方法,其中所述第一形式的数据存取程序指令用固定的操纵操作,其中所述基地址值和所述偏移值之和用作所述存储器地址值,且在执行后所述基地址值不变。
16.如权利要求10-15中任一项所述的方法,其中所述第二形式的数据存取程序指令包括操纵模式控制字段,其指定要使用多个不同操纵中的哪一个。
17.如权利要求10-16中任一项所述的方法,其中所述第一形式和所述第二形式提供的操纵集是不相交的。
18.如权利要求10-17中任一项所述的方法,其中所述数据值在所述寄存器库的各个寄存器与所述已寻址存储器位置之间传送。
19.一种计算机程序产品,其具有的计算机程序可操作用于控制数据处理装置,所述计算机程序保存一个或多个数据值,供寄存器库的一个或多个寄存器的各个寄存器内的操纵之用,并包括数据存取代码,可操作用于用数据存取电路执行数据存取操作,以在所述数据处理装置和存储器电路中的已寻址存储器位置之间传送一个或多个数据值;其中所述数据存取代码包括多个数据存取程序指令,每个所述数据存取程序指令包括指定偏移值的地址偏移字段,还包括指定所述寄存器库中基地址寄存器的基址寄存器字段,并指定在所述偏移值和所述基地址寄存器中保存的基地址值上要执行的操纵,以形成在执行所述数据存取程序指令时在所述存储器电路中要存取的存储器地址值;其中所述数据存取程序指令包括至少一个这样的数据存取程序指令每个指令具有(i)第一形式,其包括具有第一地址偏移字段长度的地址偏移字段;以及(ii)第二形式,其包括具有第二地址偏移字段长度的地址偏移字段,所述第一地址偏移字段长度大于所述第二地址偏移字段长度,且所述第一形式能够指定在所述基地址值和所述偏移值上要执行的可能操纵数少于所述第二形式。
20.如权利要求19所述的计算机程序产品,其中所述操纵通过如下一种方式形成修改的地址值将所述偏移值加到所述基地址值上;以及从所述基地址值中减去所述偏移值。
21.如权利要求19和20中任一项所述的计算机程序产品,其中所述操纵还允许以下选项中至少一项用于数据存取操作使用所述基地址值作为所述存储器地址值;使用所述修改的地址值作为所述存储器地址值;使用所述基地址值并将所述修改的地址值写回到所述基地址寄存器中作为所述存储器地址值;以及使用所述修改的地址值并将所述修改的地址值写回到所述基地址寄存器中作为所述存储器地址值。
22.如权利要求19、20和21中任一项所述的计算机程序产品,其中所述方法可在多种模式下操作,其中至少一种模式是特许的,且至少一种是非特许的,数据存取都标有特许或非特许,以使代码对所述存储器电路具有不同的存取级别。
23.如权利要求22所述的计算机程序产品,其中所述操纵的至少一种形式允许强制使存储器存取成为非特许的,不管其当前模式如何。
24.如权利要求19-23中任一项所述的计算机程序产品,其中所述第一形式的数据存取程序指令用固定的操纵操作,其中所述基地址值和所述偏移值之和用作所述存储器地址值,且在执行后所述基地址值不变。
25.如权利要求19-24中任一项所述的计算机程序产品,其中所述第二形式的数据存取程序指令包括操纵模式控制字段,其指定要使用多个不同操纵中的哪一个。
26.如权利要求19-25中任一项所述的计算机程序产品,其中所述第一形式和所述第二形式提供的操纵集是不相交的。
27.如权利要求19-26中任一项所述的计算机程序产品,其中所述数据值在所述寄存器库的各个寄存器与所述已寻址存储器位置之间传送。
全文摘要
提供了一种数据处理装置(2),它响应于数据存取指令来执行数据存取操作。这些数据存取指令具有第一形式,使用12位偏移字段但具有固定的寻址模式;以及第二形式,使用较短的8位偏移字段,但用在数据存取指令的操纵模式控制字段内指定的寻址模式。
文档编号G06F9/30GK1826582SQ200380110416
公开日2006年8月30日 申请日期2003年12月30日 优先权日2003年6月13日
发明者D·J·西尔, V·瓦斯金 申请人:Arm有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1