CN106293627A - 寄存器调用及调用指令编码的方法、装置 - Google Patents

寄存器调用及调用指令编码的方法、装置 Download PDF

Info

Publication number
CN106293627A
CN106293627A CN201610601292.3A CN201610601292A CN106293627A CN 106293627 A CN106293627 A CN 106293627A CN 201610601292 A CN201610601292 A CN 201610601292A CN 106293627 A CN106293627 A CN 106293627A
Authority
CN
China
Prior art keywords
depositor
call instruction
order
quantitative value
calls
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201610601292.3A
Other languages
English (en)
Other versions
CN106293627B (zh
Inventor
胡向军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhuhai Jieli Technology Co Ltd
Original Assignee
Zhuhai Jieli Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhuhai Jieli Technology Co Ltd filed Critical Zhuhai Jieli Technology Co Ltd
Priority to CN201610601292.3A priority Critical patent/CN106293627B/zh
Publication of CN106293627A publication Critical patent/CN106293627A/zh
Application granted granted Critical
Publication of CN106293627B publication Critical patent/CN106293627B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30141Implementation provisions of register files, e.g. ports
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Telephonic Communication Services (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本发明公开了一种寄存器调用及调用指令编码的方法、装置。其中,寄存器调用指令编码的方法包括以下步骤:判断需要保存的寄存器的数量,并得到需要保存的寄存器的第一数量值;将第一数量值写入到寄存器调用的初始指令中,并编码生成寄存器调用指令。其在寄存器指令编码中以需要保存的寄存器的数量的形式进行编码,而不是以位于寄存器一一对应的方式保存寄存器的标示,从而实现占用寄存器调用指令中较少的位保存较多的寄存器的目的,大大缩短寄存器调用指令的长度,有效减少长指令的使用。提高寄存器调用指令的编码的效率。

Description

寄存器调用及调用指令编码的方法、装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种寄存器调用及调用指令编码的方法、装置。
背景技术
CPU(Central Processing Unit,中央处理器)在执行程序时,会调用一个或者多个特殊的寄存器或者寄存器组,这些寄存器组在ARM处理器中一般命名为R0、R1以及R2等。而在X86处理器中,寄存器一般会被称为ax、es以及ds等。这些寄存器是和处理器本省相关的,一般对于一个固定的处理器其可用的寄存器数量是有限的。CPU在执行程序时,有时需要将部分寄存在保存到堆栈中。如CPU在调用一个函数时,需要将若干个寄存器的值进行保存,并在函数返回时再将其释放恢复。
在传统技术中,为了保存寄存器,CPU在进行指令编码时,会对每一个寄存器留出一个位。这样在进行指令编码时,寄存器占用的编码空间较多,造成指令编码过长。
发明内容
基于此,有必要针对传统技术中指令编码时,寄存器占用的编码空间较多的问题,提供一种利用较短的指令编码实现存储较多数量的寄存器的寄存器调用指令编码的方法、装置以及相配套的寄存器调用的方法及装置。
为实现本发明目的提供的一种寄存器调用指令编码的方法,所述方法包括以下步骤:
判断需要保存的寄存器的数量,并得到需要保存的寄存器的第一数量值;
将所述第一数量值写入到寄存器调用的初始指令中,并编码生成寄存器调用指令。
在其中一个实施例中,所述寄存器调用指令包括操作码部分和内容部分;
所述初始指令中包括与所述操作码部分相对应的部分以及与所述内容部分相对应的部分;
所述将所述第一数量值写入到寄存器调用的初始指令中,包括将所述第一数量值写入到所述寄存器调用的初始指令中与所述内容部分相对应的部分中,以使所述第一数量值最终在所述寄存器调用指令的内容部分中。
在其中一个实施例中,所述方法还包括获取处理器中可用寄存器的数量的步骤;
且所述判断需要保存的寄存器的数量,并得到需要保存的寄存器的第一数量值之后,还包括以下步骤:
判断所述第一数量值是否小于或者等于所述可用寄存器的数量;若是,则继续执行所述将所述第一数量值写入到寄存器调用的初始指令中,并编码生成寄存器调用指令的步骤;若否,则将所述可用寄存器的数量写入到所述寄存器调用的初始指令中,并编码生成寄存器调用指令,或者发出内存不足报警。
在其中一个实施例中,所述装置包括:
保存寄存器数量获取模块,用于判断需要保存的寄存器的数量,并得到需要保存的寄存器的第一数量值;
第一编码模块,用于将所述第一数量值写入到寄存器调用的初始指令中,并编码生成寄存器调用指令。
在其中一个实施例中,所述装置还包括:
可用寄存器的数量获取模块,用于获取处理器中可用寄存器的数量;
数量判断模块,用于在所述保存寄存器数量获取模块获取到需要保存的寄存器的第一数量值后,判断所述第一数量值是否小于或者等于所述可用寄存器的数量;若是,则继续执行所述第一编码模块;若否,则执行第二编码模块或者报警模块;
所述第二编码模块,用于将所述可用寄存器的数量写入到所述寄存器调用的初始指令中,并编码生成寄存器调用指令;
所述报警模块,用于发出内存不足报警。
基于同一发明构思的一种寄存器调用的方法,所述方法包括以下步骤:
接收寄存器调用指令;
解析所述寄存器调用指令,并得到所述寄存器调用指令中包含的需要保存的寄存器的第一数量值;
根据处理器中预设的寄存器保存的入口点及所述处理器中寄存器的保存顺序,从所述入口点开始按照所述保存顺序依次保存第一数量值个数的寄存器到堆栈中。
在其中一个实施例中,所述方法还包括以下步骤:
已经保存到堆栈中的寄存器使用完成后,释放所述堆栈中的所述第一数量值个数的寄存器。
在其中一个实施例中,当所述处理器中包含一个寄存器组时,所述保存顺序为所述处理器中寄存器标示从小到大的顺序,或者为所述寄存器标示从大到小的顺序,或者为根据所述寄存器标示预先设定的顺序,且所述根据所述寄存器标示预先设定的顺序与所述寄存器标示从大到小的顺序不同,所述根据所述寄存器标示预先设定的顺序与所述寄存器标示从小到大的顺序也不同。
在其中一个实施例中,当所述处理器中包含两个以上寄存器组时,将每个寄存器组中的寄存器按照寄存器标示从小到大排列或者从大到小排列,或者根据所述寄存器标示预先设定的顺序进行排列,再根据所述寄存器组的预设顺序按组对所述寄存器进行排列构成所述保护顺序。
基于同一发明构思的一种寄存器调用的装置,所述装置包括:
指令接收模块,用于接收寄存器调用指令;
解析模块,用于解析所述寄存器调用指令,并得到所述寄存器调用指令中包含的需要保存的寄存器的第一数量值;
保存模块,用于根据处理器中预设的寄存器保存的入口点及所述处理器中寄存器的保存顺序,从所述入口点开始按照所述保存顺序依次保存第一数量值个数的寄存器到堆栈中。
在其中一个实施例中,所述装置还包括:
寄存器释放模块,用于已经保存到堆栈中的寄存器使用完成后,释放所述堆栈中的所述第一数量值个数的寄存器。
本发明的有益效果包括:本发明提供的一种寄存器调用指令编码的方法,判断CPU执行的当前步骤需要保存的寄存器的数量,并得到需要保存的寄存器的第一数量值,并进一步将所述第一数量值写入到寄存器调用的初始指令中,并编码生成寄存器调用指令。其在寄存器指令编码中以需要保存的寄存器的数量的形式进行编码,而不是以位于寄存器一一对应的方式保存寄存器的标示,从而实现占用寄存器调用指令中较少的位保存较多的寄存器的目的,大大缩短寄存器调用指令的长度,有效减少长指令的使用。提高寄存器调用指令的编码的效率。同时提供的配套使用的寄存器调用的方法使用前述寄存器调用指令编码的方法生成的寄存器调用指令,实现使用较短的寄存器调用指令保存较多的寄存器到堆栈中的功能。
附图说明
图1为一实施例的寄存器调用指令编码的方法的流程图;
图2为另一实施例的寄存器调用指令编码的方法的流程图;
图3为再一实施例的寄存器调用指令编码的方法的流程图;
图4为一实施例的寄存器调用指令编码的装置的构成示意图;
图5为另一实施例的寄存器调用指令编码的装置的构成示意图;
图6为再一实施例的寄存器调用指令编码的装置的构成示意图;
图7为一实施例的寄存器调用的方法的流程图;
图8(a)至图8(c)为一实施例的寄存器调用的方法中寄存器的保存顺序为顺序排列的寄存器保存执行示意图;
图9(a)至图9(c)为一实施例的寄存器调用的方法中寄存器的保存顺序为随机排序的寄存器保存执行示意图;
图10为另一实施例的寄存器调用的方法的流程图;
图11为一实施例的寄存器调用的装置的构成示意图;
图12为另一实施例的寄存器调用的装置的构成示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图对本发明的寄存器调用指令编码的方法、装置以及寄存器调调用的方法及装置的具体实施方式进行说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,在其中一个实施例的寄存器调用指令编码的方法包括以下步骤:
S100,判断需要保存的寄存器的数量,并得到需要保存的寄存器的第一数量值。
需要说明的是,本实施例的寄存器调用指令编码的方法适用于X86处理器及ARM等处理器在执行一些功能过程中需要调用寄存器(将寄存器保存到堆栈中)的情况。且本实施例中及本文件中其他实施例中所提及的寄存器均为CPU在执行程序过程中可调用的,即能够保存到堆栈中进行使用的特殊的寄存器。而且本实施例中所涉及到的寄存器至少为一个,且一般为两个以上。这些寄存器在处理器中可以在一个寄存器组中也可以分布在多个不同的寄存器组中。
CPU在执行一个程序进行数据处理的过程中,当前执行的步骤可能需要处理器中多个寄存器进行辅助存储数据,此时则需要将要使用的寄存器保存到堆栈中。在传统技术中,对可能用到的多个寄存器在寄存器调用指令中均保留一个位,当需要使用寄存器时,选择多个寄存器中需要使用的寄存器,并将寄存器调用指令中相应的位进行标示,表示将该位对应的寄存器保存到堆栈中。如对于处理器中寄存器标示分别R0~R7的8个寄存器。传统寄存器调用指令中会包含与之对应的8个位“XXXXXXXX”来表示哪个寄存器要保存到堆栈中,且所述8个位一般从低位到高位依次对应8个寄存器的R0,R1,R2,R3,R4,R5,R6,R7。具体的,作为一种可实施方式,可将需要保存的寄存器对应的寄存器调用指令中的位标示为1,将不需要保存的寄存器的位标示为0。如“10010011”则表示需要存储寄存器R7、R4、R1和R0到堆栈中。在CPU执行程序过程中要获取具体需要保存的寄存器的,如需要保存R7、R4、R1和R0到堆栈中。
与传统技术不同的是,本实施例中不再使用与寄存器一一对应的位来表征寄存器的使用情况。本实施例中,直接在获取寄存器的数量,如需要将R7、R4、R1和R0保存到堆栈中时,则步骤S100中直接得出,本步骤中需要保存的寄存器的数量为4个。而不需要知道或者直接指定需要保存的寄存。
获取到需要保存的寄存器的第一数量之后,继续执行后面的步骤S200,进行寄存器调用指令生成。
S200,将第一数量值写入到寄存器调用的初始指令中,并编码生成寄存器的调用指令。
需要说明的是,所述寄存器调用的初始指令是指还没有写入需要保存的寄存器的数量(第一数量)的寄存器调用指令,即还未完成的寄存器调用指令。
本实施例中,直接在寄存器调用指令中写入需要保存的寄存器的数量,从而大大缩短了寄存器调用指令的编码长度。如传统技术中如果可能用到7个寄存器则需要在寄存器调用指令中预留7位来表征实际需要保存的寄存器。但是使用本实施例的寄存器调用指令编码的方法,只需要3位(111)就能实现保存7个寄存器到堆栈中的需求。而本实施例的方法寄存器数量越多,优势就越明显。如本实例中,如果寄存器调用指令中包含8位用于表征需要保存的寄存器的数量,在可以实现最大保存255个寄存器。而如前所述,传统技术中,与寄存器一一对应的8位最多只能说明保存8个寄存器到堆栈中。因此,本实施例的寄存器调用指令编码的方法能够大大缩短寄存器指令编码的长度,或者说能够使用较短的指令编码实现存储较多数量的寄存器的目的。
具体的,寄存器调用指令中包含有两部分,分别为操作码部分和内容部分,所述操作码部分用于存储操作码,表征具体的操作动作。而所述内容部分则用于存储具体的要保存到堆栈中的寄存器的数量,及第一数量值。因此,与寄存器调用指令相对应的不完整的寄存器调用指令,即所述步骤S200中所述的初始指令也包含有两部分,分别为与寄存器调用指令中操作码部分对应的部分以及与所述寄存器调用指令中内容部分相对应的部分。且,相应的,步骤S200中在将第一数量值写入到寄存器调用的初始指令中时,是将所述第一数量值写入到寄存器调用的初始指令中与所述内容部分相对应的部分中,从而当完成寄存器调用指令的编码后,所述第一数量值会最终在所述寄存器调用指令的内容部分中。使处理器能够根据所述寄存器调用指令中相应的第一数量值存储第一数量值的寄存器到堆栈中以备使用,从而完成CPU的当前(操作)步骤。
但是在某些情况下也可能出现需要存储的寄存器数量过多,处理器中可用的寄存器数量不够的情况。为应对此问题,如图2所示,在其中一个实施例中还包括以下步骤:
S021,获取处理器中可用寄存器的数量。
需要说明的是,所述可用寄存器即为CPU在执行程序时处理器中能够调用的寄存器。
获取到寄存器的数量及所述需要保存的寄存器的第一数量值之后,再执行下面的步骤S022对两者的大小进行比较。具体如下:
S022,判断第一数量值是否小于或者等于可用寄存器的数量;若是,则继续执行步骤S200,将第一数量值写入到寄存器调用的初始指令中,并编码生成寄存器调用指令。相反,当第一数量值大于可用寄存器的数量,即若否时,则执行步骤S200’,将可用寄存器的数量写入到寄存器调用的初始指令中,并编码生成寄存器调用指令。
本实施例中,能够防止寄存器调用指令中要求保存的寄存器的数量大于处理器中可用寄存器的数量,造成寄存器调用指令失效,影响CPU程序的正常执行。
在另一实施例中,如图3所示,该实施例中依然执行前述的步骤S021,获取处理器中可用寄存器的数量。以及步骤S022,判断第一数量值是否小于或者等于可用寄存器的数量。且当第一数量值小于或者等于可用寄存器的数量时,则继续执行步骤S200,将第一数量值写入到寄存器调用的初始指令中,并编码生成寄存器调用指令。与前述实施例不同的是,当第一数量值大于可用寄存器的数量,即若否时,本实施例中既不执行步骤S200也不执行步骤S200’,而是执行步骤S200”,发出内存不足报警。
其中,所述发出内存不足报警包括文字形式显示的内存不足报警以及音频形式的内存不足报警。
本实施例同样能够起到防止寄存器调用指令中要求保存的寄存器的数量大于处理器中可用寄存器的数量,造成寄存器调用指令失效,影响CPU程序的正常执行的作用。
本领域技术人员可以理解,前述步骤S022,判断第一数量值是否小于或者等于可用寄存器的数量一定在步骤S100,判断需要保存的寄存器的数量,并得到需要保存的寄存器的第一数量值之后进行。但是在前两个实施例中,步骤S021,获取处理器中可用寄存器的数量。与步骤S100没有严格的前后的关系,两者谁先执行都可以。
基于同一构思还提供一种寄存器调用指令编码的装置,该装置解决问题的原理与前述的寄存器调用指令编码的方法相似,因此,该系统的实施可以按照前述的方法的具体步骤实现,重复之处不再赘述。
如图4所示,其中一个实施例的寄存器调用指令编码的装置,包括保存寄存器数量获取模块100及第一编码模块200。
其中,所述保存寄存器数量获取模块100用于判断需要保存的寄存器的数量,并得到需要保存的寄存器的第一数量值。所述第一编码模块200用于将所述保存寄存器数量获取模块获取的第一数量值写入到寄存器调用的初始指令中,并编码生成寄存器调用指令。
本实施例的寄存器调用指令编码的装置同样能够实现用较短的寄存器调用指令保存较多数量的寄存器到堆栈中。从而在寄存器调用指令中预留较少的位用于写入要保存的寄存器信息即可。且不不要明确说明需要保存的寄存器的标示,使寄存器调用指令生成更高效。
其中,寄存器调用指令编码的装置中的寄存器调用指令也包括操作码部分和内容部分。而且相应的初始指令中也包括与所述操作码部分相对应的部分及所述所述内容部分相对应的部分。且第一编码模块在将第一数量值写入到寄存器调用的初始指令中时,会将所述第一数量值写入到寄存器调用的初始指令中与所述寄存器调用指令的内容部分相对应的部分中,从而使第一数量值最终在寄存器调用指令的内容部分中。
在另一实施例的寄存器调用指令编码的装置中,如图5所示,除包括前述实施例中的保存寄存器数量获取模块100及所述第一编码模块200以外,还包括可用寄存器的数量获取模块021、数量判断模块022及第二编码模块200’。
其中,所述保存寄存器数量获取模块100,用于获取处理器中可用寄存器的数量。所述数量判断模块022,用于在所述保存寄存器数量获取模块获取到需要保存的寄存器的第一数量值及可用寄存器的数量获取模块获取到处理器中可用寄存器的数量之后,判断第一数量值是否小于或者等于可用寄存器的数量,如果是,则继续执行第一编码模块将第一数量值写入到寄存器调用的初始指令中,并编码生成寄存器调用指令;如果否,则执行所述第二编码模块200’,将可用寄存器的数量写入到寄存器调用的初始指令中,并编码生成寄存器调用指令。其能防止寄存器调用指令中需要保存的寄存器数量超过处理器中可用寄存器的数量,造成程序执行失败。
在另一实施中,如图6所示,其也包括保存寄存器数量获取模块100、第一编码模块200、可用寄存器的数量获取模块021及数量判断模块022,但与前一实施例不同的是,本实施例中没有第二编码模块200’。当数量判断模块对第一数量值与可用寄存器的数量进行判断之后,当第一数量值小于或者等于可用寄存器的数量时,依然继续执行第一编码模块,将第一数量值写入到寄存器调用的初始指令中,并编码生成寄存器调用指令。但是当数量判断模块判断出第一数量值大于可用寄存器的数量时,此时,执行报警模块200”,发出内存不足报警。防止CPU继续执行造成数据处理结果不准确。
与前述寄存器调用指令编码的方法相配套的,还提供一种寄存器调用的方法。具体的,其中一个实施例的寄存器调用的方法,如图7所示,包括以下步骤:
S110,接收寄存器调用指令。
该寄存器调用指令为CPU通过前述任一实施例的寄存器调用指令编码的方法生成的寄存器调用指令。处理器在执行某一步骤时,如果需要进行寄存器的调用,则CPU会通过前述任一实施例的寄存器调用指令编码的方法生成一个寄存器调用指令。
可以理解,所述寄存器调用指令也可以包括两部分,一部分为操作码部分,另一部分为内容部分。而且寄存器调用指令中一定会包含有需要保存到堆栈中的寄存器的数量。一般的,可以根据寄存器调用指令中的操作码确定该指令为保存寄存器到堆栈的指令,而进一步根据寄存器调用指令的内容部分确定具体要保存的寄存器的情况。因此,执行步骤S110之后,会继续执行下面的步骤S210,对指令进行解析。
S210,解析寄存器调用指令,并得到寄存器调用指令中包含的需要保存的寄存器的第一数量值。
如前段所述,在寄存器调用指令的内容部分会存储具体需要保存的寄存器的信息。在传统技术中,寄存器调用指令的内容部分中包含与每个寄存器一一对应的位,根据位中所表征的寄存器的标示则可确定具体需要保存哪一个寄存器。在本实施例中,寄存器调用指令的内容部分中存储有需要保存的寄存的数量。本步骤首先获取CPU执行的当前步骤需要保存的寄存器的第一数量值。再执行步骤S310。
S310,根据处理器中预设的寄存器保存的入口点及处理器中寄存器的保存顺序,从入口点开始,按照保存顺序依次保存第一数量值个数的寄存器到堆栈中。
对于本步骤中寄存器的保存顺序以及寄存器保存的入口点,可以理解为,预先对处理器中能够被CPU调用并保存到堆栈中使用的寄存器进行排序,排序形成一个寄存器的保存顺序,并在排序之后确定一个后续在保存到堆栈中的入口点。从而当需要保存寄存器时,则从所述入口点开始,按照保存顺序依次保存第一数量值个数的寄存器到堆栈中。
一般的,确定保存顺序之后,可将保存顺序中第一个寄存器作为入口点,在保存时,则可从所述入口点开始依次对寄存器进行保存。以便进一步使用寄存器完成处理执行的当前步骤。
本实施例的寄存器调用的方法,只在寄存器调用指令中存储需要保存的寄存器的数量,并在保存寄存器到堆栈时,按照一定的顺序依次进行保存。从而能够通过占用寄存器调用指令中较少的位实现保存较多数量的寄存器。
具体的,对于所述保存顺序,对于一个寄存器组中的多个寄存器,可采用两种排序方式:顺序排序和随机排序。
对于所述顺序排序,包括从寄存器标示R0、R1,……,Rn依次排列的方式,即寄存器标示从小到大的顺序;或者从寄存器Rn、Rn-1,……,R0依次排列的方式,即寄存器标示从大到小的顺序;或者从寄存器标示Ri、Ri-1...R0和Ri、Ri+1...Rn依次排列。本领域技术人员可以理解,i,n均为正整数,n标示寄存器组中包含的寄存器的数量。
对于所述随机排序,是指对寄存器组中的寄存器标示R0到Rn在该寄存器组内随机排布,并最终确定为一种或多种的排列方式。如确定其中一种随机排序的保存顺序为R0、R5、Rn.......R10、Rn-2
而对于所述入口点,是指对于已经确定的保存顺序的寄存器保存的开始点。所述入口点可以为保存顺序中任一个寄存器标示。如:在“顺序排序”的方式中,可以把R6作为保存点入口,往前或往后依次保存。
具体的,参见图8(a)到图8(c)以及图9(a)到图9(c),下面以机器码“XXXXXXXXXXXX1101”,及对应的13个寄存器标示为例对所述保存顺序进行说明。
如图8(a)所示,寄存器的保存顺序为顺序排列,以寄存器标示R0为入口点,按照箭头指示依次往R1、R2、R3,……,方向保存,直至所有内容保存完毕。图8(a)中所示的为按寄存器标示从小到大的顺序排列保存顺序。
如图8(b)所示,寄存器的保存顺序依然为顺序排列的方式。本图所示中,以寄存器R12为入口点,依次往R11、R10、R9,……,方向保存,直至所有内容保存完毕。图8(b)中所示的为按照寄存器标示从大到小的顺序排列保存顺序。
如图8(c)所示,寄存器的保存顺序还是顺序排列的方式。本图所示中,以寄存器标示R8为入口点,依次往R9、R10、R11,……,方向保存,直至所有内容保存完毕。或者以寄存器标示R7为入口点,依次往R6、R5、R4,……,方向保存,直至所有内容保存完毕。
图8(a)至图8(c)中寄存器组中寄存器的排列顺序为寄存器标示的顺序排列,13个寄存器按标示依次为R0,R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12。
图9(a)到图9(c)为随机排序的保存顺序。
其中图9(a)所示,为以寄存器标示R10为入口点,依次往R1、R8、R11等方向保存,直到所有内容保存完毕。
其中图9(b)所示,为以寄存器标示R12为入口点,依次往R3、R0、R9等方向保存,直到所有内容保存完毕。
其中图9(c)所示,为以寄存器标示R2为入口点,依次往R9、R0、R3等方向保存,直到所有内容保存完毕;或者,以寄存器标示R5为入口点,依次往R6、R7、R4等方向保存,直到所有内容保存完毕。
其中,图9(a)和图9(b)中确定的一种寄存器随机排列的顺序按照寄存器标示依次为:R10,R1,R8,R11,R4,R7,R6,R5,R2,R9,R0,R3,R12。图9(c)中确定的一种寄存器随机排列的顺序按照寄存器标示依次为:R1,R8,R11,R4,R7,R6,R5,R2,R9,R0,R3,R12,R13。
且还需要说明的是,当处理器中包含多个寄存器组时,可对每个寄存器组中的寄存器按照前述多种排序方式进行排序,再将多个寄存器组以组的方式进行组合,即将一个寄存器组中的组内寄存器保存顺序中第一个及最后一个寄存器与邻近的寄存器组中最后一个及第一寄存器匹配为相邻的寄存器。当当前寄存器组中最后一个寄存器保存完成后,如果已经保存的寄存器的数量还少于第一数量值,则继续保存其邻近的后一个寄存器组中组内排序为第一个的寄存器。直至保存第一数量值的寄存器。
在另一实施例的寄存器调用的方法中,如图10所示,还包括以下步骤:
S410,已经保存到堆栈中的寄存器使用完成后,释放堆栈中第一数量值个数的寄存器。至此完成一次寄存器的调用。基于同一发明构思,还提供一种寄存器调用的装置,由于此装置解决问题的原理与前述一种寄存器调用的方法相似,因此,该装置的实施可以按照前述方法的具体步骤实现,重复之处不再赘述。
其中一个实施例的寄存器调用的装置,如图11所示,包括指令接收模块110、解析模块210及保存模块310。
其中,所述指令接收模块110,用于接收寄存器调用指令。所述解析模块210,用于解析寄存器调用指令,并得到寄存器调用指令中包含的需要保存的寄存器的第一数量值。所述保存模块310,用于根据处理器中预设的寄存器保存的入口点及处理器中寄存器的保存顺序,从入口点开始按照保存顺序依次保存第一数量值个数的寄存器到堆栈中。
其通过寄存器调用指令中存储的需要存储的寄存器的数量直接存储一定数量的寄存器,而无需在寄存器指令中一一对应保存需要存储的具体的寄存器的标示。从而能够大大减少寄存器存储情况在寄存器调用指令中占用的位数,实现占用较少的寄存器调用指令位数保存较多数量的寄存器到堆栈中。
如图12所示,在另一实施例的寄存器调用的装置中,除包含前述实施例中的指令接收模块110、解析模块210以及保存模块310以外,还包括寄存器释放模块410。所述寄存器释放模块410,用于已经保存到堆栈中的寄存器使用完成后,释放堆栈中的第一数量值个数的寄存器。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

Claims (11)

1.一种寄存器调用指令编码的方法,其特征在于,所述方法包括以下步骤:
判断需要保存的寄存器的数量,并得到所述需要保存的寄存器的第一数量值;
将所述第一数量值写入到寄存器调用的初始指令中,并编码生成寄存器调用指令。
2.根据权利要求1所述的寄存器调用指令编码的方法,其特征在于,所述寄存器调用指令包括操作码部分和内容部分;
所述初始指令中包括与所述操作码部分相对应的部分以及与所述内容部分相对应的部分;
所述将所述第一数量值写入到寄存器调用的初始指令中,包括将所述第一数量值写入到所述寄存器调用的初始指令中与所述内容部分相对应的部分中,以使所述第一数量值最终在所述寄存器调用指令的内容部分中。
3.根据权利要求1所述的寄存器调用指令编码的方法,其特征在于,所述方法还包括获取处理器中可用寄存器的数量的步骤;
且所述判断需要保存的寄存器的数量,并得到需要保存的寄存器的第一数量值之后,还包括以下步骤:
判断所述第一数量值是否小于或者等于所述可用寄存器的数量;若是,则继续执行所述将所述第一数量值写入到寄存器调用的初始指令中,并编码生成寄存器调用指令的步骤;若否,则将所述可用寄存器的数量写入到所述寄存器调用的初始指令中,并编码生成寄存器调用指令,或者发出内存不足报警。
4.一种寄存器调用指令编码的装置,其特征在于,所述装置包括:
保存寄存器数量获取模块,用于判断需要保存的寄存器的数量,并得到需要保存的寄存器的第一数量值;
第一编码模块,用于将所述第一数量值写入到寄存器调用的初始指令中,并编码生成寄存器调用指令。
5.根据权利要求4所述的寄存器调用指令编码的装置,其特征在于,所述装置还包括:
可用寄存器的数量获取模块,用于获取处理器中可用寄存器的数量;
数量判断模块,用于在所述保存寄存器数量获取模块获取到需要保存的寄存器的第一数量值后,判断所述第一数量值是否小于或者等于所述可用寄存器的数量;若是,则继续执行所述第一编码模块;若否,则执行第二编码模块或者报警模块;
所述第二编码模块,用于将所述可用寄存器的数量写入到所述寄存器调用的初始指令中,并编码生成寄存器调用指令;
所述报警模块,用于发出内存不足报警。
6.一种寄存器调用的方法,其特征在于,所述方法包括以下步骤:
接收寄存器调用指令;
解析所述寄存器调用指令,并得到所述寄存器调用指令中包含的需要保存的寄存器的第一数量值;
根据处理器中预设的寄存器保存的入口点及所述处理器中寄存器的保存顺序,从所述入口点开始按照所述保存顺序依次保存第一数量值个数的寄存器到堆栈中。
7.根据权利要求6所述的寄存器调用的方法,其特征在于,所述方法还包括以下步骤:
已经保存到堆栈中的寄存器使用完成后,释放所述堆栈中的所述第一数量值个数的寄存器。
8.根据权利要求6所述的寄存器调用的方法,其特征在于,当所述处理器中包含一个寄存器组时,所述保存顺序为所述处理器中寄存器标示从小到大的顺序,或者为所述寄存器标示从大到小的顺序,或者为根据所述寄存器标示预先设定的顺序,且所述根据所述寄存器标示预先设定的顺序与所述寄存器标示从大到小的顺序不同,所述根据所述寄存器标示预先设定的顺序与所述寄存器标示从小到大的顺序也不同。
9.根据权利要求6所述的寄存器调用的方法,其特征在于,当所述处理器中包含两个以上寄存器组时,将每个寄存器组中的寄存器按照寄存器标示从小到大排列或者从大到小排列,或者根据所述寄存器标示预先设定的顺序进行排列,再根据所述寄存器组的预设顺序按组对所述寄存器进行排列构成所述保护顺序。
10.一种寄存器调用的装置,其特征在于,所述装置包括:
指令接收模块,用于接收寄存器调用指令;
解析模块,用于解析所述寄存器调用指令,并得到所述寄存器调用指令中包含的需要保存的寄存器的第一数量值;
保存模块,用于根据处理器中预设的寄存器保存的入口点及所述处理器中寄存器的保存顺序,从所述入口点开始按照所述保存顺序依次保存第一数量值个数的寄存器到堆栈中。
11.根据权利要求10所述的寄存器调用的装置,其特征在于,所述装置还包括:
寄存器释放模块,用于已经保存到堆栈中的寄存器使用完成后,释放所述堆栈中的所述第一数量值个数的寄存器。
CN201610601292.3A 2016-07-27 2016-07-27 寄存器调用及调用指令编码的方法、装置 Active CN106293627B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610601292.3A CN106293627B (zh) 2016-07-27 2016-07-27 寄存器调用及调用指令编码的方法、装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610601292.3A CN106293627B (zh) 2016-07-27 2016-07-27 寄存器调用及调用指令编码的方法、装置

Publications (2)

Publication Number Publication Date
CN106293627A true CN106293627A (zh) 2017-01-04
CN106293627B CN106293627B (zh) 2019-01-11

Family

ID=57662614

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610601292.3A Active CN106293627B (zh) 2016-07-27 2016-07-27 寄存器调用及调用指令编码的方法、装置

Country Status (1)

Country Link
CN (1) CN106293627B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5987583A (en) * 1997-10-07 1999-11-16 Microchip Technology Inc. Processor architecture scheme and instruction set for maximizing available opcodes and address selection modes
CN1308274A (zh) * 2000-02-08 2001-08-15 斯罗扬有限公司 在处理器中传送指令结果及处理器的编译方法
CN1446332A (zh) * 2000-08-09 2003-10-01 先进微装置公司 用以在扩充寄存器模式下存取扩充寄存器集的中央处理单元及其方法
CN1596396A (zh) * 2001-11-26 2005-03-16 皇家飞利浦电子股份有限公司 具有省电指令的甚大指令字的体系结构
US20050182916A1 (en) * 2004-02-12 2005-08-18 Takahiro Kageyama Processor and compiler
CN101916180A (zh) * 2010-08-11 2010-12-15 中国科学院计算技术研究所 Risc处理器中执行寄存器类型指令的方法和其系统
CN102236575A (zh) * 2011-07-20 2011-11-09 复旦大学 一种基于寄存器映射的动态编译方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5987583A (en) * 1997-10-07 1999-11-16 Microchip Technology Inc. Processor architecture scheme and instruction set for maximizing available opcodes and address selection modes
CN1308274A (zh) * 2000-02-08 2001-08-15 斯罗扬有限公司 在处理器中传送指令结果及处理器的编译方法
CN1446332A (zh) * 2000-08-09 2003-10-01 先进微装置公司 用以在扩充寄存器模式下存取扩充寄存器集的中央处理单元及其方法
CN1596396A (zh) * 2001-11-26 2005-03-16 皇家飞利浦电子股份有限公司 具有省电指令的甚大指令字的体系结构
US20050182916A1 (en) * 2004-02-12 2005-08-18 Takahiro Kageyama Processor and compiler
CN101916180A (zh) * 2010-08-11 2010-12-15 中国科学院计算技术研究所 Risc处理器中执行寄存器类型指令的方法和其系统
CN102236575A (zh) * 2011-07-20 2011-11-09 复旦大学 一种基于寄存器映射的动态编译方法

Also Published As

Publication number Publication date
CN106293627B (zh) 2019-01-11

Similar Documents

Publication Publication Date Title
CN107609356B (zh) 基于标签模型的文本无载体信息隐藏方法
AU2019229365A1 (en) Call detail record analysis to identify fraudulent activity and fraud detection in interactive voice response systems
CN109145158B (zh) 一种布隆过滤器中数据的处理方法以及布隆过滤器
CN104115155B (zh) 在具有安全域和次安全域的数据处理设备中的异常处理
CN107402950B (zh) 基于分库分表的文件处理方法和装置
CN87100829A (zh) 用于检索的方法和装置
CN105159819B (zh) 一种记录内核异常栈及调试信息的方法及系统
WO2004003729A3 (en) Apparatus for register file extension
CN110471780B (zh) 分布式事件处理装置、终端和计算机存储介质
KR101738078B1 (ko) 파일 스캐닝 방법 및 장치
CN110209493A (zh) 内存管理方法、装置、电子设备及存储介质
CN108984721A (zh) 垃圾账号的识别方法和装置
CN110363006B (zh) 多链哈希栈结构及检测函数返回地址被篡改的方法
US20170038996A1 (en) Methods and apparatus for accelerating list comparison operations
CN106293627A (zh) 寄存器调用及调用指令编码的方法、装置
US7484068B2 (en) Storage space management methods and systems
RU2006128528A (ru) Способ сжатия данных
CN109656474A (zh) 数据存储方法、装置、计算机设备和存储介质
US7093241B2 (en) Method for eliminating redundant method calls in an object oriented program
CN109857740B (zh) 字符串的存储方法、匹配方法、电子设备及可读存储介质
US8386447B2 (en) Allocating and managing random identifiers using a shared index set across products
CN101076778A (zh) 可编程信号处理电路和交织方法
US11409646B2 (en) Method for releasing memory
CN110175475A (zh) 一种智能卡数据处理方法、装置及计算机可读存储介质
US20100100665A1 (en) Data update method and flash memory apparatus utilizing the same

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
CB02 Change of applicant information

Address after: 519085 Guangdong city of Zhuhai province Jida West Road No. 107 Building 9 Building (1-4)

Applicant after: Zhuhai jelee Polytron Technologies Inc

Address before: 519085 Guangdong city of Zhuhai province Jida West Road No. 107 Building 9 Building

Applicant before: Zhuhai Jieli Technology Co., Ltd.

COR Change of bibliographic data
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP02 Change in the address of a patent holder

Address after: 519000 No. 333, Kexing Road, Xiangzhou District, Zhuhai City, Guangdong Province

Patentee after: ZHUHAI JIELI TECHNOLOGY Co.,Ltd.

Address before: Floor 1-107, building 904, ShiJiHua Road, Zhuhai City, Guangdong Province

Patentee before: ZHUHAI JIELI TECHNOLOGY Co.,Ltd.

CP02 Change in the address of a patent holder