新四季網

微處理器以及快速執行條件分支指令的方法

2023-11-06 12:10:07


專利名稱::微處理器以及快速執行條件分支指令的方法
技術領域:
:本發明主要關於微處理器的技術,特別有關於一種執行條件分支指令的微處理器與方法。
背景技術:
:當沒有控制流程指令時,微處理器依序地提取指令並執行該指令。換言之,預設動作就是讓微處理器先提取一指令,接著再提取下一個循序指令,然後再提取下一個循序指令,以此類推。然而,控制流程指令會命令微處理器脫離此循序提取制度。微處理器在其指令集架構(instructionsetarchitecture)中包括某種型式的條件分支指令,用以指定一分支條件狀態(通常是一條件旗標(conditionflag)或是一通用暫存器中的數值)及一分支條件(舉例而言,位設定、位清除、等於零或大於一定值)。條件分支指令也指定一分支目標地址(branchtargetaddress)。微處理器根據分支條件檢查分支條件狀態,用以決定分支條件狀態是否滿足被條件分支指令所指定的分支條件。若分支條件狀態滿足分支條件,微處理器開始提取分支目標地址上的指令,而不是提取下一個循序指令。正如眾所皆知的微處理器技術,現今的微處理器包括一具有多個階段的管線(pipeline),每一階段執行有關程序指令的不同的工作。在標準的管線式微處理器中,階段包括指令提取(instructionfetch)、指令解碼(instructiondecode)、運算元提取(operandfetch)、執行(execute)以及寫回結果(resultwrite-back)這五個階段。一程序中的條件分支指令會大大地增加微處理器執行程序所需的時間。這是因為在傳統上,執行階段(executestage)用以分析條件分支指令,即決定分支條件狀態是否滿足分支條件。其中一個原因是程序中的指令在程序順序(programorder)中的順序可能會比條件分支指令還要老舊(older),而這些比條件分支指令還要老舊的指令用以更新分支條件狀態。因此,在運算元提取階段可以提取條件分支指令的來源運算元(sourceoperands)之前,微處理器必須等待直到執行單元產生上述比較老舊的指令的結果(這些比較老舊的指令的結果為條件分支指令中用以構成(constitute)分支條件狀態的來源運算元),以便發出條件分支指令用以執行。然而,特別是在高度管線化(de印Iypipelined)及/或亂序執行(out-of-orderexecution)微處理器中,微處理器可能已經提取以及處理許多程度不同的下一個循序指令(位於條件分支指令之後),並且在執行單元分析條件分支指令時,這些循序指令在程序順序中的順序要比條件分支指令還要新(newer)。若執行單元決定分支條件狀態滿足分支條件(即代表條件分支指令將會被取用(taken)),微處理器必須清除所有位於條件分支指令之後依序提取的指令,並開始提取分支目標地址上的指令。這大大地增加了微處理器執行程序所需的時間。為了解決此問題,現今的微處理器包括分支預測器(branchpredictors)用以預測方向(direction)(即分支條件狀態滿足分支條件(稱為「被取用」),或不滿足分支條件(稱為「不被取用(nottaken)」))。然而,分支預測器可能會誤預測(mispredict)方向,在此情況下,因為微處理器必須清除管線中錯誤提取的指令,並開始提取正確地址上的指令(即根據是否發生正確的方向來決定該正確地址為下一個地址或分支目標地址),所以微處理器需要承擔一分支誤預測代價(branchmispredictionpenalty)0再者,這會大大地增加程序執行時間,特別是在程序中具有一些難以準確預測的條件分支指令的情況下。因此,需要一種能夠及早正確地分析管線中的條件分支指令的方法,用以置換(override)分支預測器的分支預測信息。舉例而言,該方法已揭露於Boseetal.所獲得的美國專利第5,805,876號「一種適用於一處理器的方法與系統,用以減少平均分支解析時間及有影響的誤預測代價」。然而,Boseetal.所提出的微處理器有一個缺點,就是該微處理器會選擇性地(條件性地)提早分析條件分支指令。換言之,該微處理器只在分支指令滿足一組特定的條件時,才會提早分析條件分支指令,例如第一個偵測到的條件分支指令設置在一指令緩衝器中的第一可配送位置(dispatchableposition)中。因此,需要一種具有一改良技術的微處理器,用以允許程序條件性地分支。
發明內容本發明提供了一種微處理器,包括一存儲器、一第一提取單元、一執行單元以及一第二提取單元。存儲器用以儲存一異常處理例行程序以處理一異常條件,其中上述異常處理例行程序為上述微處理器私有的一非使用者程序,且上述異常處理例行程序包括一條件分支指令。第一提取單元用以提取一使用者程序的多個指令,其中上述使用者程序包括造成上述異常條件的一使用者程序指令。執行單元用以執行上述第一提取單元所提取的上述使用者程序的上述指令以及除了上述條件分支指令之外的上述異常處理例行程序的多個指令,並且用以響應偵測到上述使用者程序所造成的上述異常條件而儲存一狀態。第二提取單元用以自上述存儲器提取上述異常處理例行程序的上述指令,並且用以根據上述狀態解析上述條件分支指令而不將上述條件分支指令傳送到上述執行單元去進行解析,其中上述狀態指定上述異常條件的一發生原因。本發明另外提供了一種微處理器,包括一提取單元以及一執行單元。提取單元用以提取一程序的多個指令,且上述程序包括造成一異常條件的一程序指令,以及用以提取處理上述異常條件的一異常處理例行程序,其中上述異常處理例行程序包括一條件分支指令。執行單元用以執行上述提取單元所提取的上述指令,並且執行除了上述條件分支指令之外的上述異常處理例行程序的多個指令,以及用以響應偵測到上述程序指令所造成的上述異常條件而儲存一狀態。其中上述提取單元還用以響應上述執行單元偵測到上述異常條件而提取上述異常處理例行程序的上述指令,並且根據上述狀態無條件地解析上述條件分支指令,而不將上述條件分支指令傳送到上述執行單元去進行解析。本發明另外提供了一種快速執行條件分支指令的方法,適用於一微處理器,包括儲存一異常處理例行程序於一存儲器以處理一異常條件,其中上述異常處理例行程序為上述微處理器私有的一非使用者程序,且上述異常處理例行程序包括一條件分支指令;由上述微處理器的一第一提取單元提取一使用者程序的多個指令,其中上述使用者程序包括造成上述異常條件的一使用者程序指令;由上述微處理器的一執行單元執行上述第一提取單元所提取的上述使用者程序的上述指令以及除了上述條件分支指令之外的上述異常處理例行程序的多個指令;響應偵測到上述使用者程序所造成的上述異常條件而儲存一狀態;由上述微處理器的一第二提取單元自上述存儲器提取上述異常處理例行程序的上指令;由上述第二提取單元根據上述狀態解析上述條件分支指令而不將上述條件分支指令傳送到上述執行單元去進行解析,其中上述狀態指定上述異常條件的一發生原因。本發明另外提供了一種快速執行條件分支指令的方法,適用於一微處理器,包括由上述微處理器的一提取單元提取一程序的多個指令,且上述程序包括造成一異常條件的一程序指令;由上述提取單元提取處理上述異常條件的一異常處理例行程序,其中上述異常處理例行程序包括一條件分支指令;由上述微處理器的一執行單元執行上述提取單元所提取的上述指令,以及除了上述條件分支指令之外的上述異常處理例行程序的多個指令;響應偵測到上述程序指令所造成的上述異常條件而儲存一狀態;由上述提取單元響應上述執行單元偵測到上述異常條件而提取上述異常處理例行程序的上述指令;以及由上述提取單元根據上述狀態無條件地解析上述條件分支指令,而不將上述條件分支指令傳送到上述執行單元去進行解析。本發明的一優點在於提取單元不需配送(dispatch)快速條件分支(FastConditionalBranch,FCB)指令到執行管線即可解析並引退FCB指令,因此使得FCB指令在執行上能夠比傳統的條件分支指令更快。此外,在程序設計者使用FCB指令的情況下,本發明的提取單元正確地執行FCB指令能夠排除傳統的條件分支指令容易發生的錯誤分支預測以及校正。本發明的另一優點在於解析以及引退FCB指令時,FCB指令所佔用的微處理器資源比傳統的條件分支指令更少,舉例來說,因為FCB指令不需被配送至執行管線,所以不會佔用暫存器別名表(RegisterAliasTable,RAT)、預留站(reservationstation)、執行單元、或重排緩衝器(ReOrderBuffer,ROB)的空間。圖1是根據本發明所述的微處理器100的方塊圖。圖2a與圖2b是根據本發明所述的微處理器執行條件分支指令的流程圖。圖3是根據本發明另一實施例所述的微處理器的方塊圖。圖4a與圖4b是根據本發明圖3所示的微處理器100的運作流程圖。圖5是根據本發明另一實施例所述的微處理器100的方塊圖。圖6是根據本發明圖5所示的微處理器100的運作流程圖。圖7是根據本發明另一實施例所述的微處理器100的方塊圖。圖8是根據本發明圖7所示的微處理器100的運作流程圖。圖9是根據本發明另一實施例所述的微處理器100的方塊圖。圖10是根據本發明圖9所示的微處理器100的運作流程圖。具體實施例方式如上所述,關於傳統技術的缺點在於其依賴微處理器決定是否可於管線中早些解析一條件分支指令,如果決定的結果為否,則微處理器必須預測該條件分支指令,且如果誤預測,則微處理器因為所需進行的校正(即清除(flushing)、自正確的地址提取以及執行)而付出代價(penalty)。本發明的發明人觀察到有些時候程序設計者在編寫程序時,知道或能夠控制相關於一分支條件狀態更新的情況,且該分支條件狀態將於該程序中被一條件分支指令所使用。特別是,程序設計者所知道的某些特定的分支條件狀態在特定的時候是靜態的(static)。本發明的發明人即利用此觀察在一微處理器的指令集中包括一特別類型的條件分支指令(往後在此說明書中即以快速條件分支指令(FCB指令)稱之),用以指示微處理器於管線前期使用靜態分支條件狀態非選擇性地、正確地解析位於提取單元中的該FCB指令,而非傳送該FCB指令到執行單元去解析,亦非針對該FCB指令進行預測。在偵測到該FCB指令時,提取單元非選擇性地、正確地解析該FCB指令,也就是說,提取單元並未預測該FCB指令以及並未將該FCB指令傳送至執行單元去進行解析,而是使用上述靜態狀態立即正確地解析該FCB指令。所以包含該FCB指令的程序就能夠執行得較快。另外,立即正確地解析該FCB指令具有明顯的優勢,因為其能夠避免錯誤的分支預測以及在一管線式微處理器中所伴隨發生的代價。FCB指令在避免錯誤分支預測的優點在沒有分支預測的情況下(例如低價或/且低功率的微處理器或微控制器,或微處理器中一微碼(microcode)單元的微定序器)更為明顯,如此後的一實施例所述。在此章節中所述的為管線式微處理器的實施例,程序設計者可在程序中使用FCB指令特殊類別的條件分支指令取代或加上原有的正規條件分支(NormalConditionalBranch,NCB)指令,以改善程序執行時間。相較於NCB指令,FCB指令使程序設計者能夠指示微處理器總是正確地解析並引退位於微處理器的提取單元中的該FCB指令,而非將該FCB指令發送至微處理器的執行單元去進行解析與引退,從而節省所需的管線式微處理器的時脈周期。也就是說,FCB指令讓程序設計者能夠指示微處理器在不需要檢查程序中是否有其它比該FCB指令更老舊的指令尚未更新FCB指令的條件狀態的情況下,根據該FCB指令的條件狀態正確地解析並引退該FCB指令。其中上述微處理器中比上述第一類別條件分支指令或第二類別條件分支指令更老舊的其它指令分別指於上述第一類別條件分支指令或第二類別條件分支指令之前被提取的指令。由於程序設計者在編寫程序的時候便知道FCB指令的條件狀態並不相依於微處理器中其它未解析指令的結果,所以FCB指令的條件狀態總是能夠正確地解析並引退提取單元中的FCB指令。然而,對NCB指令來說,這卻是無法達到的。特別需要注意的是,此章節的實施例是能夠正確地解析並引退位於提取單元中FCB指令的微處理器,其不同於傳統微處理器其包括一分支預測器預測位於提取單元中的傳統條件分支指令,進一步說明,因為傳統微處理器所進行的分支預測可能不正確,使得執行單元無法正確地解析該傳統條件分支指令,所以造成提取單元無法引退該傳統條件分支指令。相較之下,在本發明所述的實施例中,提取單元總是能夠正確地解析FCB指令,所以使得提取單元能夠引退該FCB指令。圖1是根據本發明所述的微處理器100的方塊圖。在一實施例中,微處理器100儲存使用者程序於一外部存儲器(未繪示),使用者程序包括作業系統、應用程式、基本輸入輸出系統(BasiclnputOutputSystem,BIOS)或其它類別的程序,可為程序設計者所編寫、轉譯(translate)或編譯成微處理器的原生(native)指令集。指令快取106自外部存儲器中提取使用者程序並暫時儲存最常被提取的指令。在一實施例中,指令快取106位於微處理器100中,在其它實施例中,指令快取106可位於微處理器100的外部。微處理器100的提取單元104自指令快取106中提取指令,提取單元104包括指令解碼器108,用以決定所提取指令的類別,自指令快取106中所提取的指令包括FCB指令以及正規指令,上述正規指令包括NCB指令及其他正規指令。正規指令由微處理器100的執行單元所執行,當微處理器100決定了一條件分支指令(NCB指令或FCB指令)的正確方向(direction)以及正確地址時,便可以正確地解析該條件分支指令,此不同於預測該條件分支指令的另一微處理器,因為該另一微處理器可能發現該預測是不正確的而必須進行校正。FCB指令在微處理器100的提取單元104中被正確地解析並引退。微處理器100的多個執行單元138用以執行正規指令,包括NCB指令。微處理器100的引退單元144用以引退正規指令,包括NCB指令。條件分支指令指定(specify)了一分支條件與一分支目標地址,處理器檢查一儲存的分支條件狀態以決定其是否滿足由該條件分支指令所指定的一條件,意即,決定該條件分支指令的方向。如果滿足該條件,則分支方向為「被取用」,否則,分支方向為「未被取用」;如果該分支方向被取用,則該分支目標地址指定了下一個要執行的指令的地址,反之,如果該分支方向未被取用,則下一個要執行的指令為該FCB指令或該NCB指令之後的下一個指令,關於該FCB指令以及該NCB指令的處理程序將於後續段落中詳盡敘述。在一實施例中,指令解碼器108包括一指令轉譯器用以將微處理器100中一宏指令集的宏指令(例如x86指令集架構)轉譯為微處理器100中一微指令集架構的微指令。該指令轉譯器可將微指令轉譯為一FCB指令、NCB指令或在此章節中所述及的其它指令。指令解碼器108決定一提取的指令是否為一FCB指令或NCB指令,如果解碼的指令為NCB指令或其它正規指令,則指令解碼器108將正規指令146轉送(transfer)至多工器132;如果解碼的指令為一FCB指令,則指令解碼器108將FCB查見指示(seenindication)164的值設為真並將之傳送至提取單元104中的FCB方向解析器122,同時,指令解碼器108把由該FCB指令所指定的一FCB條件166轉送至FCB方向解析器122,舉例來說,FCB條件166可為位開啟(biton)、位關閉(bitoff)、相等於、小於或大於,且本領域技術人員可知在快速分支條件狀態(FastBranchConditionalState,FBCS)124中的位或欄位也可由FCB條件166所指定。指令解碼器108亦把由FCB指令所指定的FCB目標地址162轉送至提取單元104中的多工器114。FCB方向解析器122解析位於提取單元104中的FCB指令的方向。為響應上述FCB查見指示164、FCB條件166以及FBCS124,FCB方向解析器122產生FCB方向172給提取地址控制器126。如果FBCS124滿足FCB條件166,則FCB方向172為真;反之,則FCB方向172為假。提取單元104總是能正確地解析並引退FCB指令,提取單元104並不配送FCB指令到執行單元138與引退單元144,因為提取單元104會自行執行並引退所有的FCB指令。就意義上來說程序設計者保證沒有任何未引退的指令要比改變FBCS124的FCB指令更老舊,所以程序設計者通過使用FCB指令而非NCB指令,可以設置(assert)FBCS124或由該FCB指令所指定為分支條件狀態的FBCS124的至少一部分,在相關的時框(timeframe)中為靜態的。FBCS124可以是微處理器100中許多不同分支條件狀態中的其中之一,且因為各種不同的原因而為靜態的。在一實施例中,程序設計者可設置FBCS124是靜態的,因為根據圖5與圖6,FBCS124為異常(exception)狀態586。在一實施例中,程序設計者可設置FBCS124是靜態的,因為根據圖7與圖8,FBCS124為微碼執行指令(MicrocodelmplementedInstruction,Mil)狀態786。在一實施例中,程序設計者可設置FBCS124是靜態的,因為根據圖9與圖10,FBCS124由微處理器100指令集架構的一序列化(serializing)指令所寫入。9在一實施例中,程序設計者可設置FBCS124是靜態的,因為FBCS124是僅能由微碼只讀存儲器306中的微碼例行程序(routine)所存取(即寫入或讀取),並且當提取單元讀取該狀態以解析一位於一微碼例行程序中的一FCB指令時,該微碼例行程序保證該狀態為靜態的。其中FBCS124被多個微碼例行程序中的多個FCB指令使用,而上述微碼例行程序是負責執行微處理器的一指令集架構中分別對應FCB指令的不同類別的指令。該微碼例行程序保證該狀態為靜態的運作細節如下每個微碼例行程序包含一寫入該狀態的指令,亦包含下一指令以讓上述管線於歸還控制給使用者程序之前將微處理器100中所有較新的指令清除掉,其中該使用者程序包括由該微碼例行程序所執行的指令或由該微碼例行程序所處理的異常所產生的指令。在一實施例中,該狀態是當微處理器100自一重置條件啟動(bootup)時,由該微碼例行程序(一個或多個指令)所寫入。該狀態所指定的值由多重微碼例行程序所全域使用(globallyused),而非由個別微碼例行程序局部使用(locallyused)。在另一實施例中,該狀態實際上存在於引退單元144中的重排緩衝器。在一實施例中,FBCS124可為微處理器100中的通用暫存器(generalpurposeregister)或個別的位;然而,由於微處理器100執行提取單元104中的FCB指令而且不會確保該FCB指令會接收到任何其它未引退指令更新FBCS124的結果,所以為了保持程序的正確運作,程序設計者必須保證FBCS124對於程序中比該FCB指令更老舊的其它指令是靜態的。提取單元104亦包括分支預測器118,用以分別產生一預測目標地址156與一預測方向158給提取單元104的多工器114與提取地址控制器126,以響應提取單元104的指令指針暫存器112產生一提取地址168給指令快取106,特別是,分支預測器118向提取地址控制器126指出,如果提取地址168指定了先前存有一條件分支指令的一快取列(cacheline),則預測目標地址156與預測方向158為有效的(valid)。提取單元104的提取地址控制器126產生一多工選擇信號152給提取單元104的多工器114選擇提取地址168以自指令快取106中提取下一個指令。為響應NCB誤預測指示178的值為真,提取地址控制器126產生該多工選擇信號152以選擇NCB正確目標地址176。除此之外,為響應FCB方向172指示一FCB指令被取用,提取地址控制器126產生該多工選擇信號152以選擇上述FCB目標地址162。除此之外,為響應預測方向158指示NCB指令被取用,提取地址控制器126產生該多工選擇信號152以選擇上述預測目標地址156。否則,提取地址控制器126產生該多工選擇信號152以選擇下一指令指針地址(NextSequentiallP(InstructionPointer)address,NSIP)154。NSIP154代表指令快取106中在提取地址168之後的下一個地址。地址增量電路(addressincrementcircuit)116每次於指令指針暫存器112產生一提取地址168時都產生該NSIP154。在一實施例中,分支預測器118包括一分支地址快取(未繪示),當提取地址168所指示的地址落於該分支地址快取時,分支預測器118則產生上述預測目標地址156與預測方向158給提取地址控制器126。微處理器100以先前所執行的條件分支指令的地址與解析目標地址去更新該分支地址快取,而且微處理器100以分支預測信息去更新該分支地址快取,其中分支預測信息根據先前所執行的條件分支指令的解析方向所得到。在一實施例中,上述分支預測信息包含預測目標地址156以及預測方向158。在一實施例中,由於提取單元104正確地解析並引退FCB指令,所以微處理器100不會根據所執行的FCB指令去更新該分支地址快取。因為提取單元104總是正確地解析並引退FCB指令,使得微處理器在處理FCB指令時,能夠優勢地避免造成分支誤預測代價;反之如下所述,傳統的微處理器在處理NCB指令時可能會造成分支誤預測代價。指令指針暫存器112接收並儲存由提取單元104的多工器114所選擇的地址,指令指針暫存器112提供提取地址168給指令快取106以自指令快取106中提取一快取列。位於提取單元104之外的多工器132自兩個來源接收指令並從中選擇其一。其中第一個來源是從指令快取106中所提取且由提取單元104所提供的正規指令146,第二個來源是由微處理器100的微碼單元128所提供的正規指令148。微碼單元128包括多個微碼例行程序,舉例說明,該微碼例行程序可用以執行複雜指令(complexinstruction)並處理特定異常狀況。經過思忖後,在某些實施例中可不將微碼單元128包括在微處理器100中。微處理器100包括一暫存器別名表134,用以決定正規指令146與148的運算元相依性,暫存器別名表134在決定運算元相依性之後,將正規指令146與148轉送至微處理器100的一指令排程器136。在一實施例中,微處理器100亦包括一重排緩衝器(未繪示,但在一實施例中位於引退單元144裡)用以儲存微處理器100中未引退指令的信息,該重排緩衝器確保以程序順序引退正規指令,即便正規指令可能不以程序順序執行。暫存器別名表134於配送正規指令146與148到一保留站(後續將進一步敘述)之前,在重排緩衝器中為每個指令配置(allocate)—空間(entry)。指令排程器136排程正規指令146與148以便將之發送至執行單元138去執行。在一實施例中,微處理器100包括多個保留站(未繪示)用以當作指令隊列(queue)儲存等待運算元的指令,該指令在等到運算元時便可由指令排程器136將其發送至執行單元138,此普遍在該
技術領域:
中被稱為亂序執行(out-of-orderexecution)微處理器。在一實施例中,微處理器100以亂序執行指令,且指令排程器136使用暫存器別名表134所產生的相依性信息以排程適當的指令執行。NCB指令根據正規分支條件狀態(NormalBranchConditionState,NBCS)142指定一分支條件。NBCS142可以正規指令的結果去更新,其中該正規指令指在NCB指令之前被提取的指令。因此,指令排程器136等待直到用以更新NBCS142的較老舊指令已經產生結果且執行單元138取得該結果之後,再將NCB指令發送至執行單元138。在一實施例中,上述較老舊指令為微處理器中用以更新NBCS142並且比NCB指令更老舊的其它指令中最新的一個指令。NBCS142可儲存於可見於微處理器100架構的暫存器,如通用暫存器以及/或條件碼暫存器,舉例來說,可為x86的EFLAGS暫存器。微處理器100的執行單元138執行所有的正規指令146與148,包括NCB指令。執行單元138使用NBCS142去執行NCB指令,如果NBCS142滿足NCB指令所指定的分支條件,則該分支被取用並且以NCB指令所指定的分支目標地址去提取指令;如果NBCS142不滿足NCB指令所指定的分支條件,則該分支不被取用,並且提取單元104或微碼單元128分別自指令快取106或微碼只讀存儲器306中位於該NCB指令地址之後的下一個地址去提取指令。在一實施例中,微處理器於上述第一分支條件狀態滿足上述第一類別條件分支指令所指定的一分支條件時,提取上述第一類別條件分支指令所指定的一目標地址中的指令,以正確地解析上述第一類別條件分支指令;於上述第二分支條件狀態滿足上述第二類別條件分支指令所指定的一分支條件時,提取上述第二類別條件分支指令所指定的一目標地址中的指令,以正確地解析上述第二類別條件分支指令;並且於上述第一分支條件狀態不滿足上述第一類別條件分支指令所指定的分支條件及上述第二分支條件狀態不滿足上述第二類別條件分支指令所指定的分支條件時,提取下一個指令。執行單元138將所有執行後的正規指令,包括NCB指令,轉送至引退單元144。引退單元144記錄發送至執行單元138的指令以及其對應的執行狀態,特別是,引退單元144寫入更新NBCS142的正規指令結果174。引退單元144於更新NBCS142的指令已經將正規指令結果174寫入到更新NBCS142之後,引退該NCB指令。引退單元144產生一NCB誤預測指示178給提取單元104的提取地址控制器126以指示分支預測器118是否誤預測該NCB指令。如果NCB指令被誤預測,則微處理器100將程序順序上比該NCB指令較新的所有指令從管線中清除;引退單元144引退該NCB指令;提取地址控制器126產生多工選擇信號152以選擇由引退單元144所提供的NCB正確目標地址176,其中NCB正確目標地址176先前由執行單元138所解析,且經由多工器114選擇後被載入指令指針暫存器112;提取單元104以指令指針暫存器112提供的提取地址168自指令快取106中提取下一個指令。因此,針對NCB指令的處理,微處理器可能造成分支誤預測代價,而針對FCB指令的處理則沒有此問題。在一實施例中,提取單元104與引退單元144之間的管線階段數量大約為10,所以提取單元104可正確地執行並引退FCB指令,且比NCB指令必須由執行單元138執行、由引退單元144引退要快上許多時脈周期。此外,在分支預測器118可能誤預測一NCB指令的情況下,程序設計者在程序中使用FCB指令將可比使用NCB指令節省更多時脈周期。圖2a與圖2b是根據本發明所述的微處理器執行條件分支指令的流程圖。該流程圖所述的微處理器是依據圖1中所示的微處理器100,流程從方塊202開始。在方塊202,提取單元104自指令快取106中提取一條件分支指令,該條件分支指令為一NCB指令或FCB指令。執行單元138執行NCB指令,引退單元144引退NCB指令,而微處理器100的提取單元104執行並引退FCB指令。流程同步往下進行到方塊204與232。在方塊204,提取單元104中的指令解碼器108解碼該條件分支指令,流程往下進行到方塊206。在方塊206,指令解碼器108決定從指令快取106中所提取的該條件分支指令是NCB指令或FCB指令,如果是NCB指令,則流程往下進行到方塊252;反之,則流程往下進行到方塊208。在方塊208,指令解碼器108將FCB查見指示164與FCB條件166轉送至FCB方向解析器122,並且產生FCB目標地址162給圖1中的多工器114。FCB條件166向FCB方向解析器122指示由FCB指令所指定的分支條件。如果滿足了FCB條件166,則FCB目標地址162是由FCB指令所指定的分支目標地址,而且是指令快取106中被提取的指令的提取地址168。流程往下進行到方塊212。在方塊212,FCB方向解析器122使用圖1中的FBCS124去解析FCB方向172,並且提供FCB方向172給提取單元104中的提取地址控制器126。如果FBCS124滿足了FCB條件166,則將FCB方向172解析為被取用;反之,則將FCB方向172解析為未被取用。流程往下進行到決策方塊214。在決策方塊214,FCB方向解析器122決定FCB條件166是否被滿足,如果FCB條件166被滿足了,則流程往下進行到方塊216;如果FCB條件166沒有被滿足,則流程往下進行到方塊218。在方塊216,提取地址控制器126設置多工選擇信號152傳送至多工器114以挑選FCB目標地址162,這代表了FCB方向172被解析為被取用,並且提取單元104從一提取地址168提取下一個指令,其中提取地址168為該FCB指令所指定的FCB目標地址162。流程往下進行到方塊222。在方塊218,提取地址控制器126設置多工選擇信號152傳送至多工器114以挑選NSIP154,這代表了FCB方向172被解析為未被取用,並且提取單元104從一提取地址168提取下一個指令,其中提取地址168即為NSIP154。流程往下進行到方塊222。在方塊222,將方塊216或218中所挑選的地址載入至指令指針暫存器112。流程往下進行到方塊224。在方塊224,提取單元104從指令指針暫存器112所提供的提取地址168提取下一個指令。如果該FCB指令被取用,則提取地址168是由該FCB指令所指定的FCB目標地址162;如果該FCB指令未被取用,則提取地址168是指令快取106中位於該FCB指令地址之後的下一個地址。流程往下進行到方塊226。在方塊226,提取單元104引退該FCB指令,而非配送該FCB指令至執行管線,需要注意的是引退單元144引退正規指令,並且提取單元104引退從指令快取106中所提取出的該FCB指令。然後流程結束於方塊226。在方塊232,分支預測器118根據提取地址168預測一條件分支指令的分支方向。分支預測器118針對NCB指令產生一預測目標地址156與一預測方向158。提取單元104將該預測目標地址156與該預測方向158,連同所提取的NCB指令146—並在管線中往下遞送(forward),相較之下,FCB指令在提取單元104中可以完全且正確地被提取、執行以及引退。流程往下進行到決策方塊234。在決策方塊234,提取地址控制器126檢查由分支預測器118所輸出的預測方向158,如果預測方向158為被取用,則流程往下進行到方塊236;如果預測方向158為未被取用,則流程往下進行到方塊238。在方塊236,提取單元104中的提取地址控制器126產生多工選擇信號152以選擇預測目標地址156。流程往下進行到方塊242。在方塊238,提取單元104中的提取地址控制器126產生多工選擇信號152以選擇NSIP154。流程往下進行到方塊242。在方塊242,提取單元104中的指令指針暫存器112載入方塊236或238所選擇的地址。流程往下進行到方塊244。在方塊244,提取單元104以提取地址168自指令快取106中提取下一個指令。然後流程結束於方塊244。在方塊252,提取單元104將NCB指令146轉送至指令排程器136,提取單元104中的指令解碼器108將NCB指令146輸出至多工器132,多工器132選擇NCB指令146並將之傳送至暫存器別名表134,在此之前,暫存器別名表134先決定NCB指令146的運算元相依性,並且配送NCB指令146至指令排程器136。流程往下進行到方塊254。在方塊254,指令排程器136等待直到用以更新NBCS142且比該NCB指令146更老舊的所有指令都已將其結果寫入至NBCS142之後,再將該NCB指令146發送至執行單元138,如此一來就能確保在執行單元138解析NCB指令146的分支方向之前,NBCS142是穩定且正確的。流程往下進行到方塊256。在方塊256,指令排程器136排程執行單元138以執行該NCB指令146。流程往下進行到方塊258。在方塊258,執行單元138使用NBCS142解析該NCB指令146,並且將其結果轉送至引退單元144。如果NBCS142滿足了該NCB指令146所指定的分支條件,則該分支被解析為被取用;反之,則該分支被解析為未被取用。此外,執行單元138計算NCB正確目標地址176。流程往下進行到方塊262。在方塊262,引退單元144將方塊258中所決定的NCB正確目標地址176轉送至提取單元104。如果該NCB指令146的分支為被取用,則NCB正確目標地址176為該NCB指令146所指定的分支目標地址;如果該NCB指令146的分支為未被取用,則NCB正確目標地址176為該NCB指令146的地址之後的下一個存儲器地址。流程往下進行到方塊264。在方塊264,引退單元144比較NCB正確目標地址176與預測目標地址156,並且比較NCB正確方向與提取單元104所轉送的預測方向158。上述比較是為了決定預測目標地址156與預測方向158是否正確。之前在方塊232,提取單元104把預測目標地址156與預測方向158,以及所提取的該NCB指令146—並在執行管線中往下遞送。流程往下進行到決策方塊266。在決策方塊266,引退單元144決定NCB正確目標地址176是否與預測目標地址156相符(match),以及NCB正確方向是否與預測方向158相符,如果都相符,則表示分支預測118正確地預測了目標地址與分支方向,且流程往下進行到方塊268;反之,則流程往下進行到方塊272。在方塊268,引退單元144引退NCB指令146。由於分支預測器118正確地預測了該分支並且也從指令快取106中在預測目標地址156取出正確的指令,所以引退單元144不需要執行額外的步驟。流程結束於方塊268。在方塊272,為響應NCB正確目標地址176與預測目標地址156不相符,或者NCB正確方向與預測方向158不相符,所以引退單元144產生如圖1所示的值為真的NCB誤預測指示178並將之傳送到提取單元104中的提取地址控制器126。流程往下進行到方塊274、276以及278。在方塊274,微處理器100把在程序順序上比NCB指令146較新的所有指令從執行管線中清除掉,該清除動作是因為管線中的指令是從不正確的提取地址所提取的,所以管線中的指令都是不合法的,因此需要清除執行管線。流程結束於方塊274。在方塊276,引退單元144引退NCB指令146。流程結束於方塊276。在方塊278,提取單元104中的提取地址控制器126產生多工選擇信號152以選擇NCB正確目標地址176。流程往下進行到方塊282。在方塊282,指令指針暫存器112載入在方塊278中由多工器114所選擇的地址,也就是NCB正確目標地址176。流程往下進行到方塊284。在方塊284,提取單元104以提取地址168從指令快取106中提取下一個指令,其中提取地址168即為儲存於指令指針暫存器112中的地址,也就是NCB正確目標地址176。流程結束於方塊284。圖3是根據本發明另一實施例所述的微處理器的方塊圖。圖3與圖1所示的微處理器100大致上類似,然而,在圖3中繪示了微碼單元128的細節,但並未繪示提取單元104的細節。圖3中的微碼單元128所包含的許多元件都相似於圖1中的提取單元104,且類似編號的元件所執行的功能也是類似的。圖3與圖1其中一個不同之處在於,微碼單元128是從一微碼只讀存儲器306提取微碼指令,而不是如圖1所示從指令快取106提取指令。微碼只讀存儲器306儲存微碼例行程序指令用以執行微處理器100處理使用者程序指令所需的動作,因此,儲存於微碼只讀存儲器306中的微碼例行程序為非使用者程序,因為其並非屬於使用者程序的一部份。也就是說,微處理器100的設計者所發展的微碼例行程序是儲存於微碼只讀存儲器306中,而微處理器100的一般使用者則將其所撰寫的使用者程序儲存於系統存儲器以及/或計算機系統的一非易失性儲存介質,例如硬碟。舉例來說,微碼例行程序所負責執行的動作之一是異常處理(exceptionhandling),微碼只讀存儲器306包括異常處理例行程序(exceptionhandler)用以處理使用者程序指令所產生的異常,例如不合法的操作碼(opcode)異常、除以零異常、中斷以及分頁失敗(pagefault),以上的異常例子用以說明特別相關於微處理器100的微架構的微異常(micro-exc印tion),而非由微處理器100的宏架構所指定的異常。舉另一例子,微碼例行程序包括用以執行微處理器100的指令集中複雜且不被頻繁執行的指令的程序碼,諸如三角函數指令、讀取/寫入模塊特定暫存器(read/writemodelspecificregister)指令以及序列化指令(將於圖9與圖10中進一步說明)等等可能更新控制數值、使微處理器100處於一新的模式或狀態,例如改變分頁模式、保護模式、更新描述符表(descriptortable)或將快取列無效化(invalidate)。因此,微碼單元128是微處理器100的第二個提取單元,自微碼只讀存儲器306提取並解碼微碼例行程序指令,並且當提取的是FCB指令時,亦能正確地解析並引退該FCB指令。圖3與圖1的另一個不同之處在於,微碼單元128不包括圖1中的分支預測器118,所以在一般正常流程中(意即,未接收到FCB指令、不需修正誤預測的NCB指令、未發生異常或警示(trap)微碼以執行使用者指令等等於本說明書中提及的狀況),微碼單元128總是會「預測」一條件分支指令為未被取用,也就是說微碼單元128從NSIP154提取指令,而非從例如圖1中的分支預測器118所提供的預測目標地址提取指令。然而,經過思忖後,雖然微碼單元128可能較小、較不複雜以及較不耗能,但在其它實施例中,微碼單元128亦可包括一分支預測器,用以執行與圖1中的分支預測器118類似的功能。不過如圖1的提取單元104—樣,圖3中的微碼單元128用以提取以及無條件地、正確地解析並引退FCB指令,如以下於第4圖中詳述。需要注意的是,經過思忖後,在一實施例中,提取單元104和微碼單元128兩者皆用以提取以及無條件地、正確地解析並引退FCB指令;而在其它實施例中,僅提取單元104和微碼單元128的一者用以提取以及無條件地、正確地解析並引退FCB指令。圖4是根據本發明圖3所示的微處理器100的運作流程圖。圖4中所示的許多執行步驟與圖2類似,然而,圖2中由提取單元104所執行的步驟在圖4中由微碼單元128所執行,另外,如上所述,微碼單元128不會執行分支預測,因此,圖4並未包括與分支預測相關的運作步驟。流程開始於方塊402。在方塊402,微碼單元128自微碼只讀存儲器306中提取一條件分支指令,該條件分支指令為一NCB指令或FCB指令,執行單元138執行NCB指令,而引退單元144引退NCB指令,微處理器100中的微碼單元128則執行並引退從微碼只讀存儲器306所提取的FCB指令。流程往下進行到方塊404。在方塊404,微碼單元128中的指令解碼器108解碼該條件分支指令。流程往下進行到方塊406。在方塊406,指令解碼器108決定自微碼只讀存儲器306所提取的該條件分支指令為一NCB指令或FCB指令,如果是FCB指令,則流程往下進行到方塊408;如果是NCB指令,則流程往下進行到方塊452。在方塊408,指令解碼器108將FCB查見指示164以及FCB條件166轉送至FCB方向解析器122,並且產生FCB目標地址162給圖3中的多工器114。FCB條件166向FCB方向解析器122指示由FCB指令所指定的分支條件。如果滿足了FCB條件166,則FCB目標地址162為FCB指令所指定的分支目標地址,並且是上述從微碼只讀存儲器306提取指令所根據的提取地址168。流程往下進行到方塊412。在方塊412,FCB方向解析器122使用圖3中的FBCS124解析FCB方向172,並且提供FCB方向172給微碼單元128中的提取地址控制器126。如果FBCS124滿足了FCB條件166,則FCB方向172被解析為被取用;反之,則FCB方向172被解析為未被取用。流程往下進行到方塊414。在方塊414,FCB方向解析器122決定是否滿足了FCB條件166,如果是,則流程往下進行到方塊416;如果否,則流程往下進行到方塊418。在方塊416,提取地址控制器126設置多工選擇信號152並傳送給多工器114以選擇FCB目標地址162,這代表了FCB方向172被解析為被取用,並且微碼單元128自一提取地址168提取下一個指令,其中提取地址168指該FCB指令中所指定的FCB目標地址162。流程往下進行到方塊422。在方塊418,提取地址控制器126設置多工選擇信號152並且傳送至多工器114以選擇NSIP154,這代表了FCB方向172被解析為未被取用,並且微碼單元128自一提取地址168提取下一個指令,其中提取地址168指該FCB指令後的NSIP154。流程往下進行到方塊422。在方塊422,於方塊416或418中所選擇的地址被載入至指令指針暫存器112。流程往下進行到方塊424。在方塊424,微碼單元128從指令指針暫存器112所提供的提取地址中提取下一個指令,如果該FCB指令為被取用,則提取地址168為該FCB指令所指定的FCB目標地址162;如果該FCB指令為未被取用,則提取地址168為微碼只讀存儲器306中位於該FCB指令地址之後的下一個地址。流程往下進行到方塊426。在方塊426,微碼單元128引退該FCB指令,而不將之配送至執行管線,值得注意的是,引退單元144引退NCB指令,而且微碼單元128引退自微碼只讀存儲器306所提取的該FCB指令。流程結束方塊426。在方塊452,微碼單元128將NCB指令148轉送至指令排程器136。微碼單元128中的指令解碼器108將NCB指令148輸出至多工器132以選擇微碼單元128的指令(即NCB指令148)給暫存器別名表134。事前,暫存器別名表134先決定NCB指令148的運算元相依性,並且將NCB指令148配送至指令排程器136。流程往下進行到方塊454。在方塊454,指令排程器136等待直到用以更新NBCS142並且比NCB指令148更老舊的所有指令都已將其結果寫入NBCS142之後,再將NCB指令148發送至執行單元138,這麼一來便能確保在執行單元138解析NCB指令148的分支方向之前,NBCS142是穩定且正確的。流程往下進行到方塊456。在方塊456,指令排程器136排程執行單元138以執行NCB指令148。流程往下進行到方塊458。在方塊458,執行單元138使用NBCS142解析NCB指令148,並且將結果轉送至引退單元144。如果NBCS142滿足了NCB指令148所指定的分支條件,則該分支被解析為被取用;反之,則該分支被解析為未被取用。此外,執行單元138計算NCB正確目標地址176。流程往下進行到方塊462。在方塊462,引退單元144將方塊458中所決定的NCB正確目標地址176轉送至微碼單元128。如果NCB指令148所指定的分支條件為被取用,則NCB正確目標地址176為NCB指令148所指定的分支目標地址;如果NCB指令148所指定的分支條件為未被取用,則NCB正確目標地址176為NCB指令148地址之後的下一個存儲器地址。流程往下進行到決策方塊466。在決策方塊466,引退單元144決定該NCB指令的正確方向是否為被取用,如果是,則微碼單元128正確地「預測」該分支方向,然後流程往下進行到方塊468;反之,則流程往下進行到方塊472。在方塊468,引退單元144引退NCB指令148。由於微碼單元128正確地預測了分支方向且已從微碼只讀存儲器306中的NSIP154提取出正確的指令,所以引退單元144不需要執行額外的步驟。流程結束於方塊468。在方塊472,引退單元144產生了值為真的NCB誤預測指示178(參照圖3)給微碼單元128中的提取地址控制器126,以響應決定上述NCB指令的正確方向為被取用,意即微碼單元128「誤預測」該NCB指令。流程往下進行到方塊474、476以及478。在方塊474,微處理器100將執行管線中程序順序比NCB指令148更新的所有指令都清除掉。上述執行管線中的清除是因為管線中的指令是提取自錯誤提取地址168。流程結束於方塊474。在方塊476,引退單元144引退NCB指令148。流程結束於方塊476。在方塊478,微碼單元128中的提取地址控制器126產生多工選擇信號152以選擇NCB正確目標地址176。流程往下進行到方塊482。在方塊482,指令指針暫存器112載入方塊478中s由多工器114所選擇的地址,即NCB正確目標地址176。流程往下進行到方塊484。在方塊484,微碼單元128自微碼只讀存儲器306中的提取地址168提取下一個指令,其中提取地址168儲存於指令指針暫存器112中,意即為NCB正確目標地址176。流程結束於方塊484。圖5是根據本發明另一實施例所述的微處理器100的方塊圖。圖5與圖3在許多方面是類似的,然而,在圖5所示的微處理器100中,引退單元144亦產生一異常偵測指示582、一異常處理例行程序地址584以及一異常狀態586。異常狀態586包括了指定異常發生原因的信息、引發異常的指令的存儲器地址以及/或下一個指令的地址。在以下狀況,異常狀態586會被閂鎖(latch)該異常狀態586包括了微處理器100的多個控制暫存器的多個狀態位,用以控制各種操作模式(例如x86控制暫存器(CRregister)),例如決定上述微處理器的一現行運作模式;該異常狀態586包括了控制多個虛擬主機延伸(VirtualMachineeXtension,VMX)的多個位(例如x86虛擬主機延伸位);該異常狀態586包括了控制分支條件旗標(flag)的多個位(例如x86EFLAGS暫存器),該異常狀態58包括微處理器的一狀態暫存器中的多個位,且上述位用以指定由上述使用者程序的多個條件分支指令所指定為多個分支條件的多個旗標;該異常狀態586包括了控制碼分段描述符(codesegmentdescriptor)的多個位(例如x86碼分段暫存器分段描述符);該異常狀態586包括了控制任務狀態分段描述符的多個位(例如x86任務狀態分段位);該異常狀態586包括了指定數據與地址的一預設尺寸的多個位(例如x86D位);該異常狀態586包括了指定微處理器100的一現行特權階段的多個位。在一實施例中,微處理器100的硬體保證被閂鎖的異常狀態586不會在異常處理例行程序執行時有所改變,而且特別是直到提取單元104或微碼單元128完成解析FCB指令,除非是異常處理例行程序自己去改變異常狀態586。如果引退單元144即將引退由一異常條件所產生的一指令,則引退單元144產生異常偵測指示582的值為真,並將異常處理例行程序地址584提供給異常處理例行程序的微碼單元128的多工器114,其中異常處理例行程序用以處理產生的特定類別異常,並且提供描述關於該異常的信息的異常狀態586以載入FBCS124。引退單元144亦將異常偵測指示582、異常處理例行程序地址584以及異常狀態586提供給提取單元104。圖6是根據本發明圖5所示的微處理器100的運作流程圖。流程由方塊604開始進行。在方塊604,提取單元104自指令快取106提取一使用者程序指令(即正規指令與FCB指令188),提取單元104的指令解碼器108(如圖1所示)解碼該使用者程序指令(即正規指令與FCB指令188),並且將指令146配送至執行管線(意即,多工器132、暫存器別名表134、指令排程器136、執行單元138以及引退單元144)去執行。流程往下進行到方塊606。在方塊606,指令146產生一異常,在一實施例中,關於該異常的信息儲存於重排緩衝器中,典型的狀況是,異常條件在執行單元138中被偵測,且以該異常的信息更新重排緩衝器;然而,異常條件亦可於微處理器100的其它功能單元中被偵測。流程往下進行到方塊608。在方塊608,該指令成為了微處理器100中最老舊的指令且已準備要引退。因此,引退單元144產生異常偵測指示582的值為真,此外,引退單元144輸出異常處理例行程序地址584與異常狀態586,且異常處理例行程序地址584與異常狀態586載入至FBCS124以供該異常處理例行程序的下一FCB指令使用。流程往下進行到方塊612。在方塊612,微碼單元128將異常處理例行程序地址584載入至指令指針暫存器112。流程往下進行到方塊614。在方塊614,微碼單元128以指令指針暫存器112中的地址從微碼只讀存儲器306中提取一微碼指令,然後指令解碼器108解碼該微碼指令,特別是,指令解碼器108產生FCB查見指示164以指示該微碼指令是否為一FCB指令。流程往下進行到方塊616。在方塊616,如果提取地址控制器126決定該指令為一FCB指令,則流程往下進行到方塊618;反之,則流程往下進行到方塊622。在方塊618,流程往下進行到圖4a中的方塊408接續執行以解析並引退該FCB指令,以及根據該FCB指令的解析結果提取目標指令(意即,如果該FCB指令為被取用,則從FCB目標地址162提取;如果該FCB指令為未被取用,則從NSIP154提取)。特別是,在圖4a中的方塊412,微碼單元128中的FCB方向解析器122將使用於方塊608中被載入至FBCS124的異常狀態586,並根據FCB條件166解析FCB方向172。然後流程回到圖6中的決策方塊616。在方塊622,微碼單元128將NSIP154載入至指令指針暫存器112。流程回到方塊614以提取下一個指令,指令提取完畢之後,流程往下進行到方塊624。在方塊624,微碼單元128的指令解碼器108將非FCB指令配送至執行管線。流程往下進行到方塊626。在方塊626,執行管線執行並引退該非FCB指令,然後流程結束於方塊626。儘管圖5與圖6已描述了本發明的一實施例,且在該實施例中,異常處理例行程序存在於微碼只讀存儲器306並且FCB指令由微碼單元128所解析與引退。而在其它實施例中,異常處理例行程序可存在於指令快取106(例如為作業系統的一部份)並且FCB指令由提取單元104所解析與引退。圖7是根據本發明另一實施例所述的微處理器100的方塊圖。圖7與圖5在許多方面是類似的,然而,在圖7所示的微處理器100中,提取單元104產生一微碼執行指令偵測指示782用以指示一微碼執行指令(microcode-implementedinstruction,Mil)已被解碼、產生微碼例行程序的微碼只讀存儲器306中的一微碼執行指令地址784用以執行該微碼執行指令以及產生相關的該微碼執行指令狀態786。微碼執行指令狀態786包括指定該微碼執行指令的存儲器地址以及下一個指令地址的信息。在以下狀況,微碼執行指令狀態786會被閂鎖該微碼執行指令狀態786包括了微處理器100的控制暫存器的狀態位,用以控制各種操作模式(例如x86控制暫存器);該微碼執行指令狀態78包括了由微碼例行程序所執行的指令的操作碼相關解碼信息;該微碼執行指令狀態786包括了由微碼例行程序所執行的指令的運算元尺寸相關信息(例如x86作業系統位);該微碼執行指令狀態786包括了由微碼例行程序執行的指令所指定的多個地址尺寸相關信息(例如x86地址尺寸(AddressSize,AS)位);該微碼執行指令狀態786包括了指示微處理器是否執行鎖定原子級存儲器運作(lockedatomicmemoryoperation)的相關信息,用以執行由微碼例行程序所執行的指令(例如x86鎖定自動存儲器指令);該微碼執行指令狀態786包括了由微碼例行程序執行的指令所指定的地址欄位相關信息(例如x86模式/存儲器參照(mod/rm)欄位);該微碼執行指令狀態786包括了由微碼例行程序所執行的指令是否為非存儲器存取指令的相關信息;當該微碼執行指令引發一異常,該微碼執行指令狀態786包括了微處理器是否復原由微碼例行程序執行的指令所修改的暫存器值的信息。在一實施例中,微處理器100的硬體保證在微碼例行程序執行的過程中,R鎖的微碼執行指令狀態786不會改變,直到微碼單元128解析完該FCB指令,除非是執行該FCB的微碼例行程序自己去改變微碼執行指令狀態786。如果提取單元104的指令解碼器108解碼一微碼執行指令,則提取單元104產生微碼執行指令偵測指示782的值為真、提供微碼執行指令地址784給微碼單元128的多工器114、並且提供微碼執行指令狀態786以將之載入至FBCS124。如上所述,微碼執行指令可包括微處理器100的指令集中複雜且不常被執行的指令,例如三角函數指令、讀取/寫入模塊特定暫存器指令以及序列化指令。圖8是根據本發明圖7所示的微處理器100的運作流程圖。流程由方塊804開始進行。在方塊804,提取單元104自指令快取106中提取一使用者程序指令(即正規指令與FCB指令188),提取單元104的指令解碼器108(如圖1所示)解碼該使用者程序指令(即正規指令與FCB指令188),並決定該指令為一微碼執行指令。流程往下進行到方塊808。在方塊808,提取單元104產生微碼執行指令偵測指示782的值為真,並且輸出微碼執行指令地址784以及微碼執行指令狀態786,其中微碼執行指令狀態786如以下所述被載入至FBCS124以供執行該微碼執行指令的微碼例行程序的下一個FCB指令所使用。流程往下進行到方塊812。在方塊812,微碼單元128將微碼執行指令地址784載入至指令指針暫存器112。流程往下進行到方塊614。圖8中的方塊614到626類似於圖6中類似編號的方塊,為簡潔起見,方塊614到626的運作細節就不再重複描述。然而,值得注意的是,在方塊618,當流程往下進行到圖4a的方塊408接續執行以進行解析並引退FCB指令以及圖4a的方塊412以進行根據該FCB指令的解析結果提取目標指令時,微碼單元128的FCB方向解析器122會使用微碼執行指令狀態786(於方塊808中被載入至FBCS124)以根據FCB條件166解析FCB方向172。圖9是根據本發明另一實施例所述的微處理器100的方塊圖。圖9與圖7在許多方面是類似的,然而,引退單元144也負責將序列化指令(serializinginstruction)所指定的新數值寫入FBCS124,此外,特別是微碼執行指令偵測指示782指示出一序列化指令已解碼,且微碼只讀存儲器306的微碼執行指令地址784位於執行該序列化指令的微碼例行程序,微碼執行指令狀態786則相關於該序列化指令。微碼執行指令狀態786包括了指定該序列化指令的後一個指令地址的相關信息,其餘部分請參照圖7。在一實施例中,更新微處理器100的架構狀態的所有序列化指令都是微碼執行指令,因此,寫入至上述由序列化指令更新的架構狀態的指令指微碼只讀存儲器306中微碼例行程序的指令。在一實施例中,微處理器更用以在由微處理器所執行的一微碼例行程序中執行上述序列化指令,其中上述微碼例行程序包括在上述微碼例行程序的程序順序上位於一更新指令之後的一清除指令,上述更新指令以上述序列化指令所指定的一分支條件(例如一數值)更新上述控制暫存器中的上述控制值,上述清除指令把在上述微碼例行程序的程序順序上位於上述清除指令之後的所有指令從微處理器的一管線清除掉。以下將進一步描述,執行序列化指令的微碼例行程序的寫入方式能夠確保由序列化指令所寫入的FBCS124的部分在關於FCB指令是靜態的。在一實施例中,指令集架構的序列化指令包括由x86架構所認定的序列化指令,例如請參照2006年七月發布的Intel⑧架構軟體開發者手冊第3冊「系統編程指南第一篇」的第7.4章節,其中定義序列化指令是強迫處理器完成先前指令所引發對於旗標、暫存器以及存儲器的修改,並且在提取並執行下一個指令之前洩流(drain)全部緩衝的存儲器寫入。微處理器的一指令集架構包括多個序列化指令,且每個序列化指令需要微處理器完成由序列化指令之前所執行的指令所造成對微處理器的狀態(例如多個旗標,多個暫存器)以及對存儲器的全部修改,並且需要微處理器於提取並執行在序列化指令之後的下一個指令之前,洩流全部緩衝的存儲器寫入,其中上述指令集架構僅容許序列化指令修改微碼執行指令狀態786。舉例來說序列化指令可為將微處理器100的快取存儲器無效化的指令,例如指令快取106以及/或數據快取(未繪示)或將微處理器100的轉譯後備緩衝區(translationlookasidebuffer)(未繪示)的一項目(entry)無效化的指令或恢復(resume)處於系統管理模式(SystemManagementMode,S匪)的微處理器100的指令。在一實施例中,暫存器別名表134與指令排程器136不會針對由序列化指令所寫入的FBCS124執行相依性檢查。由序列化指令所寫入的狀態傾向為比較不頻繁變動的狀態,例如控制暫存器的位(如x86CRx控制暫存器),上述控制暫存器用以儲存影響管線式微處理器的運作的一控制值。此外,狀態中的位通常由系統軟體所寫入,而非由使用者程序所寫入。因為僅由指令集架構的序列化指令所寫入,所以FBCS124是靜態的,FBCS124所含的位可舉例如控制微處理器100是否運作於使用多個存儲器保護設備(例如x86控制暫存器CR0的同位誤差(ParityError,PE)位)的模式下的位;控制微處理器100是否運作於一存儲器分頁模式;控制微處理器100是否自動執行存儲器參照的校準檢查的位(例如x86控制暫存器CR0的校準遮罩(AlignmentMask,AM)位);控制微處理器的虛擬模式延伸(virtualmodeextension)是否致能(enabled)的位(例如x86虛擬主機延伸位);特定模塊暫存器(ModelSpecificRegsiter,MSR)的位(例如x86特定模塊暫存器位);描述符表暫存器(DescriptorTableRegister,DTR)的位(例如x86全域描述符表暫存器位(GlobalDescriptorTableRegister,GDTR)、局部描述符表暫存器位(LocalDescriptorTableRegister,LDTR)以及中斷描述符表暫存器位(InterruptDescriptorTableRegister,I⑶TR));操作暫存器(TaskRegister,TR)的位(例如x86操作暫存器位)。圖10是根據本發明圖9所示的微處理器100的運作流程圖。流程由方塊1004開始進行。在方塊1004,如圖8的方塊804812與614所示,提取單元104自指令快取106中提取一序列化指令,將之解碼,並決定其為一微碼執行指令,然後提取單元104儲存下一個指令指針暫存器的值,產生執行該序列化指令的微碼例行程序位於微碼只讀存儲器306中的目標地址,以及產生微碼執行指令偵測指示的值為真,並且將控制轉送至微碼單元128。然後微碼單元128開始執行執行該序列化指令的微碼例行程序的指令,該微碼例行程序的指令不包括任何FCB指令,用以指定FBCS124中由該序列化指令所寫入的部分。然而,該微碼例行程序包括一指令,用以將該序列化指令所指定的新數值寫入到該序列化指令所指定的架構狀態,而該架構狀態包括於圖9的FBCS124中。流程往下進行到方塊1006。在方塊1006,微碼單元128將微碼指令提取出來並配送至執行管線,其中該微碼指令將該序列化指令所指定的新數值寫入到該序列化指令所指定的FBCS124中。引退單元144於是將該新數值寫入到FBCS124中。流程往下進行到方塊1008。在方塊1008,微碼單元128把分支到方塊1004中被儲存的NSIP的指令,當作執行序列化指令的微碼例行程序中的最後一個指令進行配送。為響應上述分支到NSIP,引退單元144清除微處理器100的管線、將提取單元104的指令指針暫存器112更新為NSIP的值(通過正確目標地址176)以及將控制從微碼單元128轉送回提取單元104,使提取單元104再度開始從NSIP提取使用者程序指令。上述清除管線的動作能夠保證在微處理器100提取或發送其它指令進行執行之前,在方塊1006中寫入FBCS124的微碼指令已被引退,意艮口,已將新數值寫入FBCS124。流程往下進行到方塊1012。在方塊1012,微處理器呼叫包括FCB指令的微碼例行程序(例如因微碼執行指令或異常所造成)。在執行序列化指令的微碼例行程序已結束之後一段時間,提取單元104將控制從目前執行的使用者程序轉送到微碼單元128以執行另一微碼例行程序,此現象可能是因為由使用者程序微碼所執行的指令的解碼或異常條件所造成,如上於圖5-6或圖7-8中已分別敘述。特別是,該微碼例行程序包括了方塊1006中指定FBCS124的FCB指令,並以該快速分支條件為其分支條件狀態。如圖4中方塊408到426所述,微碼單元128提取、解析以及引退該FCB指令。其優點是,FBCS124是靜態的,因為微處理器100的管線中不存在比修改FBCS124的FCB指令更老舊且未引退的指令(除非微碼例行程序中包含了一個這樣的指令,但事實上並非如此),因為在方塊1008中響應分支到NSIP而執行了清除動作。又或者FBCS124是靜態的,是因為寫入至FBCS124的任何使用者程序指令都是由包括分支到NSIP的微碼例行程序所執行,而且除了執行該使用者程序指令的微碼例行程序之外,沒有其它微碼例行程序會寫入至FBCS124。流程結束於方塊1012。從以上描述可窺知其優點在於,對執行序列化指令的微碼例行程序之外的FCB指令來說,由一序列化指令所寫入的FBCS124是靜態的。由於認知到此一特性,本發明的發明人提供了一種FCB指令能夠指定該靜態的狀態,並且比起傳統的條件分支指令能夠更快地被解析、引退,因為傳統的條件分支指令動態依據其分支條件狀態而指定其狀態。儘管圖1到圖10各自提供了多種實施例,但其它實施例當可自上述實施例所述的特性加以變化或組合而得到。例如在其它實施例中,微處理器可於使用者程序以及/或微碼例行程序中包括FCB指令,其中該使用者程序與微碼例行程序包括有執行微指令的微碼例行程序與異常處理例行程序,以及包括異常狀態、微碼執行指令狀態、由序列化指令所寫入的狀態、由微碼保證為靜態的狀態或其上任意的組合的微碼例行程序或使用者程序。本發明雖以各種實施例揭露如上,然而其僅為範例參考而非用以限定本發明的範圍,任何本領域技術人員,在不脫離本發明的精神和範圍內,當可做些許的更動與潤飾。舉例來說可用軟體來執行本發明的系統與方法中的上述功能、構造、模塊、模擬、描述以及/或測試,該軟體可使用一般的程序語言(例如c、C++)、硬體描述語言(HardwareDescriptionLanguage,HDL),包括Verilog硬體描述語言、超高速集成電路硬體描述語言(VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage,VHDL)等等或其它程序語言。這些軟體可配置於任何公知的計算機可使用的介質,例如半導體、磁碟或光碟(包括只讀光碟(CompactDiscRead-On1yMemory)、數字多功能只讀光碟(DigitalVersatileDiscRead-OnlyMemory)、等等)。本發明的實施例所述的裝置與方法可包括於半導體智慧財產權核(semiconductorintellectualpropertycore),例如微處理器核心(例如以硬體描述語言來實現)以及轉換為硬體型態的集成電路產品。此外,本發明的實施例所述的裝置與方法亦可用硬體與軟體的組合得以實現。因此,本發明的範圍並非限定於上述的實施例,而當視前述的權利要求書與其等效物所界定者為準,特別是,本發明可執行在運用於一般用途計算機的微處理器裝置中。最後,在不脫離本發明的精神和範圍內,任何本領域技術人員當可以上述所揭露的實施例及其概念為基礎,做些許的更動與潤飾得出與本發明相同的目的。附圖中的符號簡單說明如下100微處理器;104提取單元;106指令快取;108指令解碼器;112指令指針暫存器;114、132多工器;116地址增量電路;118分支預測器;122:FCB方向解析器;124快速分支條件狀態(FBCS);126提取地址控制器;128微碼單元;134暫存器別名表;136指令排程器;138多個執行單元;142正規分支條件狀態(NBCS);144引退單元;152多工選擇信號;154:NSIP;156預測目標地址;158預測方向;162:FCB目標地址;164:FCB查見指示;166:FCB條件;168提取地址;172:FCB方向;174正規指令結果;176NCB正確目標地址;178:NCB誤預測指示;188正規指令與FCB指令;306微碼只讀存儲器;582異常偵測指示;584異常處理例行程序地址;586異常狀態;782微碼執行指令偵測指示;784微碼執行指令地址;786微碼執行指令狀態。權利要求一種微處理器,其特徵在於,包括一存儲器,用以儲存一異常處理例行程序以處理一異常條件,其中上述異常處理例行程序為上述微處理器私有的一非使用者程序,且上述異常處理例行程序包括一條件分支指令;一第一提取單元,用以提取一使用者程序的多個指令,其中上述使用者程序包括造成上述異常條件的一使用者程序指令;一執行單元,用以執行上述第一提取單元所提取的上述使用者程序的上述指令以及除了上述條件分支指令之外的上述異常處理例行程序的多個指令,並且用以響應偵測到上述使用者程序所造成的上述異常條件而儲存一狀態;以及一第二提取單元,用以自上述存儲器提取上述異常處理例行程序的上述指令,並且用以根據上述狀態解析上述條件分支指令而不將上述條件分支指令傳送到上述執行單元去進行解析;其中上述狀態指定上述異常條件的一發生原因。2.根據權利要求1所述的微處理器,其特徵在於,上述微處理器保證上述狀態在上述異常處理例行程序的執行期間不會改變,除非是上述異常處理例行程序去改變上述狀態。3.根據權利要求1所述的微處理器,其特徵在於,上述第二提取單元解析上述條件分支指令的步驟還包括決定上述狀態是否滿足由上述條件分支指令所指定的一條件;如果滿足,則從上述條件分支指令所指定的一目標地址提取一指令;如果不滿足,則提取上述條件分支指令的下一個指令;以及產生上述條件分支指令所指定的上述目標地址。4.根據權利要求1所述的微處理器,其特徵在於,上述狀態包括以下之一上述微處理器的多個控制暫存器中的多個狀態位,且上述狀態位用以決定上述微處理器的一現行運作模式;關連於上述微處理器的多個虛擬主機延伸的多個位;上述微處理器的一狀態暫存器中的多個位,且上述位用以指定由上述使用者程序的多個條件分支指令所指定為多個分支條件的多個旗標;控制多個碼分段描述符的多個位;控制多個任務分段描述符的多個位;用以指定上述微處理器的一現行特權階段的多個位;以及用以指定數據與地址的一預設尺寸的多個位。5.一種微處理器,其特徵在於,包括一提取單元,用以提取一程序的多個指令,且上述程序包括造成一異常條件的一程序指令,以及用以提取處理上述異常條件的一異常處理例行程序,其中上述異常處理例行程序包括一條件分支指令;以及一執行單元,用以執行上述提取單元所提取的上述指令,並且執行除了上述條件分支指令之外的上述異常處理例行程序的多個指令,以及用以響應偵測到上述程序指令所造成的上述異常條件而儲存一狀態,其中上述提取單元還用以響應上述執行單元偵測到上述異常條件而提取上述異常處理例行程序的上述指令,並且根據上述狀態無條件地解析上述條件分支指令,而不將上述條件分支指令傳送到上述執行單元去進行解析。6.根據權利要求5所述的微處理器,其特徵在於,上述條件分支指令為上述微處理器的一指令集中的一第一類別條件分支指令,上述指令集亦包括一第二類別條件分支指令,且上述提取單元用以將上述第二類別條件分支指令傳送到上述執行單元以進行解析。7.一種快速執行條件分支指令的方法,其特徵在於,適用於一微處理器,包括儲存一異常處理例行程序於一存儲器以處理一異常條件,其中上述異常處理例行程序為上述微處理器私有的一非使用者程序,且上述異常處理例行程序包括一條件分支指令;由上述微處理器的一第一提取單元進行提取一使用者程序的多個指令,其中上述使用者程序包括造成上述異常條件的一使用者程序指令;由上述微處理器的一執行單元執行上述第一提取單元所提取的上述使用者程序的上述指令以及除了上述條件分支指令之外的上述異常處理例行程序的多個指令;響應偵測到上述使用者程序所造成的上述異常條件而儲存一狀態;由上述微處理器的一第二提取單元進行自上述存儲器提取上述異常處理例行程序的上述指令;由上述第二提取單元進行根據上述狀態解析上述條件分支指令而不將上述條件分支指令傳送到上述執行單元去進行解析;其中上述狀態指定上述異常條件的一發生原因。8.根據權利要求7所述的快速執行條件分支指令的方法,其特徵在於,上述微處理器保證上述狀態在上述異常處理例行程序的執行期間不會改變,除非是上述異常處理例行程序去改變上述狀態。9.根據權利要求7所述的快速執行條件分支指令的方法,其特徵在於,由上述第二提取單元解析上述條件分支指令的步驟還包括決定上述狀態是否滿足由上述條件分支指令所指定的一條件;如果滿足,則從上述條件分支指令所指定的一目標地址提取一指令;如果不滿足,則提取上述條件分支指令的下一個指令;以及產生上述條件分支指令所指定的上述目標地址。10.根據權利要求7所述的快速執行條件分支指令的方法,其特徵在於,上述狀態包括以下之一上述微處理器的多個控制暫存器中的多個狀態位,且上述狀態位用以決定上述微處理器的一現行運作模式;關連於上述微處理器的多個虛擬主機延伸的多個位;上述微處理器的一狀態暫存器中的多個位,且上述位用以指定由上述使用者程序的多個條件分支指令所指定為多個分支條件的多個旗標;控制多個碼分段描述符的多個位;控制多個任務狀態分段描述符的多個位;用以指定上述微處理器的一現行特權階段的多個位;以及用以指定數據與地址的一預設尺寸的多個位。11.一種快速執行條件分支指令的方法,其特徵在於,適用於一微處理器,包括由上述微處理器的一提取單元提取一程序的多個指令,且上述程序包括造成一異常條件的一程序指令;由上述提取單元提取處理上述異常條件的一異常處理例行程序,其中上述異常處理例行程序包括一條件分支指令;由上述微處理器的一執行單元執行上述提取單元所提取的上述指令,以及除了上述條件分支指令之外的上述異常處理例行程序的多個指令;響應偵測到上述程序指令所造成的上述異常條件而儲存一狀態;由上述提取單元響應上述執行單元偵測到上述異常條件而提取上述異常處理例行程序的上述指令;以及由上述提取單元根據上述狀態無條件地解析上述條件分支指令,而不將上述條件分支指令傳送到上述執行單元去進行解析。12.根據權利要求11所述的快速執行條件分支指令的方法,其特徵在於,上述條件分支指令為上述微處理器的一指令集中的一第一類別條件分支指令,上述指令集亦包括一第二類別條件分支指令,且上述提取單元用以將上述第二類別條件分支指令傳送到上述執行單元以進行解析。全文摘要一種微處理器以及快速執行條件分支指令的方法,微處理器具有存儲器、第一提取單元、執行單元以及第二提取單元。存儲器用以儲存異常處理例行程序以處理異常條件,異常處理例行程序為微處理器私有的非使用者程序,且具有條件分支指令。第一提取單元用以提取使用者程序的指令,使用者程序具有造成異常條件的使用者程序指令。執行單元用以執行第一提取單元所提取的使用者程序的指令以及異常處理例行程序的指令,用以響應偵測到使用者程序所造成的異常條件而儲存狀態。第二提取單元用以自存儲器提取異常處理例行程序的指令,用以根據狀態解析條件分支指令而不將條件分支指令傳送到執行單元去進行解析。本發明使得FCB指令在執行上更快、更正確。文檔編號G06F9/38GK101876891SQ20101011190公開日2010年11月3日申請日期2010年1月28日優先權日2009年2月12日發明者G·葛蘭·亨利,布蘭特·比恩,泰瑞·派克斯申請人:威盛電子股份有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