堆栈式寄存器堆及其控制方法技术

技术编号:2882759 阅读:256 留言:0更新日期:2012-04-11 18:40
一种堆栈式寄存器堆,包括:一个由通用寄存器组成的栈顶寄存器组(101);一个寄存器堆(105);一个数据缓冲寄存器(103),连接于栈顶寄存器组(101)与寄存器堆(105)之间,用于对位数小于预定字长的数据进行缓存;一个计数器(102),用于对栈顶寄存器组(101)和数据缓冲寄存器中最小操作单元数据的个数进行计数;以及一个寄存器堆地址指针生成部件(104),响应于出/入栈指令和来自计数器(102)的计数值,生成用于读/写寄存器堆(105)的地址指针。(*该技术在2020年保护过期,可自由使用*)

【技术实现步骤摘要】

本专利技术涉及计算机微处理器,并且更具体地涉及在计算机微处理器中采用的。在计算机微处理器的各种操作中,经常需要处理不同字长的数据。一方面是因为不同类型的数据本身具有不同的字长,如字符型、整型、单精度浮点数、双精度浮点数等。另一方面,由于计算机微处理器技术的发展,微处理器字长不断升位,现代微处理器为了保持兼容性,需要处理以前各代产品中较短字长的数据。在现有的微处理器中,对于较短字长的数据的存储方式有两种。一种是硬件的方式,如微处理器字长升位以后,为了兼容较低字长的数据处理,通常在原数据的基础上进行符号扩展得到升位字长的数据,直接替代原有字长的数据。另一种是软件的方式,在编译过程中,通过一定的算法给不同字长的数据分配相应的存储单元。采用传统的硬件处理方式处理较低字长的数据,结果往往造成升位字长的微处理器的字长利用率低,并且会增加处理过程资源的开销,如浪费寄存器和外部寄存器堆资源、占用数据通路、增加总线传输和不必要的升位补齐操作等,硬件控制的复杂度也随之增大。采用软件的方式虽然可以解决微处理器的字长利用率低的问题,但分析过程复杂,编译的难度大。因而,现有技术中存在着对不同字长数据进行自动识别和操作的需要。本专利技术的第一目的是提供一种堆栈式寄存器堆,借助这种堆栈式寄存器堆,可以对不同字长的数据进行自动识别和操作。本专利技术的第二目的是提供上述堆栈式寄存器堆的控制方法,使不同字长的数据在堆栈式寄存器堆中按照先进后出(FILO)的方式进/出栈。为实现上述第一目的,本专利技术提供一种堆栈式寄存器堆,其特征在于包括一个栈顶寄存器组,包括k个连接在一起的通用寄存器,每个通用寄存器的预定字长为2n,最小操作单元长度为2n-m,其中k、m和n为自然数,且满足k≥2,0≤m<n,m表示所述该堆栈式寄存器堆能够自动识别和存储的预定字长小于2n的数据的种类数,此时宽度为2n的堆栈可以自动识别的数据宽度为2n-m+i(0≤i≤m),在入栈操作时,栈顶寄存器组中的第一个2n-m+i(0≤i≤m)位的存储单元为堆栈的入口,在出栈操作时,该栈顶寄存器中每一个寄存器的值都可以通过指令直接读出;一个寄存器堆,包括2i(l≥0)个寄存器,每个寄存器的预定字长和最小操作单元长度都为2n;一个数据缓冲寄存器,连接在栈顶寄存器组与寄存器堆之间,用于对在其间传送的位数小于2n的数据进行缓存,该数据缓冲寄存器的字长为(2m-1)2n-m,最小操作单元宽度为2n-m;一个计数器,用于记录栈顶寄存器组以及数据缓冲寄存器中寄存的2n-m位数据的个数,计数器的最大计数值为(k·2m+2m-1);以及一个寄存器堆地址指针生成部件,响应于出/入栈指令和计数器的计数值,生成用于读/写寄存器堆中相应寄存器的地址指针。为实现上述第二目的,本专利技术提供一种对堆栈式寄存堆进行控制的方法,使得不同字长(字长为2n-m+i(0≤i≤m))的数据可以按照先进后出(FILO)的方式进行压栈和弹栈。该堆栈式寄存器堆包括一个栈顶寄存器组,包括k(k≥2,k为自然数)个连接在一起的通用寄存器,作为堆栈式寄存器堆的栈顶,每个通用寄存器具有预定字长2n,最小操作单元的宽度2n-m(0≤m<n,m、n均为自然数);一个寄存器堆,包括2i(l≥0)个寄存器,每个寄存器具有预定字长2n位,用于存储来自栈顶寄存器组和数据缓冲寄存器中的数据;一个数据缓冲寄存器,连接在栈顶寄存器组与寄存器堆之间,用于对在其间传送的位数小于预定字长的数据进行缓存,字长为(2m-1)2n-m;一个计数器,以2n-m位为单位记录栈顶寄存器组和数据缓冲寄存器中寄存的有效数据的个数,可以完成加减2i操作,计数器的最大计数值为(k·2m+2m-1),计数器的计数值为2进制时,满足关系2q≥(k·2m+2m-1),其中q为2进制计数值的位数,q为自然数;一个寄存器堆地址指针生成部件,可以完成复位、置初值、加一和减一操作。所述控制方法的特征在于包括以下步骤(1)将栈顶寄存器组101中的k个寄存器、计数器102、以及寄存器堆105中21个寄存器复位为0;(2)用一定宽度的指令编码来表示操作数的宽度和数据的操作方式(出栈还是入栈),指令的编码满足条件2p≥2(m+1),其中p为栈操作指令编码的宽度,p为自然数,例如n=6且m=2时,64位堆栈可以自动识别和存储32位和16位数据,具体操作分6种情况(16位进栈、16位出栈、32位进栈、32位出栈、64位进栈、64位出栈),编码宽度p为3位,编码方式可以自行定义;(3)计数器根据栈操作指令和计数器的初值进行计数,操作数据宽度2n-m+i(0≤i≤m),工作原理如下(31)进栈操作时,(311)当寄存器堆105中没有数据时,(3111)计数器的初值count<((k·2m+2m-1)-2i)时(其中(k·2m+2m-1)为最大计数值),新的计数值count=count+2i;(3112)计数器的初值count≥((k·2m+2m-1)-2i)时(其中(k·2m+2m-1)为最大计数值),新的计数值count=count+2i-2m。(312)当寄存器堆105中有数据时,新的计数值count=count+2i-2m。(32)出栈操作时,(321)当寄存器堆105中没有数据时,新的计数值count=count-2i。(322)当寄存器堆105中有数据时,(3221)计数器的初值count≥(k·2m+2i)时(其中k为栈顶寄存器的个数),新的计数值count=count-2i,(3222)计数器的初值count<(k·2m+2i)时(其中k为栈顶寄存器的个数),新的计数值count=count-2i+2m(4)响应于步骤(3)中的计数值,完成数据在堆栈式寄存器堆中的入/出栈操作,在栈顶寄存器组中的数据以2i个2n-m位寄存器为单位顺序出/入栈,栈顶寄存器组与寄存器堆以2n为单位交换数据,具体操作步骤为(41)入栈操作,(411)当计数器初始值count满足条件count<(k·2m-2i)时,在栈顶寄存器组中的数据以2i个2n-m位寄存器为单位顺序压入,栈顶寄存器组和寄存器堆之间无数据交换,栈指针不动;(412)当计数器初始值count满足条件(k·2m-2i)≤count<(k·2m)时,栈顶寄存器组中最后2m个2n-m位数据组合在一起(形成一个2n位数据)作为寄存器堆的输入数据,该数据在进入寄存器堆的同时写入其后的栈顶寄存器组和数据缓冲寄存器,数据写入寄存器堆中原地址指针的减一值所指向的存储单元(数据第一次进入寄存器堆时数据写入地址指针初值所指向的单元);(413)当计数器初始值count满足条件count≥k·2m时,栈顶寄存器组中倒数第二个2n位数据作为寄存器堆的输入数据,该数据在进入寄存器堆的同时覆盖其后的栈顶寄存器组和数据缓冲寄存器,数据写入寄存器堆中原地址指针的减一值所指向的存储单元;(42)出栈操作时,(421)当寄存器堆105中无数时,栈顶寄存器组和数据缓冲寄存器中的数据以2i个2n-m位寄存器为单位顺序弹出,栈顶寄存器组和寄存器堆之间无数据交换,栈指针不动;(422)当寄存器堆105中有数时,(4221)当计数器初始值count满足条件count≥k·2m+2i时,栈顶本文档来自技高网...

