專利名稱:微處理器標(biāo)記寄存器屏蔽移入彈出裝置和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機系統(tǒng)之內(nèi)的指令執(zhí)行,且特別涉及一種降低執(zhí)行標(biāo)記(EFLAGS)寄存器寫入及讀出所需指令周期次數(shù)的裝置和方法。
背景技術(shù):
在x86管道式微處理器內(nèi),完成一個EFLAGS寄存器彈出指令(例如POPF/POPFD、CLI/STI、CLD/STD、CLC/STC)需要多個執(zhí)行周期。原因是寫入到EFLAGS寄存器的操作取決于當(dāng)前的I/O優(yōu)先等級(IOPL)和寫入時EFLAGS寄存器內(nèi)的特定位的狀態(tài)。在Micfosoft Windows操作系統(tǒng)內(nèi),當(dāng)每次從一調(diào)用子程序返回時,EFLAGS寄存器都從堆棧內(nèi)彈出,從而導(dǎo)致明顯的操作系統(tǒng)延遲現(xiàn)象。
因此,現(xiàn)在需要一種運行微處理器的技術(shù),該技術(shù)可減輕延遲現(xiàn)象,此延遲現(xiàn)象相關(guān)于完成寫入到EFLAGS寄存器的指令,例如彈出指令。
同樣地,在x86管道式微處理器內(nèi),EFLAGS寄存器的堆棧的移入指令(PUSHF/PUSHFD)也需要相當(dāng)多個執(zhí)行周期。原因是從EFLAGS寄存器讀出時位的狀態(tài)和微處理器的執(zhí)行狀態(tài)取決于當(dāng)前I/O優(yōu)先等級(IOPL)和堆棧移入時EFLAGS寄存器內(nèi)的特定位的狀態(tài)。在Microsoft Windows操作系統(tǒng)內(nèi),每次子程序的調(diào)用均導(dǎo)致EFLAGS寄存器移入至堆棧內(nèi),從而導(dǎo)致明顯的操作系統(tǒng)延遲現(xiàn)象。
因此,現(xiàn)在需要一種運行微處理器的技術(shù),該技術(shù)可減輕延遲現(xiàn)象,此延遲現(xiàn)象相關(guān)于這些完成從EFLAGS讀出操作的EFLAGS堆棧移入指令。
發(fā)明內(nèi)容
依照本發(fā)明的一實施例,本發(fā)明提供一種執(zhí)行寫入操作到微處理器內(nèi)多位標(biāo)記寄存器的方法。該方法包括通過微處理器的翻譯級來接收一請求寫入到多位標(biāo)記寄存器的宏指令。該方法還包括通過翻譯級來生成一用于在單個寫入周期內(nèi)寫入到多位標(biāo)記寄存器的微指令。該方法還進(jìn)一步包括生成一個標(biāo)記屏蔽,并將該標(biāo)記屏蔽與一規(guī)定操作數(shù)加以邏輯乘運算后生成一結(jié)果。隨后,該結(jié)果存儲到多位標(biāo)記寄存器內(nèi),在特定實施例的中,多位標(biāo)記寄存器系為執(zhí)行標(biāo)記(EFLAGS)寄存器。
本發(fā)明有助于在單個指令周期之內(nèi),通過完成一寫入操作,而執(zhí)行寫入到EFLAGS寄存器時,減少微處理器的延遲現(xiàn)象。
依照本發(fā)明的另一實施例,本發(fā)明提供一種從多位標(biāo)記寄存器執(zhí)行讀取操作的方法。該方法包括通過微處理器的翻譯級來接收一請求從多位標(biāo)記寄存器讀出的宏指令。該方法還包括通過翻譯級來生成一用于在單個寫入周期內(nèi)從多位標(biāo)記寄存器讀出的微指令。該方法還包括生成一個標(biāo)記屏蔽,該標(biāo)記屏蔽包含根據(jù)當(dāng)前優(yōu)先級信息在讀取操作過程中與更新多位標(biāo)記寄存器的那些字節(jié)有關(guān)的優(yōu)先級信息。該方法還可進(jìn)一步包括將該標(biāo)記屏蔽與該多位標(biāo)記寄存器加以邏輯乘運算后生成一結(jié)果的步驟。另外,該方法還可進(jìn)一步包括存儲該結(jié)果在存儲器堆棧內(nèi)。
本發(fā)明有助于減少發(fā)生在微處理器內(nèi)于EFLAGS寄存器堆棧移入過程中與EFLAGS寄存器讀取有關(guān)的延遲現(xiàn)象。本發(fā)明所述的方法和裝置可在單個指令周期之內(nèi)完成執(zhí)行標(biāo)記堆棧移入的操作。
為使本發(fā)明的上述目的、特征和優(yōu)點能更明顯易懂,下文特舉一較佳實施例,并結(jié)合附圖詳細(xì)說明如下。
圖1表示已知的微處理器的管道等級的方塊圖。
圖2表示本發(fā)明的微處理器的一實施例的方塊圖。
圖3表示圖2所示微處理器運行的流程圖。
圖4表示本發(fā)明的微處理器的另一實施例的方塊圖。
圖5表示圖4所示微處理器運行的流程圖。
附圖標(biāo)記說明105讀取級110翻譯級115寄存級
120地址級125數(shù)據(jù)/算術(shù)邏輯單元級(執(zhí)行級)130反寫級132EFLAGS寄存器(執(zhí)行標(biāo)記寄存器)202讀取級204指令讀取邏輯器206指令存儲器208指令指針210翻譯器212翻譯級216數(shù)據(jù)/算術(shù)邏輯單元-執(zhí)行級218XIQ(翻譯指令隊列)220MTEF指令222寄存級224寄存器文件226ESP(擴展子庫)228OP1寄存器230OP2寄存器232載入級234MTEF寄存器236加載/對位邏輯器238數(shù)據(jù)存儲器240OP3寄存器242OP1寄存器244OP2寄存器246TVAL寄存器(新值寄存器)248TMASK寄存器(屏蔽寄存器)250AND門252PRIV寄存器(優(yōu)先級寄存器)254結(jié)果寄存器256執(zhí)行邏輯器
402讀取級404指令讀取邏輯器406指令存儲器408指令指針410翻譯器412翻譯級414EFLAGS寄存器(執(zhí)行標(biāo)記寄存器)416執(zhí)行邏輯器418數(shù)據(jù)/算術(shù)邏輯單元-執(zhí)行級419XIQ(翻譯指令隊列)420MTEF指令422寄存級424寄存器文件426ESP(擴展子庫)428OP1寄存器430OP2寄存器431地址級432MTEF寄存器434載入級436加載/對位邏輯器438數(shù)據(jù)存儲器440OP3寄存器442OP1寄存器444OP2寄存器445存儲器內(nèi)堆棧446PRIV寄存器(優(yōu)先級寄存器)448FMASK寄存器450AND門452結(jié)果寄存器454存儲邏輯器456存儲級
具體實施例方式
以下描述是為了使本領(lǐng)域的技術(shù)人員能夠根據(jù)特定應(yīng)用領(lǐng)域及其要求來順利地應(yīng)用本發(fā)明。然而,對于本領(lǐng)域技術(shù)人員來說,很明顯的情況是,可對所提供的幾個較佳實施例實施加以修改,并且此處所定義的一般原理也適用于其它實施例。因此,本發(fā)明并非僅局限于此處所述的特定實施例,而是適用于與本發(fā)明所述原理和新特征相關(guān)的一個較廣的領(lǐng)域。
圖1表示已知的管道式微處理器100的管道等級的方塊圖。微處理器100包括讀取級105、翻譯級110、寄存級115、地址級120、數(shù)據(jù)/算術(shù)邏輯部件或執(zhí)行級125和反寫級130。
在運作時,讀取級105從存儲器(未標(biāo)出)讀取微處理器100所需執(zhí)行的宏指令。翻譯級110將所讀取的宏指令翻譯成相關(guān)的微指令。
每一微指令命令微處理器100完成一與讀取宏指令規(guī)定操作相關(guān)的具體子任務(wù)。寄存級115從一在管道內(nèi)的后續(xù)等級所使用的寄存器文件(未標(biāo)出)中,檢索這些微指令所規(guī)定的操作數(shù)。地址級120計算這些由微指令所指定的存儲器地址,以使用于數(shù)據(jù)存儲和檢索操作。數(shù)據(jù)/算術(shù)邏輯部件級125要么完成從寄存器文件中檢索數(shù)據(jù)的算術(shù)邏輯單元運算,要么使用地址級120計算所得存儲器地址來將數(shù)據(jù)寫入到存儲器或從存儲器讀取數(shù)據(jù)。反寫級130將數(shù)據(jù)讀取操作的結(jié)果或算術(shù)邏輯單元運算的結(jié)果寫入到寄存器文件。因此,總結(jié)如下,宏指令通過讀取級105讀取,并通過翻譯級110譯碼翻譯成微指令。經(jīng)翻譯后的微指令通過等級115-130來執(zhí)行。微處理器100就是這樣提供管道操作。
為更好理解本發(fā)明所披露的技術(shù),下面所描述的內(nèi)容將采用x86微處理器術(shù)語。然而,本領(lǐng)域技術(shù)人員將認(rèn)同x86寄存器和宏指令的使用僅是作為例證性說明的目的。同樣可輕易地采用其它微處理器或結(jié)構(gòu)形式來完成本發(fā)明的例證性說明。
數(shù)據(jù)/算術(shù)邏輯單元級125包括EFLAGS寄存器132,該寄存器132記錄有微處理器的狀態(tài)。EFLAGS寄存器132可被很多指令所修改,且用于進(jìn)行參數(shù)比較、條件循環(huán)和條件跳躍。EFLAGS寄存器的每一位都含有一個上一指令特定參數(shù)的狀態(tài)。下述表1所示32位與每一位的功能合在一起就組成EFLAGS寄存器。
表1
在當(dāng)今管道式的微處理器內(nèi),例如在微處理器100內(nèi),執(zhí)行任何一個寫入到EFLAGS寄存器(即POPF/POPFD、CLI/STI、CLD/STD、CLC/STC)的指令都需要運行很多次機器周期。原因是寫入到EFLAGS寄存器132的操作取決于寫入時當(dāng)前I/O優(yōu)先級和EFLAGS寄存器內(nèi)特定位的狀態(tài)。更具體地說,位1、3、5、15和22-31均為保留位,它們的具體狀態(tài)并不能被更改。另外,當(dāng)微處理器運行在受保護模式的優(yōu)先級為0(或?qū)嵉刂纺J?,其等同于?yōu)先級0)時,除了VIP、VIF、VM位以外,所有非保留位均可更改。VIP、VIF標(biāo)記必須清除掉,而VM標(biāo)記則必須保持其當(dāng)前狀態(tài)。
執(zhí)行任何將數(shù)據(jù)寫入到EFLAGS寄存器132的前述宏指令都會產(chǎn)生幾個微指令。更詳細(xì)地說,首先執(zhí)行一個微指令以確定當(dāng)前I/O優(yōu)先級(IOPL)。后續(xù)微指令讀取例如VM、PF、IOPL、VIP、IF等特定EFLAGS寄存器位的狀態(tài),并為將要寫入到EFLAGS寄存器的新數(shù)據(jù)建立多個位狀態(tài)。最后執(zhí)行一微指令以將新數(shù)據(jù)寫入到EFLAGS寄存器132。
上述EFLAGS寄存器更新的傳統(tǒng)方法的明顯缺點是為完成一寫入到EFLAGS寄存器的操作必須執(zhí)行很多微指令。由于要生成并處理多個微指令,故EFLAGS寄存器的每次更新所需有效時間就會延長。這會對微處理器的效率產(chǎn)生不良影響。
本申請的發(fā)明人已經(jīng)認(rèn)知到在Microsoft Windows操作系統(tǒng)中,當(dāng)從子程序返回時,EFLAGS寄存器每次都會從堆棧彈出。他們同樣也注意到該情況同樣也發(fā)生在寫入到當(dāng)今常用桌上型計算機應(yīng)用程序執(zhí)行標(biāo)記寄存器的其它微指令。由于這些指令屬于常規(guī)使用指令類型,故希望能最大限度地縮減與它們相關(guān)的執(zhí)行時間。
本發(fā)明的微處理器技術(shù)披露于此的目的是減少完成寫入到執(zhí)行標(biāo)記寄存器所需指令周期的數(shù)目。為達(dá)到該目的,本發(fā)明提供了一種動態(tài)產(chǎn)生執(zhí)行標(biāo)記屏蔽的裝置和方法。該屏蔽與規(guī)定操作數(shù)(即彈出執(zhí)行標(biāo)記寄存器或選定的執(zhí)行標(biāo)記位狀態(tài))進(jìn)行邏輯乘的操作,所得結(jié)果寫入到執(zhí)行標(biāo)記寄存器。此處所述的新的微處理器有助于使用單一微指令,其名為移動到執(zhí)行標(biāo)記寄存器(MTEF)指令,搭配執(zhí)行級的專用邏輯器,可在單一指令周期之內(nèi)完成寫入到執(zhí)行標(biāo)記寄存器的操作。
圖2所示為使用單個微指令MTEF在單個指令周期內(nèi)完成寫入到執(zhí)行標(biāo)記寄存器的操作的微處理器200方塊圖。微處理器200包括讀取級202,其包含一與指令存儲器206相連接的指令讀取邏輯器204。指令指針208連接到讀取邏輯器204,以便命令讀取邏輯器204到存儲器206的特定位置,且當(dāng)前指令就從該特定位置讀取。
當(dāng)讀取邏輯器204讀取例如POPF/POPFD、CLI/STI、CLD/STD或CLC/STC等宏指令時,翻譯級212的翻譯器210作為響應(yīng)會生成一MTEF D,S微指令,該指令在數(shù)據(jù)/算術(shù)邏輯單元-執(zhí)行級216內(nèi)執(zhí)行一移動到執(zhí)行標(biāo)記寄存器214的操作。在MTEF D,S微指令之內(nèi),S表示一信息源,其表示信息源將傳送到執(zhí)行標(biāo)記寄存器214。D表示在執(zhí)行標(biāo)記寄存器之內(nèi)將要進(jìn)行寫入操作的這些位。
在介紹MTEF微指令之前,先介紹微處理器200的其它結(jié)構(gòu)。如圖所示,MTEF D,S微指令提供到翻譯指令隊列(XIQ)218。然后,微指令MTEF D,S繼續(xù)行進(jìn)到寄存級222的MTEF寄存器220。寄存級222包括一存儲微處理器200的結(jié)構(gòu)狀態(tài)的寄存器文件224。寄存器文件224還包括擴展子庫(ESP)寄存器226。如圖所示,寄存級222還包括OP1寄存器228和OP2寄存器230。
寄存級222通過一地址級(在圖中并未標(biāo)出)而連接到載入級232。該微處理器使用一傳統(tǒng)地址級來計算這些微處理器200進(jìn)行指令處理的地址。MTEF寄存器的內(nèi)容傳送并存儲到載入級232的相應(yīng)MTEF寄存器234內(nèi)。加載級232包括加載/對位邏輯器236,如圖所示,其連接到寄存級222的OP1寄存器228和OP2寄存器230。加載對位邏輯器236連接到數(shù)據(jù)存儲器238。加載對位邏輯器236的輸出端連接到OP3寄存器240。如圖所示,寄存級222的OP1寄存器228和OP2寄存器230的內(nèi)容分別提供到加載級232的OP1寄存器242和OP2寄存器244。
微處理器200還包括一含有前述的執(zhí)行標(biāo)記寄存器214的數(shù)據(jù)/算術(shù)邏輯單元或執(zhí)行級216。數(shù)據(jù)/算術(shù)邏輯單元級216包括TVAL寄存器246和TMASK寄存器248,其內(nèi)容借助于AND門250而邏輯乘到一起。該邏輯乘操作的結(jié)果存儲到執(zhí)行標(biāo)記寄存器214之內(nèi)。該邏輯乘操作和TMASK寄存器248所提供的屏蔽的操作將在隨后討論。數(shù)據(jù)/算術(shù)邏輯單元級216包括優(yōu)先級寄存器PRIV 252,該優(yōu)先級寄存器提供與當(dāng)前執(zhí)行到TMASK寄存器248指令相關(guān)的優(yōu)先級信息。指令執(zhí)行結(jié)果提供到結(jié)果寄存器254。該結(jié)果通過結(jié)果總線(圖中未標(biāo)出)反寫到寄存器文件224內(nèi)。
如同前面簡述過的情況,為響應(yīng)讀取邏輯器204所提供到翻譯器210的讀取宏指令POPF/POPFD、CLI/STI、CLD/STD、CLC/STC,翻譯器210生成單個微指令MTEF D,S,該微指令隨后提供到翻譯隊列(XIQ)216和連接到該位置的寄存級222。MTEF微指令包括一信息源S和一目標(biāo)區(qū)D。目標(biāo)區(qū)D規(guī)定要寫入的執(zhí)行標(biāo)記寄存器214的這些位。例如若目標(biāo)區(qū)D=0,則表示寫入到表1所示執(zhí)行標(biāo)記寄存器214內(nèi)0位的進(jìn)位標(biāo)記CF。再比如,若目標(biāo)區(qū)D=9,則表示寫入到執(zhí)行標(biāo)記寄存器內(nèi)的IF位,若目標(biāo)區(qū)D=10,則表示寫入到執(zhí)行標(biāo)記寄存器內(nèi)的DF位。若將翻譯器210生成的微指令MTEF D,S中的D設(shè)置成D=31就表示執(zhí)行標(biāo)記寄存器214從堆棧彈出。
微指令MTEF D,S的信息源S規(guī)定這些寫入到執(zhí)行標(biāo)記寄存器214位的狀態(tài)。例如若D=10,S=0表示命令微處理器200清除DF。若D=0,S=1表示命令微處理器200設(shè)置進(jìn)位標(biāo)記。換句話說,在微指令MTEF D,S內(nèi),S=0表示清除目標(biāo)位,S=1表示目標(biāo)位的一種設(shè)置。對于POP EFLAGS指令來說,可忽略S字段。
數(shù)據(jù)/算術(shù)邏輯單元執(zhí)行級216內(nèi)的執(zhí)行邏輯器256在寫入到執(zhí)行標(biāo)記寄存器時提供一屏蔽,以便保證僅寫入到正確的位位置。TMASK寄存器248的內(nèi)容在執(zhí)行MTEF微指令時動態(tài)生成。數(shù)據(jù)/算術(shù)邏輯單元執(zhí)行級216的執(zhí)行邏輯器256從優(yōu)先級寄存器PRIV 252存取當(dāng)前運行模式,并從執(zhí)行標(biāo)記寄存器214存取其它位的狀態(tài)。S字段的值或從加載級232堆棧內(nèi)所讀取的執(zhí)行標(biāo)記寄存器被提供到新值寄存器TVAL 246。如圖2所示,TVAL借助于AND門250與TMASK進(jìn)行邏輯乘運算,所得結(jié)果寫入到執(zhí)行標(biāo)記寄存器214。該方法的優(yōu)點是,TMASK僅用于更改從PRIV寄存器252獲得的特定當(dāng)前運行模式函數(shù)允許的那些位。根據(jù)該實施例,指令所能具有的最高優(yōu)先等級數(shù)為3,在更新執(zhí)行標(biāo)記寄存器內(nèi)具體位時,該最高優(yōu)先級為3的指令具有最大更改范圍。具有較低優(yōu)先級的指令根據(jù)它們更新執(zhí)行標(biāo)記的能力,具有嚴(yán)格限制的更改范圍。最低優(yōu)先級數(shù)值為0。作為一實施例,屏蔽包括與執(zhí)行標(biāo)記寄存器相同數(shù)量的位。根據(jù)PRIV寄存器446提供的當(dāng)前優(yōu)先級,若設(shè)定一個特定屏蔽位,這表示它可被更新,而若沒有設(shè)定一個特定屏蔽位,則表示它不能被更新。簡而言之,TVAL提供了要寫入到執(zhí)行標(biāo)記的特定值,TMASK根據(jù)存儲在PRIV寄存器252特定指令相關(guān)的優(yōu)先級信息,以確定是否允許實施這樣一個寫入操作。
本發(fā)明所提供技術(shù)的優(yōu)點是可以在單個指令周期之內(nèi)執(zhí)行寫入到執(zhí)行標(biāo)記寄存器指令,從而可顯著地增加微處理器的處理能力。
圖3表示微處理器200根據(jù)本發(fā)明的先進(jìn)方法執(zhí)行寫入到執(zhí)行標(biāo)記寄存器的操作時高度簡化的處理過程流程圖。例如POPF/POPFD、CLI/STI、CLC/STC或CLD/STD等宏指令可依照方塊300從存儲器讀取。當(dāng)翻譯器210依照方塊305翻譯該宏指令時,該宏指令就會產(chǎn)生一個寫入到執(zhí)行標(biāo)記寄存器214的請求。EFLAGS屏蔽就會依照方塊310在EFLAGS屏蔽寄存器TMASK 248內(nèi)產(chǎn)生。此時,如同前述,執(zhí)行宏指令產(chǎn)生的要寫入到EFLAGS的新值就會載入到方塊315內(nèi)的TVAL寄存器246。依照步驟320將目標(biāo)信息提供到TMASK寄存器。同時也將當(dāng)前優(yōu)先級提供到TMASK寄存器,以便為TMASK寄存器配置一個值,假設(shè)依照方塊325優(yōu)先級信息允許更改該單個位或多個位的話,該值允許更改目標(biāo)信息指定的特定EFLAGS位。依照方塊330,TMASK寄存器內(nèi)容與新值TVAL寄存器內(nèi)容進(jìn)行邏輯乘的操作,以便確保只有當(dāng)前優(yōu)先級允許的應(yīng)該更新的那些EFLAGS位依照方塊335在EFLAGS內(nèi)獲得更新。
前述已經(jīng)注意到,在傳統(tǒng)管道式微處理器之內(nèi),執(zhí)行將EFLAGS寄存器移入至堆棧的命令PUSHF/PUSHFD時,需要運行相當(dāng)多個微處理器周期。原因是從EFLAGS寄存器的讀取操作取決于當(dāng)前I/O優(yōu)先級(IOPL)和寫入時EFLAGS內(nèi)特定位狀態(tài)。更具體地說,位1、5、15和22-31為保留位,其具體狀態(tài)不能更改。另外,不能拷貝EFLAGS寄存器的VM和RF標(biāo)記(位16和17)。反倒是,在存儲到堆棧的EFLAGS寄存器圖像內(nèi)要清除這些標(biāo)記值。
當(dāng)x86微處理器運行在虛擬8086模式且I/O優(yōu)先級(IOPL)小于3時,執(zhí)行PUSHF/PUSHFD指令肯定會引起通用保護故障或異常。然而,在真實地址模式之下,若在執(zhí)行指令PUSHF/PUSHFD時,ESP寄存器或SP寄存器為1、3或5,則會由于堆棧空間不足而導(dǎo)致微處理器關(guān)閉。
在例如微處理器100等當(dāng)今管道式微處理器之內(nèi),執(zhí)行任何PUSHF/PUSHFD指令都會導(dǎo)致生成多個微指令。首先,執(zhí)行一微指令將EFLAGS內(nèi)容移動到臨時寄存器。然后執(zhí)行一微指令清除VM、PF位。隨后,執(zhí)行一微指令確定當(dāng)前I/O優(yōu)先級IOPL,目的是讓微處理器清楚是否應(yīng)生成異?;蜿P(guān)閉微處理器。最后,執(zhí)行一微指令將EFLAGS圖像存儲回堆棧。
上面所討論的傳統(tǒng)微處理器的一個明顯缺點是為了完成一EFLAGS移入到堆棧的操作,必須執(zhí)行很多微指令。其中某些微指令是必須的,原因是在將EFLAGS移動到堆棧之前,必須詢問當(dāng)前I/O優(yōu)先級(IOPL)。其中還有某些微指令的所以必須的原因是在移入之前要清除EFLAGS內(nèi)的特定位。另外,由于當(dāng)前管道式微處理器結(jié)構(gòu)不適合同時執(zhí)行包括算術(shù)邏輯單元操作和存儲操作的指令,如此則必須生成更多微指令。當(dāng)前所知的執(zhí)行級邏輯器僅允許執(zhí)行算術(shù)邏輯單元和存儲器存取操作中的某一單一功能。因此,任何后續(xù)含有存儲類型操作的規(guī)定算術(shù)邏輯單元類型操作指令都必須生成兩個連續(xù)微指令,以便在連續(xù)的單個機器周期內(nèi)完成這兩個操作。發(fā)明人注意到在例如Microsoft Windows等操作系統(tǒng)中,EFLAGS寄存器在每次調(diào)用子程序時均移入至堆棧。由于調(diào)用現(xiàn)象很頻繁,因此非常希望能降低與EFLAGS移入到堆棧相關(guān)的執(zhí)行時間。
圖4所示微處理器400的優(yōu)點是提供了一種單個微指令,從EFLAGS移動指令(MFEF),將EFLAGS寄存器414的內(nèi)容移動到堆棧。數(shù)據(jù)/算術(shù)邏輯單元或執(zhí)行級418的執(zhí)行邏輯器416和加載-算術(shù)邏輯單元存儲管線式結(jié)構(gòu)使得EFLAGS移入的操作可在單個指令周期內(nèi)完成。因此也就顯著地改善了微處理器的效率。
微處理器400包括讀取級402,其將命令讀取邏輯器404連接到指令存儲器406。指令指針408系連接到讀取邏輯器404,以命令讀取邏輯器404指定到指令存儲器406的特定位置,且可從該位置讀取當(dāng)前指令。
當(dāng)讀取邏輯器404讀取例如PUSHF/PUSHFD等宏指令時,翻譯級412的翻譯器410響應(yīng)生成MFEF微指令,該微指令完成從EFLAGS寄存器414移動到數(shù)據(jù)/算術(shù)邏輯單元-執(zhí)行級418的操作。
如圖所示,MFEF微指令提供到翻譯指令隊列(XIQ)419。該MFEF微指令行進(jìn)到寄存級422的MFEF寄存器420。寄存級422包括存儲微處理器400的結(jié)構(gòu)狀態(tài)的寄存器文件424。寄存器文件424包括堆棧指針寄存器ESP 426。如圖所示,寄存級222包括OP1寄存器428和OP2寄存器430。地址級431緊鄰寄存級422。地址級431計算存儲值地址,以便可從存儲器檢索它們并將它們寫入到存儲器。
提供MFEF寄存器420內(nèi)容,并將它們存儲在載入級434的相應(yīng)MFEF寄存器432內(nèi)。加載級434包括加載/對位邏輯器436,如圖所示,該邏輯器436連接到寄存級422的OP1寄存器428和OP2寄存器430。加載對位邏輯器436連接到數(shù)據(jù)存儲器438。加載對位邏輯器436的輸出端連接到OP3寄存器440。如圖所示,寄存級422的OP1寄存器428和OP2寄存器430的內(nèi)容提供到加載級232的OP1寄存器442和OP2寄存器444。
MFEF寄存器432、OP1寄存器442、OP2寄存器444和OP3寄存器440連接到數(shù)據(jù)/算術(shù)邏輯單元級418的執(zhí)行邏輯器416,以便將這些寄存器中每一寄存器數(shù)值提供到執(zhí)行邏輯器416。
現(xiàn)在描述MFEF微指令從翻譯級412到數(shù)據(jù)/算術(shù)邏輯單元執(zhí)行級418的過程。當(dāng)翻譯器410接收到一個PUSHF或PUSHFD指令時,翻譯器410會在其輸出端響應(yīng)生成一個MFEF微指令。該MFEF微指令命令微處理器400執(zhí)行遞減和讀取的操作,并進(jìn)一步命令堆棧指針寄存器ESP 426讀取EFLAGS寄存器414,并依照當(dāng)前操作狀態(tài)函數(shù)對EFLAGS圖像進(jìn)行動態(tài)修正。然后將該EFLAGS圖像存儲到存儲器445的堆棧內(nèi)。
數(shù)據(jù)/算術(shù)邏輯單元執(zhí)行級418的執(zhí)行邏輯器416包括存儲當(dāng)前執(zhí)行指令優(yōu)先級信息或IOPL的優(yōu)先級寄存器PRIV 446。優(yōu)先級寄存器PRIV 446連接到FMASK寄存器448。EFLAGS寄存器414連接到FMASK寄存器448,以便向FMASK寄存器448提供第二個輸入端。執(zhí)行邏輯器416提供了一個屏蔽,名為FMASK,該屏蔽在執(zhí)行MFEF微指令時動態(tài)產(chǎn)生。作為一實施例,該屏蔽含有與EFLAGS寄存器數(shù)量相同的位。根據(jù)PRIV寄存器446提供的當(dāng)前優(yōu)先級,若設(shè)定一個特定屏蔽位,這表示它可被更新,而若一個特定屏蔽位沒有設(shè)定,則表示它不能被更新。執(zhí)行邏輯器416從優(yōu)先級寄存器PRIV 446存取當(dāng)前操作模式,從EFLAGS寄存器414存取其它位狀態(tài)。然后,讀取EFLAGS寄存器內(nèi)容,并將其與FMASK邏輯乘生成一結(jié)果,該結(jié)果存儲到結(jié)果寄存器452。更詳細(xì)地說,F(xiàn)MASK寄存器448的輸出端連接到AND門450的一個輸入端。AND門450的其它輸入端連接到EFLAGS寄存器414。
在下一機器周期,存儲在結(jié)果寄存器452內(nèi)的結(jié)果寫入到存儲器堆棧內(nèi),寫入地址由ESP寄存器426指定。由于在緊接著的下個機器周期,該結(jié)果將提供到寄存級456的存儲邏輯器454,故不需要對EFLAGS圖像進(jìn)行臨時存儲。存儲邏輯器454發(fā)送該結(jié)果,以便將其存儲在存儲器458堆棧內(nèi)。
微處理器400的優(yōu)點是可在單個指令周期內(nèi)運行PUSHF PUSHFD指令,這顯著地增加了微處理器的效率。
圖5表示根據(jù)本發(fā)明所述先進(jìn)技術(shù)微處理器400執(zhí)行從EFLAGS讀取操作以便進(jìn)行堆棧移入時微處理器工作流程圖。作為一實施例,讀取器404從指令存儲器檢索PUSHF或PUSHFD宏指令。根據(jù)該種方式,在微指令傳送到堆棧之前,就已經(jīng)讀取了依據(jù)方塊500需要從EFLAGS寄存器414讀取的微指令。方塊505表示翻譯器410將宏指令翻譯成一用于在單個微指令周期內(nèi)從EFLAGS寄存器讀取操作的MFEF微指令。依照方塊510,在FMASK寄存器448內(nèi)生成一個EFLAGS屏蔽。作為一實施例,該EFLAGS屏蔽具有與EFLAGS本身數(shù)目相等的位。因此,在FMASK寄存器內(nèi)EFLAGS屏蔽位與EFLAGS寄存器位之間存在一一對應(yīng)關(guān)系。為在方塊515內(nèi)生成EFLAGS屏蔽,執(zhí)行邏輯器416檢查優(yōu)先級情況,并設(shè)置與根據(jù)特定當(dāng)前優(yōu)先級允許更改的特定EFLAGS位相關(guān)的屏蔽位。相應(yīng)于不能被更改EFLAGS位的其它屏蔽位則處于未設(shè)置狀態(tài)或等于零狀態(tài)。然后,該屏蔽依照方塊520與EFLAGS寄存器的內(nèi)容進(jìn)行邏輯乘的操作,所得結(jié)果依照方塊525寫入到堆棧。
上面結(jié)合圖2及圖3所示內(nèi)容描述了一種增加寫入到EFLAGS寄存器的操作微處理器效率的裝置和方法。結(jié)合圖4及圖5所示內(nèi)容描述了一種增加執(zhí)行從EFLAGS寄存器讀取操作微處理器效率的裝置和方法。該方法的優(yōu)點是寫入到EFLAGS的操作和從EFLAGS讀取的操作均可在單個指令周期內(nèi)完成,而不像過去所用微處理器那樣需要多個周期。
盡管在此已詳細(xì)描述了本發(fā)明及其目標(biāo)、特征和優(yōu)點,但本發(fā)明還包括其它實施例。除了采用硬件來實施本發(fā)明以外,本發(fā)明還可適用于可處理計算機程序代碼(例如軟件),例如可應(yīng)用于存儲該代碼的計算機可用(可讀)介質(zhì)。該代碼實現(xiàn)本發(fā)明的功能、制造、建模、模擬和/或測試。例如可通過形式為通用編程語言(例如C、C++等),GDSII,包括VERILOG HDL、VHDL、AHDL(Altera硬件描述語言)等硬件描述語言(HDL)等,或其它數(shù)據(jù)庫,本技術(shù)領(lǐng)域編程和/或電路(圖解)捕獲工具之類計算機可讀程序編碼來完成。該編碼可在任何可知計算機可用介質(zhì)上處理,這些介質(zhì)包括半導(dǎo)體存儲器、磁盤、光盤(如CD-ROM、DVD-ROM等)、實施在計算機可用(可讀)傳輸介質(zhì)(如載波或包括數(shù)字、光學(xué)或類似介質(zhì)的任何其它介質(zhì))的計算機數(shù)據(jù)信號。這樣,該代碼就可在包括因特網(wǎng)和局域網(wǎng)絡(luò)的通信網(wǎng)路上傳播。在此可認(rèn)為上述本發(fā)明的功能和/或結(jié)構(gòu)可適用于實施為編碼(如HDL、GDSII等)、并可轉(zhuǎn)變?yōu)榧呻娐凡糠钟布奈⑻幚砥?。同樣該發(fā)明可實施為硬件與編碼組合態(tài)的形式。
雖然本發(fā)明已以二個較佳實施例披露如上,然其并非用以限定本發(fā)明,本領(lǐng)域技術(shù)人員在不脫離本發(fā)明的精神和范圍內(nèi),可作若干的更動與潤飾,因此本發(fā)明的保護范圍視后附的權(quán)利要求為準(zhǔn)。
權(quán)利要求
1.一種完成寫入到微處理器中一多位標(biāo)記寄存器操作的方法,該方法包括在一翻譯級接收一請求寫入到該多位標(biāo)記寄存器的一宏指令;以及在該翻譯級生成一寫入周期之內(nèi)可寫入到該多位標(biāo)記寄存器的一微指令。
2.如權(quán)利要求1所述的完成寫入到微處理器多位標(biāo)記寄存器操作的方法,還包括生成一標(biāo)記屏蔽。
3.如權(quán)利要求2所述的完成寫入到微處理器多位標(biāo)記寄存器操作的方法,還包括將該標(biāo)記屏蔽與一規(guī)定操作數(shù)進(jìn)行邏輯乘的操作生成一結(jié)果。
4.如權(quán)利要求3所述的完成寫入到微處理器多位標(biāo)記寄存器操作的方法,還包括將該結(jié)果存儲到該多位標(biāo)記寄存器。
5.如權(quán)利要求4所述的完成寫入到微處理器多位標(biāo)記寄存器操作的方法,其中該多位標(biāo)記寄存器為一執(zhí)行標(biāo)記寄存器。
6.如權(quán)利要求1所述的完成寫入到微處理器多位標(biāo)記寄存器操作的方法,其中該宏指令為下列類型之一POPF、POPFD、CLI、STI、CLC、STC、CLD和STD。
7.一種從一多位標(biāo)記寄存器完成一讀取操作的方法,該方法包括在一翻譯級接收一請求從一多位標(biāo)記寄存器讀出的一宏指令;以及在該翻譯級生成一寫入周期內(nèi)可從該多位標(biāo)記寄存器讀出的一微指令。
8.如權(quán)利要求7所述的完成從多位標(biāo)記寄存器讀取操作的方法,還包括生成一個標(biāo)記屏蔽,該標(biāo)記屏蔽包含根據(jù)當(dāng)前優(yōu)先級信息的一讀取操作過程中與更新該多位標(biāo)記寄存器的那些字節(jié)有關(guān)的優(yōu)先級信息。
9.如權(quán)利要求8所述的完成從多位標(biāo)記寄存器讀取操作的方法,還包括將該標(biāo)記屏蔽與該多位標(biāo)記寄存器邏輯乘運算后生成一結(jié)果。
10.如權(quán)利要求7所述的完成從多位標(biāo)記寄存器讀取操作的方法,其中該多位標(biāo)記寄存器為一EFLAGS寄存器。
全文摘要
一種寫入到微處理器內(nèi)EFLAGS寄存器或從該寄存器讀出的方法和裝置。對于特定寫入到EFLAGS請求,采用寫入操作目標(biāo)信息和寫入操作優(yōu)先級信息生成一屏蔽。隨后,該屏蔽與EFLAGS的新值信息進(jìn)行邏輯乘的操作,所得結(jié)果在單個指令周期內(nèi)寫入到EFLAGS寄存器。對于特定從EFLAGS讀出請求,采用根據(jù)當(dāng)前優(yōu)先級信息讀取操作過程中與更新多位標(biāo)記寄存器那些字節(jié)有關(guān)的優(yōu)先級信息生成一屏蔽。隨后,該屏蔽與EFLAGS寄存器內(nèi)容進(jìn)行邏輯乘的操作,所得結(jié)果存儲到存儲器堆棧內(nèi)。
文檔編號G06F9/06GK1497432SQ0315978
公開日2004年5月19日 申請日期2003年9月25日 優(yōu)先權(quán)日2002年10月22日
發(fā)明者杰勒德·M·科爾, G·格倫·亨利, 特里·帕克斯, 住ず嗬, 帕克斯, 杰勒德 M 科爾 申請人:智權(quán)第一公司