專利名稱:一種堆棧入棧出棧裝置及方法
技術領域:
本發(fā)明涉及微處理器和計算機系統(tǒng)領域,具體地說,涉及一種提高堆棧進出效率的裝置及方法,作為處理器的一個組成部分,用于提高處理器的并行處理能力。
背景技術:
隨著處理器技術的進步,處理器的速度不斷提高,性能不斷增強,同時用戶對計算機或者處理器的要求越來越高。但是僅僅依靠電子元件的加速來滿足需求是遠遠不夠的,因此提高計算機的并行處理能力及増加有效的處理指令變得尤其重要?,F(xiàn)有的處理器中,堆棧的入棧出棧指令是在中斷處理過程中的常用操作。用于保護現(xiàn)場和恢復現(xiàn)場。同時由于堆棧的入棧和出棧一般會同時操作多個寄存器,也就是說要同時保護和恢復多個寄存器,操作只能串行處理,所以堆棧的入棧和出棧操作在中斷處理 中會消耗比較多的系統(tǒng)周期,大大增加了系統(tǒng)中斷的開銷。例如,堆棧需要對R0,Rl. . R7等寄存器進行堆棧入棧和出棧操作,則一般做ー些操作。Push RO (R0 入棧)Push Rl (Rl 入棧)Push R2 (R2 入棧)Push R3 (R3 入棧)Push R4 (R4 入棧)Push R5 (R5 入棧)Push R6 (R6 入棧)Push R7 (R7 入棧)故,R0,Rl.. R7入棧共需8個指令周期。Pop RO (R0 出棧)Pop Rl (Rl 出棧)Pop R2 (R2 出棧)Pop R3 (R3 出棧)Pop R4 (R4 出棧)Pop R5 (R5 出棧)Pop R6 (R6 出棧)Pop R7 (R7 出棧)故,RO,Rl.. R7出棧共需8個指令周期。以上可以得出RO,Rl. . R7入棧出棧共需16個指令周期。
發(fā)明內(nèi)容
為了解決上述問題,本發(fā)明提出一種堆棧入棧出棧裝置。所述堆棧入棧出棧裝置作為處理器的一個組成部分,按照處理器的操作過程,在存儲器訪問單元中執(zhí)行堆棧入棧出棧操作;所述入棧出棧裝置包括指令存儲單元、指令讀取單元、存儲器訪問單元、數(shù)據(jù)寄存器組、堆棧指針寄存器SP。所述指令存儲單元,用來存儲將要執(zhí)行的指令代碼;所述指令讀取單元,用于將指令代碼從指令存儲單元中讀取并發(fā)送給執(zhí)行單元;所述存儲器訪問單元,用于訪問程序所需的存儲的數(shù)據(jù)和接ロ;所述數(shù)據(jù)寄存器組,包含數(shù)據(jù)寄存器R0,R1,…,Rn,用來存放程序需要的數(shù)據(jù);所述堆棧指針寄存器SP,用于存儲堆棧的地址指針。所述指令讀取單元從所述指令存儲單元中讀取堆棧入?;虺鰲V噶?,然后發(fā)給所述存儲器訪問單元,所述存儲器訪問單元根據(jù)所述堆棧入?;虺鰲V噶顖?zhí)行堆棧入?;虺鰲2僮?。所述存儲器訪問單元根據(jù)所述堆棧入棧指令將待入棧的n個寄存器組成ー個n倍 寄存器寬度的數(shù)據(jù)存儲到外部存儲器中,所述n個寄存器由入棧指令決定,所述外部存儲器地址由堆棧地址指針SP決定。所述的堆棧入棧裝置用于同時對多個數(shù)據(jù)寄存器進行堆棧入棧操作。所述存儲器訪問單元根據(jù)所述堆棧出棧指令從外部存儲器中一次讀出ー個n倍寄存器寬度的數(shù)據(jù),并將該數(shù)據(jù)分配給n個出棧的寄存器,所述n個寄存器由出棧指令決定,所述外部存儲器地址由堆棧地址指針SP決定。 所述的堆棧入棧裝置用于同時對多個數(shù)據(jù)寄存器進行堆棧出棧操作。ー種堆棧入棧方法,通過一條指令周期即完成對多個寄存器中入棧操作,所述堆棧入棧方法包括如下步驟步驟1,將執(zhí)行堆棧入棧指令由指令存儲單元中讀取到指令讀取單元中,再出來送至存儲器訪問單元;步驟2,根據(jù)所述堆棧入棧指令,將待入棧的n個寄存器數(shù)據(jù)組成ー個n倍長的數(shù)據(jù);步驟3,堆棧指針寄存器sp減去n得到新的sp指針;步驟4,對所述n倍長得數(shù)據(jù),存儲到地址為(sp減去n),數(shù)據(jù)寬度為n倍寄存器的目標存儲器。—種堆棧出棧方法,通過一條指令周期即完成對多個寄存器中出棧操作,所述堆棧出棧方法包括如下步驟步驟1,將執(zhí)行堆棧出棧指令由指令存儲單元中讀取到指令讀取單元中,再出來送至存儲器訪問單元;步驟2,根據(jù)所述堆棧出棧指令,從地址為sp,數(shù)據(jù)寬度為n倍的存儲器中讀取n倍寬度的數(shù)據(jù);步驟3,將讀取的n倍寬度的數(shù)據(jù)分給n個寄存器;步驟4,堆棧指針寄存器sp加上n得到新的sp指針。本發(fā)明僅僅通過堆棧入棧出棧一條指令周期即完成n個寄存器的入棧或出棧操作,實現(xiàn)單周期多個寄存器的入棧出棧,減少了中斷處理的開銷,提高了處理器的計算速度,大大減少了中斷的開銷。
參照如下附圖將更加易于理解本發(fā)明圖I所示為普通方法下8個寄存器 入棧的示例。圖2所示為普通方法下8個寄存器出棧的示例。圖3所示為本發(fā)明快速方法下8個寄存器入棧的示例。
圖4所示為本發(fā)明快速方法下8個寄存器出棧的示例。圖5所示為本發(fā)明提出的快速堆棧入棧方法總體流程圖。圖6所示為本發(fā)明提出的快速堆棧出棧方法總體流程圖。圖7所示為用于實現(xiàn)本發(fā)明的堆??焖偃霔3鰲Qb置的結(jié)構(gòu)框圖。
具體實施例方式本發(fā)明通過以下實施得以實現(xiàn)。本發(fā)明的快速堆棧入棧出棧裝置,如圖7所示,包括指令存儲單元,指令讀取單元,存儲器訪問單元,數(shù)據(jù)寄存器組,堆棧指針寄存器SP。所述堆棧的入?;虺鰲J前凑仗幚砥鞯牟僮鬟^程在存儲器訪問單元中完成。所述指令存儲單元,用來存儲將要執(zhí)行的指令代碼;所述指令讀取單元,用于將指令代碼從指令存儲單元中讀取并發(fā)送給執(zhí)行單元;所述存儲器訪問單元,用于訪問程序所需的存儲的數(shù)據(jù)和接ロ ;所述數(shù)據(jù)寄存器組,包含數(shù)據(jù)寄存器R0,R1,…,Rn,用來存放程序需要的數(shù)據(jù);所述堆棧指針寄存器SP,用于存儲堆棧的地址指針。所述指令讀取單元從所述指令存儲單元中讀取堆棧入?;虺鰲V噶?,然后發(fā)給所述存儲器訪問單元,所述存儲器訪問單元根據(jù)所述堆棧入棧或出棧指令執(zhí)行堆棧入?;虺鰲2僮鳌K龃鎯ζ髟L問單元根據(jù)所述堆棧入棧指令將待入棧的n個寄存器組成ー個n倍寄存器寬度的數(shù)據(jù)存儲到外部存儲器中,所述n個寄存器由入棧指令決定,所述外部存儲器地址由堆棧地址指針SP決定。所述的堆棧入棧裝置用于同時對多個數(shù)據(jù)寄存器進行堆棧入棧操作。所述存儲器訪問單元根據(jù)所述堆棧出棧指令從外部存儲器中一次讀出ー個n倍寄存器寬度的數(shù)據(jù),并將該數(shù)據(jù)分配給n個出棧的寄存器,所述n個寄存器由出棧指令決定,所述外部存儲器地址由堆棧地址指針SP決定。所述的堆棧入棧裝置用于同時對多個數(shù)據(jù)寄存器進行堆棧出棧操作。在完成一次堆棧的入?;虺鰲_^程中,首先將堆棧入?;虺鰲V噶钣芍噶畲鎯卧凶x入到指令讀取單元中,再由指令讀取單元將堆棧入?;虺鰲V噶罘职l(fā)到存儲器訪問単元中,由存儲器訪問單元執(zhí)行堆棧入?;虺鰲2僮鳌)`種堆棧入棧方法,通過一條指令周期即完成對多個寄存器中入棧操作,所述堆棧入棧方法,如圖5所示,包括如下步驟步驟1,將執(zhí)行堆棧入棧指令由指令存儲單元中讀取到指令讀取單元中,再出來送至存儲器訪問單元;步驟2,根據(jù)所述堆棧入棧指令,將待入棧的n個寄存器數(shù)據(jù)組成ー個n倍長的數(shù)據(jù);步驟3,堆棧指針寄存器sp減去n得到新的sp指針;步驟4,對所述n倍長得數(shù)據(jù),存儲到地址為(sp減去n),數(shù)據(jù)寬度為n倍寄存器的目標存儲器。ー種堆棧出棧方法,通過一條指令周期即完成對多個寄存器中出棧操作,所述堆棧出棧方法,如圖6所示,包括如下步驟步驟1,將執(zhí)行堆棧出棧指令由指令存儲單元中讀取到指令讀取單元中,再出來送至存儲器訪問單元;步驟2,根據(jù)所述堆棧出棧指令,從地址為sp,數(shù)據(jù)寬度為n倍的存儲器中讀取n倍寬度的數(shù)據(jù);步驟3,將讀取的n倍寬度的數(shù)據(jù)分給n個寄存器;步驟4,堆棧指針寄存器sp加上n得到新的sp指針。I、下面以應用實列來說明本發(fā)明的優(yōu)勢。以8個數(shù)據(jù)寄存器入棧為例。如圖I所示,普通的堆棧入棧指令操作過程例如當前堆棧指針SP = 0x1000 ;RO 入棧Push RO操作堆棧SP = SP-I,堆棧指針SP變?yōu)镺xffff ;R0寫入存儲器地址SP Oxffff。Push Rl (Rl 入棧)操作堆棧SP = SP-1,堆棧指針SP變?yōu)镺xfffe ;R1寫入存儲器地址SP Oxfffe。Push R2 (R2 入棧)操作堆棧SP = SP-I,堆棧指針SP變?yōu)镺xfffd ;R2寫入存儲器地址SP Oxfffd。Push R3 (R3 入棧)操作堆棧SP = SP-1,堆棧指針SP變?yōu)镺xfffc ;R3寫入存儲器地址SP Oxfffe。Push R4 (R4 入棧)操作堆棧SP = SP-1,堆棧指針SP變?yōu)镺xfffb ;R4寫入存儲器地址SP Oxfffb。Push R5 (R5 入棧)操作堆棧SP = SP-I,堆棧指針SP變?yōu)镺xfffa ;R5寫入存儲器地址SP Oxfffa。Push R6 (R6 入找)操作堆棧SP = SP-1,堆棧指針SP變?yōu)?xfff9 ;R6寫入存儲器地址SP 0xfff9。Push R7 (R7 入棧)操作堆棧SP = SP-1,堆棧指針SP變?yōu)?xfff8 ;R7寫入存儲器地址SP 0xfff8。因此,完成R0.. R7等寄存器的入棧共需普通堆棧入棧指令8個指令周期。而采用本發(fā)明的快速堆棧入棧方法的操作過程如圖3所示,當前SP指針為0x10000 :步驟1,將執(zhí)行堆棧入棧指令由指令存儲單元中讀取到指令讀取單元中,再出來送至存儲器訪問單元; 步驟2,根據(jù)所述堆棧入棧指令,將待入棧的8個寄存器數(shù)據(jù)R0,Rl,R2,R3,R4,R5,R6,R7組成ー個8倍長的數(shù)據(jù);
步驟3,堆棧指針寄存器sp減去8得到新的sp指針地址Oxfff8 ;步驟4,對所述8倍長的數(shù)據(jù),存儲到地址為0xfff8 (sp減去8,堆棧SP = SP-8),數(shù)據(jù)寬度為8倍寄存器的目標存儲器;寄存器R7,R6,R5,R4,R3,R2,Rl, RO拼接為ー個8倍寬的數(shù)據(jù)寫入地址為SP的存儲器中,共需I個指令周期。2、下面以應用實列來說明本發(fā)明的優(yōu)勢。以8個數(shù)據(jù)寄存器出棧為例。如圖2所述,普通的堆棧出棧指令操作過程當前堆棧SP指針Oxfff8Pop R7 (R7 出棧)操作R7從存儲器地址SP 0xfff8讀出數(shù)據(jù);堆棧SP = SP+1地址變?yōu)?xfff9 ;
Pop R6 (R6 出棧)操作R6從存儲器地址SP 0xfff9讀出數(shù)據(jù);堆棧SP = SP+1地址變?yōu)镺xfffa ;Pop R5 (R5 出棧)操作R5從存儲器地址SP Oxfffa讀出數(shù)據(jù);堆棧SP = SP+1地址變?yōu)镺xfffb ;Pop R4 (R4 出棧)操作R4從存儲器地址SP Oxfffb讀出數(shù)據(jù);堆棧SP = SP+1地址變?yōu)镺xfffc ;Pop R3 (R3 出棧)操作R3從存儲器地址SP Oxfffc讀出數(shù)據(jù);堆棧SP = SP+1地址變?yōu)镺xfffd ;Pop R2 (R2 出棧)操作R2從存儲器地址SP Oxfffd讀出數(shù)據(jù);堆棧SP = SP+1地址變?yōu)镺xfffe ;Pop Rl (Rl 出棧)操作R1從存儲器地址SP Oxfffe讀出數(shù)據(jù);堆棧SP = SP+1地址變?yōu)镺xffff ;Pop RO (R0 出棧)操作R0從存儲器地址SP Oxffff讀出數(shù)據(jù);堆棧SP = SP+1地址變?yōu)?x10000 ;因此,完成R0.. R7等寄存器的入棧共需普通堆棧出棧指令8個指令周期而采用本發(fā)明的快速堆棧出棧方法的操作過程如圖4所示,當前堆棧指針SP為0xfff8步驟1,將執(zhí)行堆棧出棧指令由指令存儲單元中讀取到指令讀取單元中,再出來送至存儲器訪問單元;步驟2,根據(jù)所述堆棧出棧指令,從地址為sp OxfffS,數(shù)據(jù)寬度為8倍的存儲器中讀取8倍寬度的數(shù)據(jù);步驟3,將讀取的8倍寬度的數(shù)據(jù)分給8個寄存器,R0, Rl, R2,R3,R4,R5,R6,R7 ;步驟4,堆棧指針寄存器sp加上8得到新的sp指針,堆棧指針SP = SP+8,共需I個指令周期。
權(quán)利要求
1.一種堆棧入棧出棧裝置,所述裝置作為處理器的一個組成部分,按照處理器的操作過程,在存儲器訪問單元中執(zhí)行堆棧入棧出棧操作,其特征在于,所述入棧出棧裝置包括指令存儲單元、指令讀取單元、存儲器訪問單元、數(shù)據(jù)寄存器組、堆棧指針寄存器SP。
2.根據(jù)權(quán)利要求I所述的堆棧入棧出棧裝置,其特征在于, 所述指令存儲單元,用來存儲將要執(zhí)行的指令代碼; 所述指令讀取單元,用于將指令代碼從指令存儲單元中讀取并發(fā)送給執(zhí)行單元; 所述存儲器訪問單元,用于訪問程序所需的存儲的數(shù)據(jù)和接口; 所述數(shù)據(jù)寄存器組,包含數(shù)據(jù)寄存器R0,R1,…,Rn,用來存放程序需要的數(shù)據(jù); 所述堆棧指針寄存器SP,用于存儲堆棧的地址指針。
3.根據(jù)權(quán)利要求I或2所述的堆棧入棧出棧裝置,其中,所述指令讀取單元從所述指令存儲單元中讀取堆棧入?;虺鰲V噶?,然后發(fā)給所述存儲器訪問單元,所述存儲器訪問單元根據(jù)所述堆棧入?;虺鰲V噶顖?zhí)行堆棧入棧或出棧操作。
4.根據(jù)權(quán)利要求3所述的堆棧入棧出棧裝置,其中,所述存儲器訪問單元根據(jù)所述堆棧入棧指令將待入棧的n個寄存器組成一個n倍寄存器寬度的數(shù)據(jù)存儲到外部存儲器中,所述n個寄存器由入棧指令決定,所述外部存儲器地址由堆棧地址指針SP決定。
5.根據(jù)權(quán)利要求4所述的堆棧入棧出棧裝置,其中,所述的堆棧入棧裝置用于同時對多個數(shù)據(jù)寄存器進行堆棧入棧操作。
6.根據(jù)權(quán)利要求3所述的堆棧入棧出棧裝置,其中,所述存儲器訪問單元根據(jù)所述堆棧出棧指令從外部存儲器中一次讀出一個n倍寄存器寬度的數(shù)據(jù),并將該數(shù)據(jù)分配給n個出棧的寄存器,所述n個寄存器由出棧指令決定,所述外部存儲器地址由堆棧地址指針SP決定。
7.根據(jù)權(quán)利要求6所述的堆棧入棧出棧裝置,其中,所述的堆棧入棧裝置用于同時對多個數(shù)據(jù)寄存器進行堆棧出棧操作。
8.一種堆棧入棧方法,通過一條指令周期即完成對多個寄存器中入棧操作,其特征在于,所述堆棧入棧方法包括如下步驟 步驟1,將執(zhí)行堆棧入棧指令由指令存儲單元中讀取到指令讀取單元中,再出來送至存儲器訪問單元; 步驟2,根據(jù)所述堆棧入棧指令,將待入棧的n個寄存器數(shù)據(jù)組成一個n倍長的數(shù)據(jù); 步驟3,堆棧指針寄存器sp減去n得到新的sp指針; 步驟4,對所述n倍長的數(shù)據(jù),存儲到地址為(sp減去n),數(shù)據(jù)寬度為n倍寄存器的目標存儲器。
9.一種堆棧出棧方法,通過一條指令周期即完成對多個寄存器中出棧操作,其特征在于,所述堆棧出棧方法包括如下步驟 步驟1,將執(zhí)行堆棧出棧指令由指令存儲單元中讀取到指令讀取單元中,再出來送至存儲器訪問單元; 步驟2,根據(jù)所述堆棧出棧指令,從地址為sp,數(shù)據(jù)寬度為n倍的存儲器中讀取n倍寬度的數(shù)據(jù); 步驟3,將讀取的n倍寬度的數(shù)據(jù)分給n個寄存器; 步驟4,堆棧指針寄存器sp加上n得到新的sp指針。
全文摘要
一種高效率堆棧入棧出棧裝置,作為處理器的一個組成部分,按照處理器的操作過程,在數(shù)據(jù)存儲單元中執(zhí)行堆棧入棧出棧操作,所述裝置包括指令存儲單元,用來存儲將要執(zhí)行的指令代碼;指令讀取單元,該單元將指令代碼從指令存儲單元中讀取并發(fā)送給執(zhí)行單元;存儲器訪問單元,該單元用于訪問程序所需的存儲的數(shù)據(jù)和接口;數(shù)據(jù)寄存器組,包含數(shù)據(jù)寄存器R0,R1,…,Rn,用來存放程序需要的數(shù)據(jù)。堆棧指針寄存器SP,用于存儲堆棧的地址指針。
文檔編號G06F12/04GK102662851SQ20121010491
公開日2012年9月12日 申請日期2012年4月12日 優(yōu)先權(quán)日2012年4月12日
發(fā)明者孫瑞琛 申請人:江蘇中科芯核電子科技有限公司