【技术保护点】
一种堆栈式寄存器堆,其特征在于包括: 一个栈顶寄存器组,包括k个连接在一起的通用寄存器,每个通用寄存器的预定字长为2↑[n],最小操作单元长度为2↑[n-m],其中k、m和n为自然数,且满足k≥2,0≤m<n,m表示所述该堆栈式寄存器堆能够自动识别和存储的预定字长小于2↑[n]的数据的种类数,此时宽度为2↑[n]的堆栈可以自动识别的数据宽度为2↑[n-m+i](0≤i≤m),在入栈操作时,栈顶寄存器组中的第一个2↑[n-m+i](0≤i≤m)位的存储单元为堆栈的入口,在出栈操作时,该栈顶寄存器中每一个寄存器的值都可以通过指令直接读出; 一个寄存器堆,包括2↑[l](l≥0)个寄存器,每个寄存器的预定字长和最小操作单元长度都为2↑[n]; 一个数据缓冲寄存器,连接在栈顶寄存器组与寄存器堆之间,用于对在其间传送的位数小于2↑[n]的数据进行缓存,该数据缓冲寄存器的字长为(2↑[m]-1)2↑[n-m],最小操作单元宽度为2↑[n-m]; 一个计数器,用于记录栈顶寄存器组以及数据缓冲寄存器中寄存的2↑[n-m]位数据的个数,计数器的最大计数值为(k.2↑[m]+2↑[m]-1);以及 一个寄存器堆地址指针生成部件,响应于出/入栈指令和计数器的计数值,生成用于读/写寄存器堆中相应寄存器的地址指针。...

【技术特征摘要】

【专利技术属性】
技术研发人员:王俊宇王昭顺刘大力
申请(专利权)人:多思资讯集团有限公司
类型:发明
国别省市:HK[中国|香港]

相关技术
    暂无相关专利
网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1