变指令长度处理的制作方法

文档序号:6467253阅读:189来源:国知局
专利名称:变指令长度处理的制作方法
发明
背景技术
1.发明领域本发明涉及处理系统中指令的格式,尤其是变长度指令的格式。
2.相关技术描述在处理系统中数据的操作是通过使用指令完成的,每个指令包含一操作码部分和一参数部分。操作码部分指定由本系统中的处理器执行的操作,参数部分包含一个或多个表示数据的参数,例如用于在存储器中定位数据的地址和/或由处理器进行操作的数字。
在任何一个包含了一个或多个表示地址的参数的指令中,指令的总位数长度必须足够大从而能够表示最大可能的地址值。一种用于减小该位长的通用方法是使用地址索引,借此可以提供多种具有不同长度的地址参数的指令。例如,可以提供多种具有不同长度的偏移量参数以及需要不同字节数的JUMP指令。
相似地,在任何一个包含一个或多个用来表示处理器进行操作的数的参数的指令中,总位数长度必须足够大从而能够表示该数的最大可能的值。通常,处理系统具有多个不同位长度容量的存储器(寄存器、ROM、RAM等),而且能够移动具有各种不同位长的数。为了容易做到这一点,通常的做法是为每种可能的位长组合提供不同的MOVE指令。例如,即使在全部存储器容量都相同的情况下(例如,三十二位容量),也可能需要四种不同的M0VE指令,即第一MOVE指令,用于把一个八位数移动到一个具有三十二位容量的存储单元;第二MOVE指令,用于把一个十六位数移动到一个具有三十二位容量的存储单元;第三MOVE指令,用于把一个二十四位数移动到一个具有三十二位容量的存储单元;第四MOVE指令,用于把一个三十二位数移动到一个具有三十二位容量的存储单元;在前三个例子中,处理器将自动地把要移动的字扩展为一个三十二位的值。
发明概述本发明的目的是减少程序所需要的存储器空间。这可以通过压缩参数而不增加操作码的数目来实现。
根据本发明,一种在处理系统中形成执行指令的方法包含提供一个用来确定至少一个由处理器执行的操作的操作码部分;以及提供一个可压缩的参数部分,它包含至少一个表示相应数据值的参数,该参数部分还包含一个扩展指示符用来表示该至少一个参数的压缩状态。
注意在这里所使用的词语“存储器”,是指广泛使用的存储器类型相一致,包含各种类型的易失性和非易失性器件,没有局限性地包含RAM、DRAM、ROM、寄存器以及这些器件的组合。另外,在这里使用的“指针”一词,指的是任何标识存储单元的值。此外,“存取”数据,是指从存储器中获得数据,或是把数据放入存储器中。
附图简要说明

