本发明为配合上述课题,可用短的寄存器指定字段指定多个寄存器,既使在寄存器数量很多的情况下,也可提供能抑制代码规模增加的信息处理装置。
可实现上述目的的信息处理装置,是执行规定程序的信息处理装置,具有:
由多个寄存器组成的寄存器群;
顺序读出程序中的机器指令,具有第1操作数和指定存储器有效地址的第2操作数,其中第1操作数由表示是否个别指定寄存器群中的一部分寄存器的个别字段以及表示是否成批指定寄存器群中另一部分寄存器的成批字段组成,检出指示用第1操作数指定的多个寄存器和用第2操作数指定的存储器之间数据传送的机器指令的读出装置;
对检出的机器指令的第1操作数中的个别字段和成批字段,判定各位有效或无效的判定装置;
产生对应于个别字段中判定为有效位寄存器的寄存器号码的第1产生装置;
在成批字段中判定为有效的情况下,顺序产生上述另一部分寄存器的寄存器号码的第2产生装置;
在由第1产生装置及第2产生装置产生的寄存器号码的寄存器与由第2操作数指定的有效地址开始连续的存储器领域之间,进行数据传送的传送装置。
采用这种结构,在可指定多个寄存器的机器指令中,可用少的位数指定多个寄存器,既使在信息处理装置中有多个寄存器,也可以抑制程序的代码规模的增加。
这里,上述寄存器群有m+n个寄存器,上述个别字段由分别对应于m个寄存器的m位构成,上述成批字段也可以由成批指定n个寄存器的1位构成。
采用这种结构,增加了权利要求1的效果,即可用1位的字段指定多个寄存器。
上述判定装置具有:
锁定在读出装置检出的机器指令的个别字段内容和成批字段内容,个别字段内容比成批字段内容锁定在高位的锁定装置;
从锁定装置的MSB的最初检出有效位,把表示该位位置的位置信号输出到第1及第2产生装置的位检出装置;
当通过传送装置进行1寄存器的数据传送时,在锁定装置锁定的位中,把位检出装置中的检出位进行复位的位复位装置。
上述位检出装置在上述复位后,可再次进行上述检出。上述第1、第2产生装置其构成可以是:根据上述位置信号,产生在1寄存器的数据传送周期中的1个寄存器号码。
在上述位置信号表示个别字段内的位位置时,上述第1产生装置产生对应于上述m个寄存器中该位位置的寄存器号码。
上述第2产生装置具有:
判定上述位置信号是否表示锁定装置中成批字段的位位置的成批字段判定装置;
当判定为表示成批字段的位位置时,对上述n个寄存器来说,在1传送周期中顺序产生1个寄存器号码的连续产生装置。
采用这种结构,首先传送在个别指定字段中的被指定寄存器数据,然后传送在成批指定字段中的被指定寄存器数据。
上述第2操作数可以由栈指示字指定,上述传送装置也可以进行由第1及第2产生装置产生的寄存器号码的寄存器与由上述栈指示字指定的栈领域之间的数据传送。
采用这种结构,由于实现了多个寄存器和栈领域间的数据传送,因此在子程序和中断处理程序中可高效率地进行数据保存和数据返回。
上述寄存器群具有m+n个寄存器,上述个别字段由分别对应于m个寄存器的m位构成,上述成批字段至少由2位构成,上述第2产生装置可以顺序产生对应于寄存器组的寄存器号码,该寄存器组由相应于成批字段位模式的n个寄存器中规定的多个寄存器组成。
采用这种结构,可以以寄存器组为单位成批指定。
上述机器指令指示由第1操作数指定的多个寄存器数据和由第2操作数指定的从执行地址开始的连续存储器领域的数据之间的运算,上述信息处理装置还具有执行由上述机器指令指示的运算的运算装置,上述传送装置把运算装置的运算结果传送到上述多个寄存器或上述存储器领域。
采用这种结构,可对应于存储器中的表格数据,进行成批数据更新的程序设计。
结合描述本发明实施例的附图,本发明的优点和特征将是明显的,其附图包括:
图2是表示传送本发明第1实施例的多个寄存器的指令规格图。图中「MOVM regs,<ea>」是指示多个寄存器数据在存储器的连续领域进行字组传送的机器指令,以助记忆形式表示。「MOVM<ea>,regs」是指示从存储器的连续领域向多个寄存器的字组传送的机器指令。
「MOVM」是OP代码,用于判别传送方向的前者和后者,分配不同的代码。
「<ea>」是指定存储器有效地址的操作数,从被指定地址的开头对连续的存储器领域传送。在本实施例中,根据栈指示字,通过间接寻址指定有效地址。
「regs」是用以指定传送对象的寄存器的操作数,表示可指定多个寄存器的寄存器指定字段。该寄存器指定字段是如图所示的8位结构,具有个别指定字段和成批指定字段。个别指定字段由位7-2的6位组成,由MSB开始按顺序的各位对应于R10、R11、R12、R13、R14、R15,其含意是在对应于写有“1”的位的寄存器之间传送。成批指定字段由位1(图中记为“other”)组成,成批指定其他寄存器R0-R9。其含意是在该位上写有“1”时,将在R0-R9的全部寄存器之间传送。在本结构中,通用寄存器共有16个(R0-R15)。
由上述个别指定字段、成批指定字段指定的寄存器希望分别对应于由编译程序决定的破坏寄存器、非破坏寄存器。这里,所谓破坏寄存器,指寄存器数据在子程序中被破坏,也就是保存·返回到栈中的未使用寄存器。所谓非破坏寄存器,指在子程序中寄存器数据被保留下来,也就是保存·返回到栈中的被使用寄存器。
图3是本实施例中微型计算机主要部分的结构方块图。
本微型计算机的主要部分有:指令寄存器100,指令读出器101,寄存器文件102,运算器群103,存储器104,寄存器指定字段读出器105。
指令寄存器100顺序保存来自存储器104的已读取指令。
指令读出器101读出保存在指令寄存器100中的指令,输出控制该指令执行的各种控制信号。特别是指令读出器101在读出图2所示的MOVM指令时,控制由寄存器指定字段读出器105依次输出的寄存器号码的寄存器与由<ea>操作数指定的存储器104上的连续领域之间的数据传送。
寄存器文件102由32位长的通用寄存器R0-R15和指示存储器104内的栈领域起始的32位长的栈指示字SP组成。
运算器群103具有多个运算器,通过指令读出器101的控制,进行由指令指定的数据运算和由指令的操作数指定的有效地址的运算。运算器群103中的一个运算器(以下称专用运算器)作为操作数地址的专用运算。专用运算器在执行图2所示的MOVM指令时,根据指令读出器101的控制,每1次传送32位数据,由于在<ea>操作数指定的栈指示字内容中相加了补偿值(4的倍数),则顺序算出连续领域的存储器地址。
存储器104存贮包含图2所示MOVM指令的程序和数据,在存储领域的一部分具有栈领域。
寄存器指定字段读出器105通过指令读出器101读出图2所示的MOVM指令时,读出上述regs操作数,并把被指定的寄存器的寄存器号码输出到寄存器文件102。
图4是寄存器指定字段读出器105的内部结构方块图。该寄存器指定字段读出器105的构成是:锁定201、优先编码器202、译码器203、寄存器号码变换电路204、成批指定位检出电路205、成批指定寄存器号码输出定序器206、寄存器处理结束检出电路211、AND门212、锁定213、寄存器数检出电路214、选择器215、选择器216。成批指定寄存器号码输出定序器206由AND门207、锁定208、增量器209、成批处理继续信号产生电路210组成。
锁定201在通过指令读出器101检出上述MOVM指令的时刻,锁定MOVM指令中的寄存器指定字段。被锁定的各个位“1”在每一个传送数据中,通过译码器203按顺序复位。图5表示锁定201的具体电路。图中由8个1位锁定电路组成。各锁定电路分别具有复位端子,当通过优先编码器202检出“1”时,再通过译码器203复位。
优先编码器202在锁定201内的寄存器指定字段中,每个数据传送周期,检出1个有“1”的位,并输出表示检出位位置的信号(以下称位位置)。图6A是表示优先编码器202输入输出逻辑的说明图(真值表)。图6A中,输入输出都用2进制数字表示。如有「输入」,优先编码器202在每个数据传送周期,从锁定201的MSB检出在起始时有“1”的位。检出的结果,如在「输出」栏,可输出用3位表示的位位置。此后,由于被检出的位“1”通过译码器203复位,则在每个传送周期可顺序检出图2所示的个别指定字段(bit7-2)中的“1”,进而检出成批指定字段(bit1)中的“1”。优先编码器202在从检出锁定201起始的位“1”到检出最后的位“1”之间,使位检出继续信号为有效“1”并予输出。
译码器203输出由优先编码器202检出的位位置,把对应于该位位置的锁定201的“1”复位为“0”。图6B是表示译码器203输入输出逻辑的说明图(真值表)。图6B中,输入输出都用2进制数字表示。例如,「输入」是来自优先编码器202的位位置“111”时,因为「输出」的bit7为“0”,则锁定201的位7被复位。这样,优先编码器202在下一个数据传送周期,就可以检出锁定201的更低位的“1”。
寄存器号码变换电路204输入来自优先编码器202的位位置,输出其对应寄存器的寄存器号码。图6C是表示寄存器号码变换电路204的输入输出逻辑的说明图(真值表)。图6C中,输入输出都用2进制数字表示。本实施例中,寄存器文件102的寄存器R0-R15分配2进制数字0000-1111的寄存器号码。例如,「输入」是“111”时,「输出」为R10的寄存器号码“1010”。如图6C的「输入」「输出」栏所示,寄存器号码变换电路204仅相对于表示个别指定字段的各位的位置,输出寄存器号码。
成批指定位检出电路205在来自优先编码器202的位位置中,检出表示成批指定字段的位位置,输出表示被检出内容的成批指定位检出信号。图7A是成批指定位检出电路205的具体电路,图7B是其输入输出逻辑。如图7A所示,成批指定位检出电路205由AND门601、RS触发器602、AND门603组成。AND门601检出位位置为“001”,即为成批指定字段。如图7B所示,RS触发器602通过AND门601检出成批指定字段的时刻置位,通过AND门603复位。当增量器209的计数值输出为“1001”的时刻,AND门603使RS触发器602复位。在通过优先编码器202检出成批指定字段的“1”的时刻,成批指定位检出信号为有效“1”,此后,增量器209的计数值为“1001”,在下一个周期为无效“0”。
成批指定寄存器号码输出定序器206在来自成批指定位检出电路205的成批指定位检出信号有效时,在每个数据传送周期输出一个寄存器R0-R9的寄存器号码。
AND门207在成批指定位检出信号有效时,向锁定208供给一个锁定时钟脉冲使其启动。
锁定208是4位长锁定,当成批指定位检出信号有效时,在每个数据传送周期锁定增量器209的输出。当增量器209的计数值为“1001”的时刻,由于成批指定位检出信号为无效“0”,则锁定208在成批指定位检出信号为无效“0”期间仍保持“1001”。
增量器209通过在锁定208的输出上加1,顺序输出寄存器号码“0000”-“1001”。图7D表示增量器209的输入输出逻辑。当图7D的「输入」为“1001”时,「输出」为“0000”;「输入」为“0000”-“1000”时,「输出」为加1值。这样,R0-R9的寄存器号码在数据传送周期都能一起顺序输出。
成批处理继续信号产生电路210输出表示成批指定寄存器的数据传送仍在继续的成批处理继续信号。图7C是该电路实例。成批处理继续信号产生电路210是OR门604,当来自增量器209的计数值为“0000”以外的值时,成批处理继续信号为有效(“1”)并予输出。
寄存器处理结束检出电路211提取来自优先编码器202的位检出继续信号和成批处理继续信号的逻辑和,作为寄存器处理继续信号并予输出。该寄存器处理继续信号在由寄存器指定字段指定的全部寄存器号码输出期间,为有效“1”。
AND门212在寄存器处理继续信号有效期间,禁止向指令寄存器供给时钟脉冲。
锁定213在由指令读出器101检出上述MOVM指令的时刻,锁定MOVM指令中的寄存器指定字段。
寄存器数检出电路214检出在锁定213寄存器指定字段中被指定的寄存器数,以及该寄存器数的数据中必要的存储器规模(传送数据规模)。图6D表示寄存器数检出电路214的输入输出逻辑。图中的「输入」是锁定213中的寄存器指定字段的值。「输入」栏的位7到2,例如『1个″1″』的列表省略了100000,010000,001000,000100,000010,000001 6种情况,仅表示“1”的个数。「输出1」表示寄存器数,「输出2 」表示传送数据规模。本实施例中,由于各寄存器是4字节长,则传送数据规模是输出1表示的寄存器数的4倍。
选择器215、选择器216把从寄存器号码变换电路204、增量器209、指令读出器101输出的寄存器号码,输出到寄存器文件中。
图8A、8B是用寄存器转移电平表示根据指令读出器101的MOVM指令控制顺序的说明图。
图8A中,MOVM[R10-R15,other],(SP)表示在全部寄存器的存储器中保存数据的情况。图9中,根据该指令,表示存储器数据存储顺序的模式。
(a1)部分表示把个别字段指定的寄存器数据传送到存储器的控制内容。例如(R10→(SP-4)),指令读出器101从寄存器号码10的寄存器读出数据,以栈指示字SP内容中的4值为地址,传送写入到存储器的数据。这时的寄存器号码由寄存器号码变换电路204产生,提供给寄存器文件。这时的存储器地址通过专用运算器从SP的内容中减去4而得到。本例中,指定了个别字段的全部寄存器,然而未被指定的寄存器并不能通过寄存器号码变换电路204产生寄存器号码,因此也就不必传送。
(a2)部分表示把成批字段指定的寄存器数据传送到存储器的控制内容。指令读出器101的控制内容与上述相同。但是不同的是,寄存器号码由增量器209产生。指令读出器101通过(a1)(a2)的数据传送,在专用运算器中每个数据传送从栈指示字SP内容减去4的倍数(4、8、12……),产生存储器地址。
(a3)部分为栈指示字的更新。指令读出器101通过专用运算器从栈指示字SP的内容中减去由寄存器数检出电路214产生的传送数据规模(或传送寄存器数*4),把其相减值存入SP。
图8B中,MOVM(SP),[R10-R15,other]表示在全部寄存器中,从存储器返回数据的情况。图10表示根据该指令,来自存储器的数据返回寄存器R0-R15的顺序的模式图。与该指令对应的指令读出器101的控制,仅栈指示字更新的起始点和数据传送方向(从存储器到寄存器)是不同的。除此以外,与上述是一样的,说明就省略了。
图11是图8A的MOVM[R10-R15,other],(SP)指令的执行时间图。图中的a-j是图4表示的符号,是以下的信号。带有“OX”的数值表示16进制数字。
a:指令寄存器的内容
b:锁定201中的寄存器指定字段
c:从优先编码器202输出的位位置
d:从寄存器号码变换电路204输出的寄存器号码
e:从优先编码器202输出的位检出继续信号
f:从成批指定位检出电路205输出的成批指定位检出信号
g:从增量器209输出的寄存器号码
h:从成批处理继续信号产生电路210输出的成批处理继续信号
i:从寄存器处理结束检出电路211输出的寄存器处理继续信号
j:从选择器216输出的寄存器号码
用图11所示的MOVM指令,在寄存器指定字段中被指定的多个寄存器数据,在每个传送周期可顺序传送。该图表示全部寄存器被指定的情况,然而就R10-R15来说,在以个别指定字段设定“0”的情况下,不产生传送周期。而且,在成批指定字段是“0”的情况下,不产生R0-R9的传送周期。
对上述结构的信息处理装置,以把多个数据从存储器传送到寄存器的情况为例,说明其动作过程。
通常,在子程序中的一些通用寄存器作为破坏寄存器,其他的作为非破坏寄存器。例如,根据编译程序,R0-R9定义为破坏寄存器时,破坏寄存器在子程序中,没有必要进行向栈的保存和从栈的返回。因此,在子程序内使用比破坏寄存器的个数(10个)更多的寄存器,而进行了必要个数非破坏寄存器的栈保存及返回。
例如在子程序内使用除破坏寄存器以外的2个寄存器(R10、R11)时,可在子程序的起始配置下述(1)的指令,在子程序的末尾配置下述(2)的指令。
MOVM[R10,R11],(SP)……(1)
MOVM(SP),[R10,R11]……(2)
因此,本微型机在该子程序执行开始后,对非破坏寄存器R10和R11进行栈保存,在子程序执行结束前,从栈返回R10和R11。(1)的指令执行动作在图11所示起始2周期结束。
下面说明随任务变换的上下文保存及返回的例子。
图12表示上述上下文保存程序的一个例子。
图中(11.1)是向予定上下文保存领域的栈指示字保存领域保存栈指示字SP值的指令。这里,把栈指示字的保存领域安排为方便的0xFFFFFFBC。(11.2)是把作为上下文保存领域的予定固定地址置位在栈指示字SP的指令。固定地址安排为方便的0x00000000。(11.3)是把全部寄存器内容保存在上下文保存领域的MOVM指令。(11.4)是把根据任务变换的新的执行任务用栈指示字值,从保存的领域装入栈指示字SP的指令。这里,为方便起见,将新的执行任务用栈指示字保存领域设定为0xFFFFFEBC。
由于该程序的执行,全部寄存器R0-R15的内容都传送到上下文保存领域。根据(11.3)的MOVM指令的传送动作,与图11所示的时间图一样,在16周期中执行。
根据上述本实施例,把寄存器分组为破坏寄存器和非破坏寄存器,由于把破坏寄存器设计为用1位指定的成批指定字段,则可用少的位数指定多个寄存器,既使在寄存器多的情况下,也不会增加估码规模。图13是已有MOVM指令与本实施例MOVM指令的对比。图中(1)、(2)、(11.3)表示本实施例MOVM指令的指令位模式和其指令助记忆。(1′)、(2′)、(11.3′)表示已有MOVM指令的指令位模式和其指令助记忆。用(1)(2)指令,第3字节的“0xC0”指定2个寄存器R10、R11,用(1′)(2′)指令,第3.4字节的“0x0030”指定寄存器R10、R11。用(11.3)指令,第3字节的“0xFE”指定全部寄存器R0-R15,用(11.3′)指令,第3.4字节的“0xFFFF”指定全部寄存器R0-R15。本实施例与以往相比,使用了一个MOVM指令,减小了1字节的代码规模。通常大多数程序都细分为多个子程序,MOVM指令频繁用于子程序的寄存器保存·返回。因此,实现了全部程序的代码规模的减小。
本实施例以编译程序定义寄存器,分成破坏寄存器和非破坏寄存器,然而也可以用其它条件把寄存器分组。
本实施例是多个寄存器的提取/存储,也可以使用多个寄存器的运算指令。
图14表示本发明第2实施例中传送多个寄存器的指令规格。与第1实施例所示图2的MOVM指令相比较,仅仅成批指定位为2位这点是不同的。下面对相同点不再说明,仅以不同点为中心加以说明。图14中,寄存器指定字段的位1、位0的含意是:“00”时不指定R0-R9中的任何一个寄存器,“01”时指定R0-R4,“10”时指定R5-R9,“11”时指定R0-R2、R5、R6。这里,R0-R4为第1组,R5-R9为第2组,R0-R2、R5、R6为第3组。用本实施例的MOVM指令,成批指定字段可以指定R0-R9寄存器的第1、2、3组中的任一组。
本实施例的微型计算机主要部分的结构与图3所示方块图大体一致。但是,寄存器指定字段读出器105的内部结构的一部分,由于读出上述2位的寄存器指定字段,因此是不同的。
图15是寄存器指定字段读出器的内部结构方块图。不同之处是:增加了锁定300;设置了成批指定寄存器号码输出定序器301,以代替成批指定寄存器号码输出定序器206。
锁定300在指定读出器101检出上述MOVM指令的时刻,锁定MOVM指令中的成批指定字段的2位,并把其值输出到成批指定寄存器号码输出定序器301。
成批指定寄存器号码输出定序器301在从锁定300输入的成批指定字段值指定第1组时,产生R0-R4的寄存器号码;在指定第2组时,产生R5-R9的寄存器号码;在指定第3组时,产生R0-R2、R5、R6的寄存器号码。
图16是成批指定寄存器号码输出定序器301的内部结构方块图。图中与图4同一符号的构成要素是相同的,省略其说明。
增量器302与图4的增量器209的不同是从0到4计数,如图16的输入输出逻辑表所示,当「输入」为“100”时,「输出」为“000”。
寄存器号码变换电路303如图16中的输入输出逻辑表所示,从锁定300输出的成批指定字段值对应于组的号码,并把从成批指定寄存器号码输出定序器301输出的计数值变换成组内的寄存器号码,顺序输出。
在如上述的本实施例中,由于把成批指定的寄存器进行了分组,则可以按根据用途指定适当的组来设计程序。
在上述第1、第2实施例中,已说明了MOVM指令,不仅限于传送指令,也适用于在多个寄存器和存储器的连续领域之间进行运算的运算指令。例如,ADDM(SP),[R10-R15,other],在适用加法指令的情况下,指令读出器101对运算器群103相加寄存器数据和存储器数据,并传送到存储器。这样,就可以进行程序设计,以便对存储器中的表格数据进行成批数据更新。
下面用图17A、图17B说明上述以外的令适用本发明的情况。图17A、图17B是在子程序调入指令、来自子程序的返回指令适合本发明的情况下,用寄存器转移电平表示指令读出器101控制过程的说明图。
在图17A中,CALL(disp,PC),[R10-R15,other]指令是指示调用子程序、把来自多个寄存器的数据保存在存储器的栈上的指令。操作数(disp,PC)表示子程序的开始地址(把位移加在程序计数器PC的值(该指令本身的指令地址)上而得到的)。另一个操作数[R10-R15,other]表示子程序调入时应该保存在栈中的寄存器数据,由已经说明的个别字段和成批字段组成。
图中,(a0)部分的寄存器转移表示程序计数器PC的值(从子程序返回的地址)的栈保存。
(a1)部分表示由个别字段指定的寄存器的栈保存。该图表示全部寄存器被指定的情况,若不被指定,则该寄存器的数据不保存。
(a2)部分表示由成批字段指定的寄存器的栈保存。虽然该图中显示了成批字段指定的情况,但若不指定,则R0-R9的数据不保存。
(a3)部分表示栈指示字的更新(栈确保用)。
(a4)部分表示程序计数器的更新,即向子程序的转移。
图17B中,RET,[R10-R15,other]是指示从栈向多个寄存器的数据返回和从子程序的返回的指令。操作数[R10-R15,other]由已说明了的个别字段和成批字段组成,表示子程序结束时应该从栈返回的寄存器数据。由于上述CALL指令成对使用,则与CALL指令相同的寄存器一定被指定。
图B中(b0)部分表示栈指示字的更新(栈开放用)。
(b1)部分表示程序计数器PC的更新,即从子程序的返回。
(b2)部分表示向由个别字段指定的寄存器的栈返回。该图也表示指定全部寄存器的情况,未被指定的寄存器数据不予保存。
(b3)部分表示由成批字段指定的寄存器的栈返回。该图也表示指定成批字段的情况,若未被指定,则R0-R9的数据不返回。
虽然本发明用带有附图的实例已经充分地描述了,但应注意,各种改变和变更对本技术来说都是显而易见的。除非这种改变和变更超出了本发明的范围,否则,它们将被包含在本发明中。