栈控制装置及其方法

文档序号:6650343阅读:226来源:国知局
专利名称:栈控制装置及其方法
技术领域
本发明涉及在微型信息处理机等执行程序的过程中使用的栈控制装置及其方法。
背景技术
一直以来,在微型信息处理机中,多次执行同样的程序时,将其处理部分作为子程序可以执行高效的程序。执行这样的子程序调用指令后,将该子程序之后要处理的程序的返回地址推入栈,然后跳跃到子程序的起始地址。此子程序的处理结束后,执行子程序的返回指令,从栈中抽取返回地址并跳跃到该地址。
这样的微型信息处理机,在执行程序指令时,为了高速进行向堆栈的推入及弹出,在硬件内部设置栈寄存器,随着程序的执行,通过硬件控制来自动推入或弹出程序计数器值或循环计数器值、循环结束地址。
另外,在微型信息处理机中,执行程序并超过栈的容量时,发生由意想不到的程序的停止或子程序的返回地址消失导致程序失控的问题。这类问题若只是增加栈的容量,由于硬件的规模无止境地增大,因此,采用另外的解决方案。
例如,专利文件1中记载的存储管理方式中,总线管理机构探测出使堆栈区溢出的中断时,转移堆栈区的栈指针所对应的地址,设定RAM的空闲区地址为栈指针,可使处理继续进行。
另外,专利文件2所记载的数据处理系统中的存储扩展栈装置中,硬件栈大致满溢的时候,通过向执行中的程序插入移动指令,将入口从硬件栈的最后移动到存储扩展栈,硬件栈大致为空的时候,通过向程序插入移动指令,将入口从存储扩展栈移动到硬件栈的最后,从而,硬件可继续执行程序。
特开平8-77004号[专利文件2]特开平8-255476号发明内容但是,上述专利文件1中的存储管理方式中,由于栈设计在主存储器上,更有,分配到扩展栈的数据是被更频繁地使用的栈的最前部的数据,因此难以高速处理。
另外,专利文件2中的存储扩展栈装置中,由于硬件栈及存储扩展栈等所有处理由控制逻辑回路管理及控制,控制逻辑回路变的庞大化及复杂化。
本发明的目的是,提供栈控制装置及其方法,消除这种传统技术的缺点,其结构不需要硬件规模的增大化或电路的复杂化,即使在执行有可能超过栈寄存器容量的程序的时候,也能继续执行而没有程序停止及失控的现象。
本发明为了解决上述课题,其特征为,包含执行由运算指令或子程序调用指令等多个指令构成的规定程序的主控制单元,将此规定程序中的程序计数器值、循环计数器值及循环结束地址等第一数据以LIFO形式存储在第一栈的栈寄存器;在包含暂时存储按此运算指令处理的中间结果等第二数据的存储单元的栈控制装置中,此存储单元包含以LIFO形式存储第一数据的第二栈;此装置包含监视第一栈的容量,其剩余容量达到规定的推入对象容量时发生推入中断,通知该主控制单元,又,达到规定的弹出对象容量时发生弹出中断,通知该主控制单元的中断控制单元;该主控制单元对应此推入中断,从第一栈的底部取出数据,推入第二栈,将此按照转移数重复的推入中断处理单元;对应此弹出中断,从第二栈弹出数据存储到第一栈的底部,将此按照返回数重复的弹出中断处理单元。
而且,主控制部中,其特征为包含执行由运算指令或子程序调用指令等多个指令构成的规定程序的第一工序;在栈寄存器中,将此规定程序中的程序计数器值、循环计数器值及循环结束地址等第一数据以LIFO形式存储到第一栈的第二工序;暂时将此运算指令处理的中间结果等第二数据存储到存储器上的第三工序的栈控制方法,它包含此存储器中向第二栈以LIFO形式存储第一数据的第四工序;包含监视第一栈的容量,其剩余容量达到规定的推入对象容量时发生推入中断,通知此主控制部,又,达到规定的弹出对象容量时发生弹出中断,通知此主控制部的中断控制工序;利用对应此推入中断的此主控制部,从第一栈的底部取出数据推入第二栈,将此按转移数重复的推入中断处理工序;利用对应此弹出中断的此主控制部,从第二栈弹出数据存储到第一栈的底部,将此按返回数重复的弹出中断处理工序。
根据本发明的栈控制装置,H/W栈的容量未满之前,随着中断控制器发生推入中断,主控制部从H/W栈的底部取出数据推入S/W栈,可做到一时间的保存,H/W栈的容量变空后,随着中断控制器发生弹出中断,主控制部从S/W栈弹出数据存储到H/W栈的底部而做到返回。如此,本发明的栈控制装置中,无需增大化及复杂化主控制部,即使执行可能超过H/W栈容量的程序,也能继续执行而没有程序停止及失控的现象。
而且,根据本发明的栈控制装置,由一次性对H/W栈进行多个数据的保存及返回,可减少推入及弹出中断的发生频度,更能防止伴随推入及弹出中断而发生的性能降低。