图1是一个框图,说明了一个用于阐明本发明最佳实施例的处理系统示例。
图2A到2D显示了在阐明本发明时所使用的参数示例。
图3A到3L显示了在阐明本发明时所使用的指令示例。
最佳实施例的描述图1所示的处理系统包含一个处理器10和一个存储器20。处理器10是一个硬件加速单元,它使用时钟脉冲来顺序处理由程序计数寄存器标识的指令。通常,程序计数寄存器包含下一个由处理器读取并进行操作的指令的存储单元。
此外处理器还包含一个环境寄存器组12、一个指令译码器14以及一个算术逻辑单元16。在这个实施例中,存储器20包含一个具有多个存储单元的RAM,用于存储数据和/或系统变量,并用来作为一个LIFO(后进先出)堆栈以促进程序方法和/或过程的执行。
处理器10和存储器20与公共总线30相连从而实现相互之间的连接,并且和其他连接到该总线上的硬件相连。总线包含相应的用于传送数据诸如地址、中断、数据、读选通、写选通以及设备选取选通等的线路。更可取地,这是一条高速总线,其中至少有一部分是在具有处理器和存储器的通用硅衬底上形成的。
环境寄存器组12包含一个程序计数寄存器121、一个或多个通用寄存器123、以及一个用于堆栈寻址的寄存器124。更具体地说,在环境寄存器组中的寄存器包含程序计数寄存器121,用来保存一个不断更新的程序计数PC以标识下一个被处理器访问的存储器地址;通用寄存器123,用于包含从存储器20读取的数据或者是由算术逻辑单元16生成的数据;寄存器124,用来保存一个堆栈指针SP以标识当前访问的堆栈地址的存储单元。
指令译码器14是一个传统的硬件部件,诸如一个序列发生器或者微序列发生器,用于把从存储器20中读取的指令转换成低级操作码。算术逻辑单元16也是一个传统的硬件部件。
依据本发明,至少有一些由处理器执行的指令包含一参数部分和一操作码部分。参数部分可包含以下几种用于表示处理器所使用的数据的参数中的一种UmNC是一种表示无符号(U)、未压缩(NC)以及总位数长度为m位的数据的参数;SmNC是一种表示有符号(S)、未压缩(NC)以及总位数长度为m位的数据的参数;Um_C是一种表示有无符号(U)、可压缩(_C)以及总位数长度为m位的数据的参数;Sm_C是一种表示有符号(S)、可压缩(_C)以及总位数长度为m位的数据的参数。
注意那些参数类型UmNC以及SmNC已经为大家所熟知,但是为了说明本发明的向后兼容性而将它们包含在其中。此外还要注意到,在每种情况下,m都表示由相应参数所表示的最后的、未压缩的数据的总位数。同样根据本发明所形成的每种参数都包含一个或多个预定位长的字节。在所描述的实施例中,每个字节的长度为八位。
图2A和2B显示了每一种相应的类型UmNC、SmNC的参数示例格式。在这些例子中,每个参数包含两个字节。具体地说
图2A显示一个UmNC类型两字节的参数,它表示一个无符号、未压缩且总位数长度为16位(m16)的数据值。在这个例子中,参数的每个字节等于它所表示数据的相应字节。
图2B显示了一个SmNC类型两字节的参数,它表示一个有符号、未压缩且总位数长度为16位(m16)的数据值。在这个例子中,该参数的每个字节再次等于它所表示的数据的相应字节,不过该数据值的第一位是一个符号位s。
图2C显示了一个Um_C类型的两字节参数,它表示一个无符号、可压缩且总位数长度为16位(m16)的数据值,但是该数据值可以大于该参数本身的位长,这取决于该数据是否已经被压缩了。这由该参数第一个字节中的扩展位e来指示。e值决定或者该处理器扩展该参数的第一个字节为数据值的完全16位大小,或者从存储器中读取第二字节。
图2D显示了一个Sm_C类型的两字节参数,它表示一个有符号、可压缩且总位数长度为16位(m16)的数据值,但是该数据值可以再次大于该参数本身的位长,这取决于该数据是否已经被压缩了。再次,这由该参数第一个字节所包含的一个扩展位e来指示,且e值决定或者是处理器扩展参数的第一个字节为数据值的完全16位大小,或者是从存储器中读取第二字节。第二位是符号位s。
在每个包含一个或多个参数类型UmNC、SmNC、Um_C、Sm_C参数的指令中,具体的操作码决定一个或者多个由该处理器执行的操作;在指令中这些参数的数目;每一参数所定义的特征,包含该参数是否表示可压缩的数据;由该参数表示的数据的未压缩长度m;该参数是有符号的(包含一个符号)还是无符号的(不包含一个符号)。
对于多字节参数,同样必须决定处理器为了形成该参数而读取和排列字节的次序。这可以用多种方法来完成,例如通过在和相应参数相关的具体指令的定义中包含这个次序,通过为具体的处理器定义一个参数排列的固定次序,通过在参数本身中包含指定排列次序的代码,等等。
更可取地,指令操作码部分的格式已经內在地指定了参数的数目以及他们的特征。例如,一个ADD指令,由ALU16把一个操作数A和一个操作数B相加并且把总和保存在地址C中,其操作码可能包含三个参数,每个对应于相应的操作数A、B和C。要注意到,例如,A和B可以是可压缩的值,而C可以是从一个基准地址开始的索引,它也可能是一个可压缩的数。此外,指令本身的定义将指定这些参数中每一个的相关特征。作为另一例子,一个ENTER指令,其中处理器10将寄存器124中的堆栈指针值SP递减得到该堆栈中的一个地址,从而将提供由值M表示的存储空间,该指令的操作码可能包含该单个无符号参数M。M的大小可以是压缩的,因为这是一个基于由SP定位的当前地址的索引。指令本身的定义将同样指定参数M的其他相关特征。
处理器10通过访问由不断更新的程序计数器PC所指示的存储器地址,逐个字节地形成每个指令。更可取地,这些地址指向在一个快速存取存储器中的单元,例如一个在处理器本身中的高速缓冲存储器(没有显示)。首先,处理器读取操作码,然后读取由具体操作码所定义的参数数目。图3A到3J说明了如何来处理不同类型参数的典型例子。每个指令包含一个操作码部分,以及随后的一个包含一个或多个参数的参数部分。具体地说图3A显示了一个具有单个一字节的UmNC类型参数的指令。在这个例子中,m=8,且该8位的参数和它所表示的数据值是相同的。
图3B显示了一个具有单个一字节的SmNC类型参数的指令。在这个例子中,m=8,且该8位参数包含一个符号位s=0,并和它所表示的数据值是相同的。
图3C显示了一个具有单个双字节Um_C类型参数的指令。在这个例子中,m=16,且该参数的第一个字节包含了一个扩展位值e=0,这表明第一个字节是没有压缩的。因此,处理器就必须另外读取一个字节来形成完整的16位参数。
图3D显示了一个具有两个单字节Um_C类型参数的指令。对每个参数来说,m=16,且第一位是一个扩展位,其值e=1。这告诉处理器10将每个参数扩展为由该参数所表示的完整的16位数据值。这可以通过任何与这个指令的具体操作码有关的解压缩方法来完成。例如,如果某一参数表示一个写入16位寄存器中的索引值,但是它的最大值能够用7位或者更少的位形成。通过删除扩展位和在剩余7位前面插入9位预定值(例如9个零),就能够将该参数扩展为16位。或者,通过与具体操作码有关的解压缩算法能够将该8位参数扩展为完整的16位。
图3E显示了一个具有一个四字节Um_C类型参数的指令。在这个例子中,m=32,并且前三个字节中的每一个都包含一个扩展位,其值e=0。处理器读取并删除这三个扩展位的值,从前三个字节中的每一个读取7个数据位,从第四个字节中读取8个数据位,然后在剩余的29位前面插入3位预定值(例如3个零),从而将该参数扩展到32位。
图3F显示了一个具有一个三字节Um_C类型参数的指令。在这个例子中,m=32,前两个字节的每一个都包含一个扩展位,其值e=0,而且第三个字节包含一个扩展位,其值e=1。处理器从这三个字节中的每一个读取7个数据位,读取且删除这三个扩展位的值,然后在剩余的21位的前面插入11位预定值(对应于删除的扩展位每一个插入一位,对应于具有值e=1的扩展位插入8位),从而将该参数扩展到32位。如果通过用零来填充整个数据值的缺少位来完成扩展,处理器将在由该三字节参数所提供的21个数据位的前面插入11位的零值。注意到,在本发明的最佳格式中,将参数字节以相反的次序,即从最不重要的字节到最重要的字节,保存在存储器中并以该次序从存储器中读取。因此,在图3F的例子中读取本参数的第一个字节构成数据值最不重要的7位[1010101];读取本参数的第二个字节构成本数据值其次重要的7位[1110000];读取本参数的第三个字节构成本数据值最重要的7位[1100110];以及在最后读取的参数第三个字节的前面插入11个零从而构成完整的数据值

