【发明内容】
本发明的主要目的就是解决现有技术中的问题,提供一种执行比较运算的方法和模块,可以实现多个数据的比较运算。
为实现上述目的,本发明提供一种执行比较运算的方法,用于对多个源操作数进行比较运算,包括以下步骤:
A1、执行比较指令,从指令中获取源操作数初始地址和源操作数长度信息;
B1、从初始地址开始逐个读出源操作数,直到指令中所限定的长度;
C1、将源操作数逐个输入比较模块进行比较;
D1、将比较结果根据指令要求进行存储和/或输出。
在一种实施例中,所述步骤C1中进行比较的步骤包括以下步骤:
C11、将当前输入的源操作数与数据寄存器组中的每个有效数据进行比较,所述数据寄存器组中按序存储有已经过比较运算的源操作数;
C12、根据步骤C11比较后的结果判定当前源操作数的位次;
C13、根据当前源操作数的位次对数据寄存器组中数据进行移位操作,并将当前源操作数按其位次存入数据寄存器组中;
C14、重复执行步骤C11-C13,直到比较完最后一位源操作数。
本发明还提供一种执行比较运算的模块,用于对多个源操作数进行比较运算,包括:
执行单元,用于执行比较指令,从指令中获取源操作数初始地址和源操作数长度信息,从初始地址开始逐个读出源操作数,直到指令中所限定的长度;
比较模块,用于对逐个输入的源操作数进行比较,将比较结果根据指令要求进行存储和/或输出。
在一种实施例中,所述比较模块包括:
数据寄存器组,用于按序存储已经过比较运算的源操作数;
比较器组,用于将当前输入的源操作数与数据寄存器组中的每个有效数据进行比较;
控制判断逻辑单元,用于根据比较器输出的比较结果判定当前源操作数的位次,根据当前源操作数的位次对数据寄存器组中数据进行移位操作,并将当前源操作数按其位次存入数据寄存器组中;
输出管理逻辑单元,用于按照指令要求进行存储和/或输出。
本发明还提供一种执行比较运算的模块,用于对多个源操作数进行比较运算,包括:
数据寄存器组,用于按序存储已经过比较运算的源操作数;
比较器组,用于将当前输入的源操作数与数据寄存器组中的每个有效数据进行比较;
控制判断逻辑单元,用于根据比较器输出的比较结果判定当前源操作数的位次,根据当前源操作数的位次对数据寄存器组中数据进行移位操作,并将当前源操作数按其位次存入数据寄存器组中;
输出管理逻辑单元,用于按照指令要求进行存储和/或输出。
本发明还提供一种执行比较运算的模块,用于对逐个输入的多个源操作数进行比较运算,所述比较运算为求最大值、最小值、最大值位置、最小值位置中的至少一种,包括:
数据寄存器组,用于按序存储已经过比较运算的源操作数;
比较器组,用于将当前输入的源操作数与数据寄存器组中的每个有效数据进行比较;
位次寄存器组,用于记录每个输入源操作数的位次;
输出管理逻辑单元,用于按照指令要求进行存储和/或输出。
本发明的有益效果是:本发明与传统比较指令在一次执行过程完成两个源操作数的比较不同,本发明指令在一次执行过程中,可以对地址连续的多个数据(这里简称为源操作数组)进行比较,可以输出最大值、最小值、按增序/减序对源操作数组重新排序的数组、最大值所在的位置、最小值所在的位置,或记录按增序/减序重新排列的数组的顺序等多种结果,所以本发明可简单快速地完成地址连续的多个数据的比较,并根据指令的要求输出结果。
【具体实施方式】
本申请的特征及优点将通过实施例结合附图进行详细说明。
实施例一:
请参考图1,图1是用于执行连续多数据比较运算的模块结构示意图,包括执行单元(图中未示出)和比较模块1,执行单元用于执行比较指令,从指令中获取源操作数初始地址和源操作数长度信息,从初始地址开始逐个读出源操作数,直到指令中所限定的长度。比较模块1接收源操作数存储单元2送过来的源操作数,处理后将目的操作数写入目的操作数存储单元3,3a、3b表示存在两个不同的目的操作数。
本实施例的主要特点是:源操作数很多,存储在源操作数存储单元2中,在地址1存放着第一个源操作数,在地址2存放着第二个源操作数,......,在地址n存放着第n个源操作数,这些源操作数构成了一个源操作数组,地址1是其初始地址,n是源操作数长度;源操作数按时钟节拍从地址1开始依次被送给比较逻辑1;比较逻辑1产生的目的操作数不止1种,3a、3b分别表示两种不同的目的操作数;每种目的操作数可以有多个,构成目的操作数组,按地址顺序依次存入目的操作数存储单元3。
为了进一步说明本发明的处理特征,图2给出了该比较运算的流水处理过程。比较逻辑1在接收到第二个源操作数时便开始比较处理,在比较完第n个源操作数后输出目的操作数。n个源操作数构成源操作数组4,n1个目的操作数1构成了目的操作数组5a,n2个目的操作数2构成了目的操作数组5b。
与上述模块配合的还有用于执行比较运算的指令,适用于进行连续大数据量的比较操作。
该比较运算涉及的操作数分为2类,其中一类为源操作数组,另一类为目的操作数(组),即最大值、最小值、按增序/减序对源操作数组重新排序的数组、最大值所在的位置、最小值所在的位置,或记录按增序/减序重新排列的数组的顺序等多种结果。
由于源操作数组至少包含两个数据,因此指令需要指出源操作数的初始地址和数组长度。同理,目的操作数组包含的数据,即比较运算的输出数据也可能多于1个,因此指令需要指出目的操作数地址和输出数据长度。该指令支持多种寻址方式。
该指令格式可以是单一一条指令代码,包括操作码,能够指出源操作数初始地址的信息、能够指出源操作数长度的信息、能够指出目的操作数初始地址的信息、能够指出目的操作数长度的信息。如图3所示为由单一一条指令代码构成的指令格式,它包括操作码7、源操作数初始地址8、源操作数长度9、目的操作数初始地址10、目的操作数长度11。源操作数初始地址8、源操作数长度9、目的操作数初始地址10、目的操作数长度11这些信息可以由寄存器、存储器、立即数等提供。
对于指令格式为单一一条指令代码的情况,指令操作码根据实际比较运算的类型不同而不同,可以是求最大、求最小、递增排序、递减排序、找最大位置、找最小位置,及源操作数组中两个数据的比较。
该指令格式可以是两条指令代码构成,第一条指令代码包括第一操作码,能够指出源操作数初始地址的信息、能够指出源操作数长度的信息;第二条指令代码包括第二操作码,能够指出目的操作数初始地址的信息、能够指出目的操作数长度的信息。
对于指令格式为两条指令代码构成的情况,第一操作码根据实际比较运算的类型不同而不同,可以是求最大、求最小、递增排序、递减排序、找最大位置、找最小位置,及源操作数组中两个数据的比较。
对于指令格式为两条指令代码构成的情况,第二操作码执行数据搬移或存储操作,将比较后的数据结果存入目的存储单元中。
对于指令格式为两条指令代码构成的情况,第一操作码执行通用比较操作,可以实现求最大、求最小、递增排序、递减排序、找最大位置、找最小位置等中的几个或全部操作。
对于指令格式为两条指令代码构成的情况,并且第一操作码执行通用比较操作的情况,第二操作码可以执行有条件执行数据搬移或存储操作,即可以将求得的最大值、最小值、重新排序的数据、最大位置、最小位置等运算结果中某一项作为目的操作数,存入目的存储单元中。
指令格式可以推广到超过两条指令代码。第一条指令代码包括第一操作码,能够指出源操作数初始地址的信息、能够指出源操作数长度的信息。第一操作码执行通用比较操作,可以实现求最大、求最小、递增排序、递减排序、找最大位置、找最小位置等中的几个或全部操作。
对于指令格式为多条指令代码构成的情况,第二条指令代码包括第二操作码,能够指出第一目的操作数初始地址的信息、能够指出第一目的操作数长度的信息;第三条指令代码包括第三操作码,能够指出第二目的操作数初始地址的信息、能够指出第二目的操作数长度的信息。第四条指令代码包括第四操作码,能够指出第三目的操作数初始地址的信息、能够指出第三目的操作数长度的信息。以此类推,第n条指令代码包括第n操作码,能够指出第n-1目的操作数初始地址的信息、能够指出第n-1目的操作数长度的信息。
对于指令格式为多条指令代码构成的情况,第二、......、第n操作码可以执行有条件执行数据搬移或存储操作,即可以将求得的最大值、最小值、重新排序的数据、最大位置、最小位置等运算结果中某一项作为目的操作数,存入目的存储单元中。
如图4所示为由三条指令代码构成的指令格式,它包括操作码7a、操作码7b、操作码7c、源操作数初始地址8、源操作数长度9、目的操作数1初始地址10a、目的操作数1长度11a、目的操作数2初始地址10b、目的操作数2长度11b。操作码7a执行通用比较操作,比较逻辑会产生多种结果,如最大值、最小值、最大值位置、最小值位置等。操作码7b、操作码7c执行目的操作数的选取和存储操作,将需要的结果存入目的操作数存储单元中。
如图5所示为本发明比较模块的一种实施方式。该比较模块结构包括比较器组12、控制判断逻辑单元、存储将源操作数按递增或递减顺序重新排列的数据寄存器组15、记录与重新排列的数据对应位次的位次寄存器组16、输出管理逻辑单元17。控制判断逻辑单元可以包括控制判断单元13、移位逻辑单元14。
数据寄存器组15存储了当前时刻已经过比较运算的一个或多个输入源操作数的按序排列,其顺序可以是递增,也可以是递减。数据寄存器组根据需要可以包括一个或多个寄存器。
位次寄存器组16存储了当前多个输入源操作数的按序排列顺序,记录着每个输入源操作数的位次。比如,源操作数的输入依次是[8、4、5、3],按降序排列后,数据寄存器组中内容为[8、5、4、3],则位次寄存器组的内容为[1、3、2、4]。位次寄存器组根据需要可以包括一个或多个寄存器。
比较器组12执行当前输入源操作数与数据寄存器组15中的每个有效数据的对比操作,每个比较器的输出结果为‘1’或者‘0’。比较器12组根据需要可以包括一个或多个比较器。
比较器输出结果因比较操作的判断标准而不同,可以通过指令对其控制。1可以表示大于等于,0表示小于。1也可以表示大于,0表示小于等于。1也可以表示小于等于,0表示大于。1也可以表示小于,0表示大于等于。
控制判断单元13根据比较器组的输出结果来判定当前源操作数的位次。假设1表示大于等于,0表示小于。如果输出结果为0011......,则表示当前源操作数小于当前最大值和第二大值,说明当前源操作数为第三大值,可以排在第三的位置。
移位逻辑单元14根据控制判断单元13的结果,对数据寄存器组15和位次寄存器组16中的数据进行移位操作,并将当前源操作数存入相应数据寄存器,将当前源操作数被执行的次序存入相应的位次寄存器中。比如当控制判断单元13判定当前源操作数为第三大值时,需要将当前第三以及之后的数据整体向后移一位,将当前第三以及之后的位次数据整体向后移一位,然后将当前源操作数存入第三个数据寄存器,将当前源操作数的次序存入第三个位次寄存器中。
输出管理逻辑单元17是根据指令要求,将相应的结果写入目的操作数存储单元。输出结果可以是最大、求最小、递增排序、递减排序、找最大位置、找最小位置等中的任何一项。
本实施例不但可以求源操作数组的最大值、最小值、递增排列、递减排列,因为使用了位次寄存器组16,还可以实现求源操作数组的最大值位置、最小值位置、按增序/减序重新排列的数组的顺序等结果。
本实施例执行比较运算如图6所示,包括以下步骤:
在步骤S10,执行比较指令,从指令中获取源操作数初始地址和源操作数长度信息,也可以进一步从指令中获取目的操作数初始地址和目的操作数长度信息,然后执行步骤S11。
在步骤S11,从初始地址开始逐个读出源操作数,直到指令中所限定的长度,然后执行步骤S12。
在步骤S12,将源操作数逐个输入比较器,然后执行步骤S13。
在步骤S13,将当前输入的源操作数与数据寄存器组中的每个有效数据进行比较,然后执行步骤S14。
在步骤S14,根据步骤S13比较后的结果判定当前源操作数的位次,然后执行步骤S15。
在步骤S15,根据当前源操作数的位次对数据寄存器组和位次寄存器组进行移位操作,并将当前源操作数按其位次存入数据寄存器组中和将当前源操作数的位次存入位次寄存器组中,然后执行步骤S16。
在步骤S16,判断是否还有源操作数需要输入到比较器,如果有则执行步骤S12,将该源操作数输入到比较器,如果没有,则执行步骤S17。
在步骤S17,将比较结果根据指令要求进行存储和/或输出,存储时按照指令中目的操作数初始地址和目的操作数长度进行存储。
实施例二:
在处理求最大值、最小值、最大值位置、最小值位置时,比较器组可以只包括一个比较器,数据寄存器组可以只包括一个寄存器,位次寄存器组也可以只包括一个寄存器。请参考图7,图7是执行求最大值、最小值、最大值位置、最小值位置中至少一者的结构图,包括用于按序存储已经过比较运算的源操作数的数据寄存器19、用于将当前输入的源操作数与数据寄存器组中的每个有效数据进行比较的比较器18、用于记录每个输入源操作数的位次的位次寄存器20、用于按照指令要求进行存储和/或输出的输出管理逻辑单元17。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。