表示本发明的栈控制装置的一实施例的方框图。
表示图1中所示栈控制装置中栈寄存器的一部分的方框图。
说明图1中所示栈控制装置的推入中断的动作次序的流程图。
图3的动作中H/W栈及S/W栈中存储的数据的示意图。
图3的动作中H/W栈及S/W栈中存储的数据的示意图。
图3的动作中H/W栈及S/W栈中存储的数据的示意图。
图3的动作中H/W栈及S/W栈中存储的数据的示意图。
说明图1中所示的栈控制装置的弹出中断的动作次序的流程图。
图7的动作中H/W栈及S/W栈中存储的数据的示意图。
图7的动作中H/W栈及S/W栈中存储的数据的示意图。
图7的动作中H/W栈及S/W栈中存储的数据的示意图。
图7的动作中H/W栈及S/W栈中存储的数据的示意图。
图3的动作中H/W栈及S/W栈中存储的数据的示意图。
图3的动作中H/W栈及S/W栈中存储的数据的示意图。
图3的动作中H/W栈及S/W栈中存储的数据的示意图。
图3的动作中H/W栈及S/W栈中存储的数据的示意图。
图7的动作中H/W栈及S/W栈中存储的数据的示意图。
图7的动作中H/W栈及S/W栈中存储的数据的示意图。
图7的动作中H/W栈及S/W栈中存储的数据的示意图。
图7的动作中H/W栈及S/W栈中存储的数据的示意图。
图1中所示的栈控制装置中执行的程序的例图。
图1中所示的栈控制装置的其他实施例中H/W栈及S/W栈中存储的数据的示意图。
图1中所示的栈控制装置的其他实施例中H/W栈及S/W栈中存储的数据的示意图。
图1中所示的栈控制装置的其他实施例中H/W栈及S/W栈中存储的数据的示意图。
图1中所示的栈控制装置的其他实施例中H/W栈及S/W栈中存储的数据的示意图。
图1中所示的栈控制装置的其他实施例中H/W栈及S/W栈中存储的数据的示意图。
图1中所示的栈控制装置的其他实施例中H/W栈及S/W栈中存储的数据的示意图。
图1中所示的栈控制装置的其他实施例中H/W栈及S/W栈中存储的数据的示意图。
图1中所示的栈控制装置的其他实施例中H/W栈及S/W栈中存储的数据的示意图。
符号的说明10栈控制装置12主控制部14ROM16中断控制器18栈寄存器20RAM22控制总线24数据总线26H/W栈28S/W栈具体实施方式
下面参照附图详细说明根据本发明的栈控制装置的实施例。例如,如图1所示,本发明的栈控制装置10在主控制部12执行内置在ROM(Read-Only Memory)14中的程序时,将由子程序的返回地址等数据存储到栈寄存器16中,为了使其数据不超过栈寄存器16的容量,由中断控制器18控制,在栈寄存器16中的硬件(HardwareH/W)栈26及RAM(Random Access Memory)20中的软件(SoftwareS/W)栈28之间进行数据收发。另外,与本发明无直接关系的部分省略图示,避免冗长的说明。
另外,本实施例的栈控制装置10,通过传送控制信号的控制总线22,相互连接主控制部12、ROM14、栈寄存器16、中断控制器18及RAM20,通过传送数据信号的数据总线24,相互连接主控制部12、ROM14、栈寄存器16、中断控制器18及RAM20。
主控制部12,具有本装置全部动作的控制及统括?功能,由CPU(Central Processing Unit)等构成,特别地,将存储在ROM14中的程序指令顺次读出并执行。而且,主控制部12具有,将与程序执行有关的程序计数器值、循环计数器值及循环结束地址等数据推入H/W栈26、又弹出此数据的功能。
例如,主控制部12,在执行的指令是子程序调用指令时,将子程序的返回地址推入H/W栈26后处理子程序,处理完子程序后从H/W栈26弹出其返回地址,并继续处理其返回地址表示的指令。而且,主控制部12,从中断控制器18接收外部中断指令时,将处理中的指令的下一个指令的返回地址推入H/W栈26后处理外部中断,处理完外部中断后从H/W栈26弹出其返回地址,并继续处理其返回地址表示的指令。
本实施例的主控制部12,特别地,响应由中断控制器18通过控制总线22供给的推入中断指令及弹出中断指令,分别执行推入中断处理及弹出中断处理。主控制部12在推入中断处理中,从H/W栈26的底部取出数据并推入S/W栈28,将此操作以规定的转移数依次重复,在弹出中断处理中,从S/W栈28弹出数据并存储到H/W栈26的底部,将此操作以规定的返回数依次重复。规定的转移数和规定的返回数最好是同样的数,以下以S/W存储数来表示。
本实施例中,主控制部12参照硬件的内部地址存取寄存器30,可向H/W栈26的底部进行存取。内部地址存取寄存器30如图2所示,包含在栈寄存器16中,主控制部12若向内部地址存取寄存器30指示读出,则从H/W栈26的底部取出数据,若指示写入,则向H/W栈26的底部存储数据。
ROM14具有存储运算指令或子程序调用指令等多个指令构成的程序的功能,使用非易失性存储器等。本实施例的ROM14也存储着表示主控制部12中执行的推入中断处理及弹出中断处理的程序。
栈寄存器16是能够存储多个数据的数据存储结构的一种,在本实施例中,作为高速读写程序指令的执行所必要的数据的H/W栈26,例如最好包含,程序的子程序或中断处理程序等处理程序的返回地址,即,存储程序计数器值的程序计数器值栈,存储多重循环中的循环次数的循环计数器值栈及存储此循环的循环结束地址的循环结束地址栈。
H/W栈26,通常以最后写入的数据最先读出的后入先出(LIFOLast-In First-Out)的方式动作,此时,数据对于栈的写入被称为推入,而数据由栈读出被称为弹出。
本实施例中,若H/W栈26中所存储的数据的字节数全部相同,则以此字节数除H/W栈26的总容量,可算出H/W栈26中可存储的最大数据量。H/W栈26若超出此最大数据量而弹出数据,则溢出。
而且,本实施例的栈寄存器16,如图2所示,也包含内部地址存取寄存器30及状态寄存器32。内部地址存取寄存器30具有H/W栈26的底部数据地址即读出内部地址,及从该底部数据向底部方向移动一个数据的数据量的地址的写入内部地址,被主控制部12控制而指示“读”时,基于读出内部地址从H/W栈26的底部取出数据,指示“写”时,基于写入内部地址向H/W栈26的底部写入数据。
而且,栈寄存器16可将这些读出内部地址及写入内部地址的指针随“读”的指示自动递减,或随“写”的指示自动递增。栈寄存器16可在H/W栈26中没有存储数据时指示“读”的情况,或在存储最大数据量时指示“写”的情况下,使用状态寄存器32通知错误。
中断控制器18,通过控制总线22控制栈寄存器16的栈指针,且通过控制总线22,将响应外围设备等外部装置的中断请求所发生的外部中断通知到主控制部12。中断控制器18具备,允许外部中断时表示1、禁止时表示0的标记寄存器,即外部中断许可寄存器,当外部装置有中断请求时参照此寄存器,限于允许的情况通知外部中断。外部中断许可寄存器将此初始值定为1。
本实施例的中断控制器18,特别地具有监视H/W栈26的容量,响应其容量发生中断的功能。例如,中断控制器18,判定H/W栈26的剩余容量为推入对象容量时发生推入中断,判定H/W栈26的剩余容量为弹出对象容量时发生弹出中断,分别供给主控制部12。
中断控制器18可以在通知推入中断及弹出中断之前,将外部中断许可寄存器设定为零,由主控制部12中的推入中断处理及弹出中断处理返回时,将外部中断许可寄存器设定为1。
中断寄存器18所判定的这些对象容量,例如,最好表示为可推入H/W栈26中的数据单位,推入对象容量最好是不至于减到0的数据量,理想的是一个数据的数据量。而且,弹出对象容量最好在最小为S/W存储量+一个数据的数据量,最大为H/W栈26的最大数据量的范围内,SW存储量越多,使对象容量越大为宜。
而且,中断寄存器18具有,允许弹出中断时表示1、禁止时表示0的标记寄存器,即弹出中断许可寄存器,H/W栈26的剩余容量判定为弹出对象容量时,也可以参照此寄存器,限于允许的情况通知中断。弹出中断许可寄存器将其初始值定为零。
此弹出中断许可寄存器也被主控制部12控制,主控制部12在弹出中断处理结束之前判定S/W栈28中存储的数据量,可限于此数据量为零时将弹出中断许可寄存器设定为零。
RAM20主要作为暂时存储运算中的结果或数据等的运算存储器使用。特别地,本实施例的RAM20设置转移用的数据存储区,即,S/W栈28,可响应主控制部12的推入中断处理及弹出中断处理。而且,S/W栈28可以以LIFO方式动作。
其次,关于本实施例中的栈控制装置10的动作,参照图3的流程图说明推入对象容量为一个数据的数据量、转移数为一个数据的数据量时,在中断控制器18发生推入中断时转移H/W栈26中的数据的动作。
本实施例的栈控制装置10中,栈寄存器18中的H/W栈26实际上可存储多个数据,但是图4中为了避开复杂化的说明,将最大数据量定为5个,由可存储数据的区域H1、H2、H3、H4及H5而构成。图4中的H/W栈26,其左侧作为栈的起始,右侧作为栈的底侧。此H/W栈26中,若数据被推入,通常存储到起始区域H1,之前存储在H1中的数据被挪到H2区域存储。同样,响应数据的推入,区域H2、H3、H4中存储的数据被挪到区域H3、H4、H5。图4中所示的H/W栈26中,在各区域内表示了数据被推入的顺序的索引号,未标索引号的区域当作无数据。
而且,本实施例的RAM20中的S/W栈28也与H/W栈26相同,如图4所示,将最大数据量定为5个,包含可存储数据的区域S1、S2、S3、S4及S5,若数据被推入并存储到区域S1,则之前存储在区域S1、S2、S3、S4中的数据分别挪到区域S2、S3、S4、S5。图5、图6及图7中的H/W栈26及S/W栈28也具有与图4相同结构。
本实施例中,首先,在主控制部12中,开始对H/W栈26的数据推入指令(S102),此数据通过数据总线24推入H/W栈26。
但是,H/W栈26中,其剩余容量被中断控制器18监视着,剩余容量被判定是否为推入对象容量(S104)。此判定的结果,若H/W栈26的剩余容量为推入对象容量,即为一个数据量时,进入步骤S106,此外的情况进入步骤S114而结束推入指令。
本实施例中,在步骤S104中,例如图4所示,数据被存储在H/W栈26的区域H1、H2、H3及H4中,且区域H5中未存储数据时,判定剩余容量为一个数据量而进入步骤S106。因此,H/W栈26的剩余容量不会减少到0个数据。而且,此时,S/W栈28中,一个数据都没有存储。
接着,在步骤S106中,中断控制器18中,发生推入中断,且,外部中断被禁止,外部中断许可寄存器被设定为零。之后,推入中断通过控制总线22通知到主控制部12。
主控制部12中,响应推入中断的通知,开始推入中断处理。在此,伴随跳跃到执行推入中断处理的函数,返回处的地址被推入H/W栈26,如图5所示,H/W栈26中,区域H1、H2、H3、H4及H5的全部被存储数据,剩余容量成为零。
然后,推入中断处理中,将H/W栈26的底部所存储的数据转移到S/W栈28(S108),即,如图6所示,取出存储在区域H5中的数据,推入区域S1。将此按转移数重复,即,仅仅重复一个数据的数据量的次数。由此,H/W栈26的剩余容量成为由区域H5构成的一个数据的数据量。
而且,这样向S/W栈28弹出数据时,根据其后的处理,H/W栈26的剩余容量成为弹出对象容量时,因为有必要响应弹出中断,主控制部12控制中断控制器18,将弹出中断寄存器设定为1(S110)。
这样,主控制部12中的推入中断处理结束,返回处的地址从H/W栈26中被弹出,如图7所示,H/W栈26的剩余容量为由区域H4及H5而构成的2个数据的数据量。而且,中断控制器18中,响应来自推入中断处理的返回,在步骤S106中禁止的外部中断被允许(S112),外部中断许可寄存器被设定为1。然后,进入步骤S114,推入指令结束。
另一方面,关于本实施例中的栈控制装置10的动作,参照图8的流程图说明弹出对象容量为3个数据的数据量、转移数为1个数据的数据量时,在中断控制器18发生弹出中断时、将转移到S/W栈28的数据返回到H/W栈26的动作。
在此,图9、图10、图11及图12中所示的H/W栈26及S/W栈28,也与图4中所示的结构同样。
本实施例中,首先,主控制部12中,开始从H/W栈26弹出数据的指令(S202),从H/W栈26弹出一个数据。
此时,中断控制器18中,判定监视中的H/W栈26的剩余容量是否为弹出对象容量(S204)。此判定的结果,若H/W栈26的剩余容量为弹出对象容量,即,恢复到3个数据的数据量时,进入步骤S206,此外的情况下进入步骤S218而结束弹出指令。
本实施例中,在步骤S204,例如,如图9所示,H/W栈26的区域H1及H2中存储着数据,且区域H3、H4及H5中没有存储数据的情况下,判定为剩余容量恢复到3个数据的数据量而进入步骤S206。而且,此时,S/W栈28中,1个数据存储在区域S1。
然后,在步骤S206,中断控制器18中,判定弹出中断是否为允许,即,弹出中断许可寄存器表示1还是0,表示1时进入步骤S208,表示0时进入步骤S218,结束弹出指令。
步骤S208中,中断控制器18中,发生弹出中断,且,外部中断被禁止,外部中断许可寄存器被设定为零。之后,弹出中断通过控制总线22通知到主控制部12。
主控制部12中,响应弹出中断的通知,开始弹出中断处理。在此,伴随跳跃到执行弹出中断处理的函数,返回处的地址被推入H/W栈26,如图10所示,H/W栈26中,3个量的数据被存储到区域H1、H2及H3,剩余容量成为由区域H4及H5组成的2个量的数据。
之后,在弹出中断处理中,使S/W栈28的起始存储的数据返回到H/W栈26的底部(S210),即,如图11所示,弹出区域S1中所存储的数据,存储到区域H4。将此以转移数重复,即,以1个数据的数据量的次数重复。由此,S/W栈28中存储的数据量成为零。
另外,在弹出中断处理中,判定S/W栈28中的剩余容量(S212),当S/W栈28的剩余容量为5个数据量时,即,1个数据也没有存储的情况下,进入步骤S214,S/W栈28中尚有数据存储时,进入步骤S216。
步骤S214中,主控制部12控制中断控制器18,禁止弹出中断,弹出中断许可寄存器设定为零,之后,进入步骤S216。这样禁止弹出中断的理由是,当S/W栈28中没有数据存储时,H/W栈26的剩余容量成为弹出对象容量,即使主控制部12执行弹出中断处理,也无法从S/W栈28取出数据,弹出中断本身成为徒劳的处理。
这样,主控制部12中的弹出中断处理结束,返回处的地址从H/W栈26中被弹出,如图12所示,H/W栈26的剩余容量成为由区域H4及H5构成的2个数据量。而且,中断控制器18中,响应来自弹出中断处理的返回,在步骤S208中禁止的外部插入被允许(S216),外部中断许可寄存器被设定为1。接着,进入步骤S218,弹出指令结束。
但是,关于本实施例中的栈控制装置10的动作,推入对象容量为一个数据量、转移数为二个数据量时,在中断控制器18发生推入中断时转移H/W栈26中的数据的动作也可以参照图3的流程图说明。但是,此时的H/W栈26及S/W栈28内的数据的动作,如同图13、图14、图15及图16所示的表示。在此,图13、图14、图15及图16中表示的H/W栈26及S/W栈28,也与图4中表示的结构相同。
此时,图3的S102及S104阶段中,如图13中所示,H/W栈26的区域H1、H2、H3及H4中存储有数据,区域H5中没有存储数据。而且,此时,S/W栈28中,一个数据也未存储。
图3的S106阶段中,由于主控制部12开始推入中断处理,伴随跳跃到执行推入中断处理的函数,返回处的地址被推入H/W栈26,如图14所示,H/W栈26的区域H1、H2、H3、H4及H5中,全部被存储数据,H/W栈26的剩余容量成为零。在此,S/W栈28中,也是一个数据也未存储。
图3的S108的阶段中,将存储在H/W栈26的底部的数据保存到S/W栈28,将此以转移数,即,以2个数据的数据量的次数重复,如同图15中所示,H/W栈26的区域H1、H2及H3中存储着数据,而区域H4及H5中未存储数据。
此时,为了从H/W栈26的底部依次取出数据而弹出到S/W栈28,推入中断处理前的H/W栈26的区域H5中所存储的索引号1的数据,被存储到S/W栈28的区域S2,存储在区域S4的索引号2的数据,被存储到区域S1中。如此,S/W栈28中,2个数据被转移到区域S1及S2。
而且,图3的S110的阶段后,主控制部12中的推入中断处理结束,在此,由于推入中断处理的返回地址从H/W栈26中弹出,如图16所示,H/W栈26中,从区域H1弹出索引号5的数据,在区域H1及H2中存储数据,区域H3、H4及H5中没有存储数据。此时,S/W栈28保持图3的S110阶段的状态,即,图15中所示状态。
图3的S112及S114阶段中,H/W栈26及S/W栈28内的数据保持图16中所示的状态。
另外,关于本实施例的栈控制装置10的动作,弹出对象容量为5个数据量、返回数为2个数据量时,中断控制器18发生弹出中断时将转移到S/W栈28中的数据返回到H/W栈26的动作也可以参照图8的流程图说明。但是,此时的H/W栈26及S/W栈28中的数据的动作表示如图17、图18、图19及图20中所示。在此,图17、图18、图19及图20中表示的H/W栈26及S/W栈28也与图4中所示的结构相同。
此时,图8的S202、S204及S206阶段中,如图17所示,H/W栈26中一个数据都没有存储。而且,此时,S/W栈28的区域S1及S2中存储着数据,区域H3、H4及H5中没有存储数据。
图8的S208阶段中,由于主控制部12开始弹出中断处理,伴随跳跃到执行弹出中断处理的函数,返回处的地址被推入H/W栈26,如图18所示,H/W栈26的区域H1中存储数据,区域H2、H3、H4及H5中没有存储数据。在此,S/W栈28保持图8的S206阶段的状态,即,图17中所示状态。
图8的S210阶段中,由于将S/W栈28的起始存储的数据返回到H/W栈26的底部,将此操作以返回数即2个数据量的次数重复,因而,如图19中所示,H/W栈26的区域H1、H2及H3中存储着数据,区域H4及H5中没有存储数据。在此,S/W栈28中一个数据都没有存储。
此时,为了从S/W栈28依次弹出数据,存储到H/W栈26的底部,弹出中断处理前的S/W栈28的区域S1中存储的索引号2的数据被存储到H/W栈26的区域H2,区域S2中存储的索引号1的数据被存储到区域H3。如此,两个数据从S/W栈28返回到区域H2及H3。
图8的S212及S214阶段中,H/W栈26及S/W栈28中的数据,保持图19中表示的状态,此S214阶段之后,主控制部12中的弹出中断处理结束,在此,由于来自弹出中断处理的返回地址从H/W栈26中弹出,因而如图20所示,H/W栈26中,从区域H1弹出索引号3的数据,区域H1及H2中存储数据,区域H3、H4及H5中未存储数据。此时,S/W栈28保持图19所示的状态。
图8的S216及S218阶段中,H/W栈26及S/W栈28中的数据保持图20所示的状态。
如此,本发明的栈控制电路中,可以响应各种转移数及返回数进行处理。此转移数及返回数为,至少需要一个数据量,而且,即使多,也希望使用可以用算式[(H/W栈的最大数据量-1)÷2](小数点以下舍去)算出的最佳值。而且,虽然转移数及返回数也可以超出此最佳值,但,为了使接下来的推入中断及弹出中断之间的时间能够长一些,希望在此算出值之内。而且,返回数在此最佳值以上时,弹出对象容量可以是H/W栈26的最大数据量,即,H/W栈26中被弹出后存储的数据量减少到0时,可发生弹出中断。
但是,栈控制装置中,栈的转移及返回不是那么频繁进行时,可以通过减少转移数及返回数,节约数据移动花费的周期。另一方面,栈控制装置中,如容纳的深部等,H/W栈几乎被使用完时,在子程序被重复调用的场合,若减少转移数及返回数,则频繁地发生推入中断及弹出中断,也会成为降低性能的原因,最好是增多转移数及返回数。
例如,最大数据量设为5个的H/W栈26中,剩余容量为2个数据量时,执行如图21中所示的程序40的场合,若转移数及返回数少,则每次调用子程序时进行栈的转移及返回,若转移数及返回数多,则最初子程序被调用,只一次将2个数据从H/W栈26转移到S/W栈28,之后,能达到只用H/W栈26的高速处理,可以维持性能。
而且,本发明的栈控制回路,最好是具有判定推入中断处理及弹出中断处理的各个最佳转移数及返回数的功能,例如,完成此功能的转移/返回数判定程序,最好是主控制部12能够执行的,ROM14中可存储的。
此时,主控制部12,将转移数及返回数存储在RAM20等存储器中,当执行推入中断处理及弹出中断处理时,分别读出转移数及返回数而使用。
而且,主控制部12,要经常或每一定间隔执行转移/返回数判定程序,判定现行处理中的最佳转移数及返回数,存储在存储器中。由此,主控制部12可以经常使用最佳转移数及返回数,分别执行推入中断处理及弹出中断处理。
转移/返回数判定程序,例如,响应栈的转移及返回的频度,可判定最佳转移数及返回数,栈的转移及返回被频繁地进行时,增加转移数及返回数以提高性能,栈的转移及返回不是很频繁时,减少转移数及返回数,节约移动数据所花费的周期。
关于使用保存/返回数判定程序的栈控制装置10的动作,根据转移的频度,执行推入中断及弹出中断的动作,可参照图22、图23、图24、图25、图26、图27、图28及图29中所示H/W栈26及S/W栈28内的数据的动作说明。在此,图22、图23、图24、图25、图26、图27、图28及图29中所示H/W栈26及S/W栈28,也与图4中所示的结构相同。
此动作中,作为初始状态,将推入对象容量、弹出对象容量、转移数及返回数分别定为一个数据量。
首先,如图22所示,H/W栈26中,区域H1、H2、H3及H4中存储数据,区域H5中无数据存储,S/W栈28中,一个数据也没有存储。在此,H/W栈26的剩余容量为一个数据量,即为推入对象容量,因此发生推入中断,转移H/W栈26的底部的一个数据,如图23所示,H/W栈26的区域H4的数据被取出,弹到S/W栈28的S1中。
然后,如图24所示,数据弹到H/W栈26,区域H1、H2、H3及H4中存储数据,剩余容量由H5成为一个数据量。
此时,H/W栈26的剩余容量为推入对象容量的缘故,发生推入中断,H/W栈26的底部的数据以转移数转移即转移一个,如图25所示,H/W栈26的区域H4的数据被取出,弹到S/W栈28的S1中。
但是,转移/返回数判定程序若检测出一个数据量的推入中断以规定次数如此连续时,则增加转移数及返回数到例如2个数据量,弹出对象容量为5个数据量。
而且,对于其后的处理,如图26所示,从H/W栈26中弹出数据的结果,H/W栈26的剩余容量成为5个量数据,即,成为弹出对象容量。
此时,由于H/W栈26的剩余容量为弹出对象容量,因而发生弹出中断,将S/W栈28的数据以返回数返回即返回2个,如图27所示,区域S1及S2的数据从S/W栈28弹出,分别存储到H/W栈26的区域H1及H2。
而且,此后的处理中,如图28所示,H/W栈26中推入数据的结果,H/W栈26的剩余容量为一个数据量,即,成为推入对象容量。
此时,由于H/W栈26的剩余容量为推入对象容量,因此发生推入中断,将H/W栈26的底部的数据以转移数转移即转移2个,如图29所示,H/W栈26的区域H3及H4的数据被取出,分别弹到S/W栈28的S1及S2中。
如此,在栈控制回路中,保存/返回数判定程序响应保存及返回的频度,即,响应推入中断及弹出中断的频度,可变更为最佳转移数及返回数。而且,此时,也可变更推入对象容量及弹出对象容量。
而且,本实施例中,转移/返回数判定程序的推入中断以规定次数连续的事情作为频度的条件,但也可以将下次推入中断发生为止的时间、或其间处理的程序的量作为频度的条件。而且,转移/返回数判定程序,不只对推入中断,也可对弹出中断设定频度的条件。而且,转移/返回数判定程序也可响应程序执行的场所,判定最佳的转移数及返回数。
本实施例中,主要假设将本发明的栈控制回路应用到微型信息处理机时做了说明,但是本发明的栈控制回路及其控制方法在内置程序、依次处理指令的数据处理装置中也能有效使用,例如微型控制器或数字信号处理机(Digital Signal ProcessorDSP)等。
权利要求
1.栈控制装置,具备执行由运算指令或子程序调用指令等多个指令构成的程序的主控制单元;具有将上述规定程序中的程序计数器值、循环计数器值及循环结束地址等第一数据以LIFO形式存储的第一栈的栈寄存器;暂时存储上述运算指令处理的中间结果等第二数据的存储单元,其特征在于,上述存储单元包含,以LIFO形式存储第一数据的第二栈,该装置包含中断控制单元,其监视第一栈的容量,在该剩余容量成为规定的推入对象容量时发生推入中断并通知上述主控制单元,另外,在成为规定的弹出对象容量时发生弹出中断并通知上述主控制单元,上述主控制单元包含推入中断处理单元,其响应上述推入中断,从第一栈的底部抽取数据并推入第二栈,将此操作以规定的转移数重复;以及弹出中断处理单元,其响应上述弹出中断,从第二栈弹出数据并存储到第一栈的底部,将此操作以规定的返回数重复。
2.权利要求1中记载的栈控制装置,其特征在于,上述中断控制单元包含表示上述弹出中断的许可或禁止、初始状态下表示禁止的第一标记寄存器;以及表示响应来自外围设备等外部装置的中断请求的外部中断的许可或禁止、初始状态下表示许可的第二标记寄存器;上述剩余容量达到上述规定的推入对象容量时,设定第二标记寄存器为禁止后发生推入中断,之后,从推入中断返回时设定第二标记寄存器为许可;另外,上述剩余容量达到上述规定的弹出对象容量时,且限于第一标记寄存器表示许可时,设定第二标记寄存器为禁止后发生弹出中断,之后,从弹出中断返回时设定第二标记寄存器为许可;上述推入中断处理单元向第二栈推入数据时,将第一标记寄存器设定为许可;上述弹出中断处理单元从第二栈弹出数据时,且限于第二栈中存储的数据量为零时,将第一标记寄存器设定为禁止。
3.权利要求1或2所述的栈控制装置,其特征在于,上述栈寄存器包含内部地址存取寄存器,此内部地址存取寄存器具有第一栈的底部数据的地址即读出内部地址,和从该地址向底部方向移动一个数据的数据量的写入内部地址,上述推入中断处理单元对上述内部地址存取寄存器的读出内部地址进行存取,从第一栈的底部取出数据,上述弹出中断处理单元对上述内部地址存取寄存器的写入内部地址进行存取,向第一栈的底部存储数据。
4.权利要求1至3的任何一个中所述的栈控制装置,其特征在于,上述规定的推入对象容量为一个第一数据的数据量,上述推入中断处理单元为由上述主控制单元可执行的第一程序,上述弹出中断处理单元为由上述主控制单元可执行的第二程序,上述主控制单元,响应上述推入中断,将来自第一程序的第一返回地址推入第一栈后执行第一程序,之后,结束第一程序时,将第一返回地址从第一栈中弹出,返回第一返回地址表示的指令;另外,响应上述弹出中断,将来自第二程序的第二返回地址推入第一栈后执行第二程序,之后,结束第二程序时,将第二返回地址从第一栈中弹出,返回第一返回地址表示的指令。
5.权利要求1至4的任何一个中所述的栈控制装置,其特征在于,上述规定的弹出对象容量为一个第一数据的数据量以上、第一栈能够存储的第一数据的最大数据量以下,上述规定的转移数及上述规定的返回数为,一个第一数据的数据量以上,可用算式[(上述最大数据量-1)÷2](小数点以下舍去)算出的值以下。
6.权利要求5中记载的栈控制装置,其特征在于,上述规定的弹出对象容量、上述规定的转移数及上述规定的返回数为一个第一数据的数据量。
7.权利要求5中所述的栈控制装置,其特征在于,上述规定的弹出对象容量为第一栈的全部容量,上述规定的转移数及上述规定的返回数为可用算式[(第一栈能够存储第一数据的最大数据量-1)÷2](小数点以下舍去)算出的值。
8.权利要求5中记载的栈控制装置,其特征在于,上述中断控制单元包含频度监视单元,其监视上述推入中断或上述弹出中断发生的频度,响应该频度,判定并设定最佳的上述弹出对象容量、上述规定的转移数及上述规定的返回数。
9.权利要求8中记载的栈控制装置,其特征在于,上述频度监视单元,通常将上述弹出对象容量、上述规定的转移数及上述规定的返回数设定为一个第一数据的数据量,上述推入中断或上述弹出中断按照规定次数连续发生时,增加设定上述弹出对象容量、上述规定的转移数及上述规定的返回数,而且,第一栈中存储的数据量达到零时,再次将上述弹出对象容量、上述规定的转移数及上述规定的返回数设定为一个第一数据的数据量。
10.栈控制方法,具备在主控制部执行由运算指令或子程序调用指令等多个指令所构成的规定程序的第一工序;栈寄存器中,上述规定程序中的程序计数器值、循环计数器值及循环结束地址等第一数据以LIFO形式存储到第一栈的第二工序;暂时存储上述运算指令中处理的中间结果等第二数据到存储器的第三工序,其特征在于,该方法具备在上述存储器中,将第一数据以LIFO形式存储到第二栈的第四工序;监视第一栈的容量,在该剩余容量成为规定的推入对象容量时发生推入中断并通知上述主控制部,另外,在成为规定的弹出对象容量时发生弹出中断并通知上述主控制部的中断控制工序;通过响应上述推入中断的上述主控制部,从第一栈的底部取出数据并推入第二栈,将此操作以规定的转移数重复的推入中断处理工序;通过响应上述弹出中断的上述主控制部,从第二栈弹出数据并存储到第一栈的底部,将此操作以规定的返回数重复的弹出中断处理工序。
11.权利要求10所述的栈控制方法,其特征在于,上述中断控制工序,用初始状态下表示禁止的第一标记寄存器,表示上述弹出中断的许可或禁止;用初始状态下表示许可的第二标记寄存器,表示响应来自外围设备等外部装置的中断请求的外部中断的许可或禁止;上述剩余容量成为上述规定的推入对象容量时,将第二标记寄存器设定为禁止后发生推入中断,之后,由推入中断返回时,将第二标记寄存器设定为许可;另外,上述剩余容量成为上述规定的弹出对象容量时,且限于第一标记寄存器表示许可时,将第二标记寄存器设定为禁止后发生弹出中断,之后,由弹出中断返回时,将第二标记寄存器设定为许可;上述推入中断处理工序向第二栈推入数据时,将第一标记寄存器设定为许可;上述弹出中断处理工序从第二栈弹出数据时,且限于第二栈中存储的数据量为零时,将第一标记寄存器设定为禁止。
12.权利要求10或11中记载的栈控制方法,其特征在于,上述栈寄存器包含内部地址存取寄存器,其具有第一栈的底部数据的地址即读出内部地址,和从该地址向底部方向移动一个数据的数据量的写入内部地址;上述推入中断处理单元,对上述栈寄存器中的内部地址存取寄存器中存储的第一栈的底部数据的地址即读出内部地址进行存取,从第一栈的底部取出数据,上述弹出中断处理单元,对上述内部地址存取寄存器中存储的,从上述读出内部地址向底部方向移动一个数据的数据量的写入内部地址进行存取,将数据存储到第一栈的底部。
13.权利要求10至12的任一项所述的栈控制方法,其特征在于,上述规定的推入对象容量为一个第一数据的数据量,上述推入中断处理工序作为第一程序由上述主控制部执行,响应上述推入中断,将来自第一程序的第一返回地址推入第一栈后执行第一程序,之后,结束第一程序时,将第一返回地址从第一栈弹出,返回第一返回地址表示的指令,上述弹出中断处理单元作为第二程序由上述主控制部执行,响应上述弹出中断,将第二程序的第二返回地址推入第一栈后执行第二程序,之后,结束第二程序时,将第二返回地址从第一栈弹出,返回第一返回地址表示的指令。
14.权利要求10至13的任一项所述的栈控制方法,其特征在于,上述规定的弹出对象容量为一个第一数据的数据量以上,第一栈能存储的第一数据的最大数据量以下,上述规定的转移数及上述规定返回数为,一个第一数据的数据量以上,可用算式[(上述最大数据量-1)÷2](小数点以下舍去)算出的值以下。
15.权利要求14中所述的栈控制方法,其特征在于,上述规定的弹出对象容量、上述规定的转移数及上述规定的返回数为一个第一数据的数据量。
16.权利要求14中所述的栈控制方法,其特征在于,上述规定的弹出对象容量为第一栈的所有容量,上述规定的转移数及上述规定的返回数为,可用算式[(第一栈所能存储的第一数据的最大数据量-1)÷2](小数点以下舍去)算出的值。
17.权利要求14中所述的栈控制方法,其特征在于,上述中断控制工序包含频度监视工序,其监视上述推入中断或上述弹出中断发生的频度,响应该频度判定并设定最佳的上述弹出对象容量、上述规定的转移数及上述规定的返回数。
18.权利要求17中所述的栈控制方法,其特征在于,上述频度监视工序,通常设定上述弹出对象容量、上述规定的转移数及上述规定的返回数为一个第一数据的数据量,上述推入中断或上述弹出中断按规定次数连续发生时,增加设定上述弹出对象容量、上述规定的转移数及上述规定的返回数,而且,第一栈中存储的数据量成为零时,再度设定上述弹出对象容量、上述规定的转移数及上述规定的返回数为一个第一数据的数据量。
全文摘要
提供在微型信息处理机等执行程序时使用的栈控制装置及其方法。栈控制装置10,在中断控制器18监视H/W栈26的容量,成为推入及弹出对象容量时,分别发生推入及弹出中断并通知主控制部12,主控制部12响应推入中断,从H/W栈26的底部取出数据,推入S/W栈28,将此操作作为推入中断处理按规定转移数重复,响应弹出中断,从S/W栈28弹出数据存储到H/W栈26的底部,将此操作作为弹出中断处理按规定返回数重复,从而,即使执行可能超过栈寄存器的容量的程序,也可以继续执行而没有程序停止及失控的现象。
文档编号G06F7/00GK1855030SQ20051011889
公开日2006年11月1日 申请日期2005年10月31日 优先权日2005年4月28日
发明者本田雄士 申请人:冲电气工业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1