图3G显示了一个具有单个双字节Sm_C类型参数的指令。在这个例子中,m=16,第一字节包含一个值e=0的扩展位以及一个值s=0的符号位。因此,处理器读取这两个字节并在该符号位和读取的剩余14个数据位之间插入一位预定值。为简便起见,更可取地使这个预定值和符号位的值相同。
图3H显示了一个具有单个一字节Sm_C类型参数的指令。在这个例子中,m=16,该字节包含一个值e=1的扩展位以及一个值s=1的符号位。因此,处理器读取该单字节,并在该符号位和读取的剩余的六个数据位之间插入9位预定值(例如符号位的值)。
图3I显示了一个具有单个四字节Sm_C类型参数的指令。在这个例子中,m=32,第一个字节包含一个值e=0的扩展位以及一个值s=0的符号位,第二个和第三个字节中的每一个都包含一个值e=0的扩展位,并第四个字节包含剩余的8位数据值。因此,处理器读取这四个字节,并且在符号位和读取的剩余二十八个数据位之间插入三位预定值,例如符号位的值。
图3了显示了一个具有单个三字节Sm_C类型参数的指令。在这个例子中,m=32,第一个字节包含一个值e=0的扩展位以及一个值s=1的符号位,第三个字节包含一个值e=1的扩展位。因此,处理器不改变地读取前两个字节,并以8位扩展第三个字节从而形成由该参数表示的完整32位数据值。
在上述例子中,每个参数都是逐位读取的,并且通过读取在每个字节中的扩展字段来决定是否扩展该参数。由扩展字段占据的空间减少了整个寻址范围。作为选择,扩展字段可以仅仅包含在参数的第一个字节中。在这种情况下,参数要么保存在一个压缩的单字节格式中,要么保存在一个扩展的格式中。
图3K和3L说明了在参数字段内如何做到这些的典型例子。这些图中的每一个都表示了一个32位数据值的参数实例。紧跟着操作码的第一个字节包含一个位字段,它包含扩展位e。扩展位的值指示两种可能情况中存在哪一个。这就是说,要么参数部分包含仅仅单个必须扩展为32位的被压缩参数,要么参数部分包含四个字节表示扩展了的32位数据值。
参考图3K和3L图3K显示一个具有单个Um_C类型参数的指令。在这个例子中,m=32,且参数的第一个(而且是唯一的)字节包含一个值e=1的扩展位。这告诉处理器把该参数扩展为由该参数表示的整个32位数据值。
图3L同样显示一个具有单个Um_C类型参数的指令。在这个例子中,又一次m=32,但是参数的第一(共4个)个字节包含一个值e=0的扩展位。这告诉处理器读取另外的三个字节来形成完整的数据值。
虽然已经对本发明的具体实施例进行了描述,但是在本发明的范围內可能有许多选择。例如,不是在操作码中内在地指定相关参数的数目,而是可以用参数本身內部的位字段来指出这一点,而且其他涉及参数的特征包含由参数表示的数据值的位数m;参数的字节数;该参数是否表示一个压缩的数据值。
权利要求
1.一种在处理系统中形成执行指令的方法,所述方法包含(a)提供一个操作码部分,用来确定被该处理器执行的至少一次操作;以及(b)提供一个参数部分,它包含至少一个表示相应数据值的参数,所述参数部分还包含一个指示符来表示所述的至少一个参数的以下定义特征(i)由所述参数表示的数据值的位数(m);(ii)所述参数的字节数;(iii)所述参数是否表示一个压缩的数据值。
2.如权利要求1所述的方法,其中参数部分包含至少一个下述类型的参数(1)一个可压缩、无符号、具有预定长度的参数;(2)一个可压缩、有符号、具有预定长度的参数;
3.如权利要求1所述的一种方法,其特征在于操作码定义了参数部分中的参数数目。
4.如权利要求1所述的一种方法,其特征在于操作码定义了至少一个参数的未压缩长度。
5.如权利要求1所述的一种方法,其特征在于操作码定义了所述的至少一个参数是否包含符号。
6.如权利要求1所述的一种方法,其特征在于该至少一个参数表示一个存储器。
7.如权利要求1所述的一种方法,其特征在于参数部分包含多个参数,且操作码部分确定所述参数的排列次序。
8.如权利要求1所述的一种方法,其特征在于该至少一个参数包含一个位字段,以指示一个和参数有关的特征。
9.如权利要求8所述的一种方法,其特征在于位字段表示至少一个(a)由该至少一个参数所表示的数据值的位数;(b)该至少一个参数的字节数;(c)该至少一个参数是否表示一个已压缩的数据值。
10.一种在处理系统中形成执行指令的方法,所述方法包含a)提供一个操作码部分,用来确定由该处理器执行的至少一次操作;以及b)提供一个参数部分,它包含至少一个表示相应的数据值的参数,所述的参数部分还包含一个扩展指示符。c)表示所述至少一个参数的压缩状态。
11.如权利要求10所述的一种方法,其特征在于该至少一个参数包含单个字节,其中包含扩展指示符。
12.如权利要求10所述的一种方法,其特征在于该至少一个参数包含多个字节,所述字节的每一个都包含一个扩展指示符。
13.如权利要求10所述的一种方法,其特征在于该至少一个参数包含多个字节,至少有一个所述字节包含一个扩展指示符。
全文摘要
在处理系统中形成变长度指令用于执行。每个指令包含:一个参数部分,具有一个或者多个预定类型的参数;以及一个操作码部分。操作码部分指明要执行的操作、指令中的参数数目、以及该参数的定义特征。该参数可以表示可压缩的数据,因此能够减少指令中参数的大小。
文档编号G06F9/30GK1335958SQ00802561
公开日2002年2月13日 申请日期2000年8月30日 优先权日1999年9月7日
发明者W·L·萨维尔勒, K·罗斯 申请人:皇家菲利浦电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1