[0041] 136環(huán)境模式指標
[0042] 202指令格式器
[0043] 204簡單指令轉譯器
[0044] 222 x86 SIT
[0045] 224 ARM SIT
[0046] 242格式化的x86 ISA及ARM ISA指令
[0047] 252微編碼地址
[0048] 206復雜指令轉譯器
[0049] 232微程序計數器
[0050] 234微編碼只讀存儲器
[0051] 235指令間接寄存器
[0052] 236微序列器
[0053] 237微轉譯器
[0054] 244、246 微指令
[0055] 247 ROM 指令
[0056] 212 多工器
[0057] 302預先解碼器
[0058] 304 IBQ
[0059] 306長度解碼器及管線邏輯器
[0060] 308 MQ
[0061] 312 MUXES
[0062] 314 FIQ
[0063] 322 ARM指令集狀態(tài)
[0064] 401微指令隊列
[0065] 402寄存器配置表
[0066] 404指令配送器
[0067] 406指令保留站
[0068] 408指令發(fā)出單元
[0069] 412整數/分支單元
[0070] 414介質單元
[0071] 416載入/儲存單元
[0072] 418浮點單元
[0073] 422前序緩沖器
[0074] 424執(zhí)行單元
[0075] 602~654微處理器的運算步驟流程
[0076] 100核心0、核心1
[0077] 892微指令高速緩存存儲器
【具體實施方式】
[0078] 術語匯編
[0079] 指令集定義為一組二進制編碼值對應到微處理器執(zhí)行的運算的映射(mapping), 其中該二進制編碼值為機器語言指令。典型地,機器語言程序以二進制編碼,盡管可能采 用其他系統(tǒng),例如一些較舊的IBM計算機的機器語言程序以十進位編碼,雖然他們最終以 物理訊號的集合來呈現,而這些物理訊號包含的檢測電壓為二進制的值。舉例來說,操作 機器語言指令可命令微處理器執(zhí)行如下述:將第一寄存器的運算元加至第二寄存器的運算 元,并將結果寫入第三寄存器、將存儲器地址0x12345678中的運算元減去指令規(guī)范的直接 運算元(immediate operand),并將結果寫入第五寄存器、以第七寄存器內的位個數字位移 第六寄存器內的值、如果在該指令之后〇標志被設定,分支到36位后的指令、從存儲器地址 OxAB⑶0000載入該值至寄存器8。如此,指令集定義的二進制值是每個機器語言指令必定 驅使微處理器去執(zhí)行所需的運算??衫斫獾氖?,指令集定義的二進制值對應到微處理器運 算的映射,并非意味著單一二進制值映射到單一微處理運算。更具體來說,一些指令集中, 多個二進制值可能映射到相同的微處理運算。
[0080] 指令集架構(Instruction set architecture, ISA),在微處理器的家族的關系 (context)中,包括(1) 一個指令集(2) -個資源集(例如寄存器或存儲器中的定址模式), 該資源集是通過指令集的指令來存取,以及(3) -個例外集(set of exceptions),該例外 集是由微處理器對應于指令集的指令處理結果所產生,該指令處理結果例如除以零、頁面 錯誤(page fault)、違反存儲器保護。由于程序設計師,例如組合程序設計師或編譯師,欲 產生一機器語言程序可在微處理器家族上執(zhí)行,因此微處理器家族的制造商典型上會在程 序設計者手冊中定義ISA。舉例來說,在ISA出版的同時,在2009年3月Intel 64以及 IA-32架構軟件開發(fā)者的手冊(包括5卷,即第1卷:基礎架構,第2A卷:指令集參考A-M, 第2B卷:指令集參考N-Z,第3A卷:系統(tǒng)程序編寫導引,第3B卷:系統(tǒng)程序編寫導引的第2 部),藉此為各種目的將全部的內容以參考數據的方式合并于本文,以定義Intel 64以及 IA-32處理器架構,這對于參考x86架構以及文中的x86、x86 ISA、x86 ISA家族、x86家族 或相似者是常見的。舉另一個例子來說,當ARM架構參考手冊于2010年出版的同時,ARM v7-A以及ARM v7-R版本錯誤標示,為各種目的將全部的內容以參考數據的方式合并于本 文,以定義ARM處理器架構的ISA,在此亦可參考ARM、ARM ISA、ARM ISA家族、ARM家族或及 其類似者。公知的ISA家族的其他例子如IBM System/360/370/390、z/Architecture、DEC VAX、Motorola 68k、MIPS、SPARC、PowerPC 以及 DEC Alpha。ISA 定義涵蓋了處理器的一個 家族,因為在ISA處理器家族的使用期限中,制造商可能藉由增加新的指令至指令集和/或 增加新的寄存器至架構寄存器集,來增強家族中的原始處理器的ISA。舉例詳述,在x86 ISA 發(fā)展過程中,作為SSE延伸的一部份的一組128位XMM寄存器曾被引入Intel Pentium III 處理器家族,而且x86 ISA機器語言程序也被發(fā)展為使用XMM寄存器以增加效能,盡管現今 的x86 ISA機器語言程序已不使用SSE延伸的XMM寄存器。此外,其他制造商已經設計且制 造出可執(zhí)行x86 ISA機器語言程序的微處理器。舉例來說,AMD (Advanced Micro Devices) 以及威盛電子(VIA)已將新的特征,例如AMD 3DN0W ! SMD向量處理指令以及VIA掛鎖安 全引擎隨機數字產生器(Padlock Security Engine random number generator)及進階解 碼引擎特征,其中的每一個皆是由一些x86 ISA機器語言程序所使用,但在現今的Intel微 處理器中已不使用它們。以其他例子更詳盡地說明,ARM ISA原本定義ARM指令集狀態(tài)包 括4位的指令。然而,ARM ISA逐漸發(fā)展為用來以2位指令來增加Thumb指令集狀態(tài)以增 加編碼的密度、Jazelle指令集狀態(tài)則用來加速Java位編碼程序,且ARM ISA機器語言程 序已開發(fā)為使用一些或其他的ARM ISA指令集狀態(tài),盡管現今的ARM ISA機器語言程序已 不使用其他的ARM ISA指令集狀態(tài)。
[0081] ISA機器語言程序包含該ISA的一序列的指令,也就是一序列的二進制編碼值,其 為該ISA指令對于程序設計者所要執(zhí)行的運算序列的映射。因此,一x86 ISA機器語言程序 包含一 x86 ISA指令的序列;且一 ARM ISA機器語言程序包含一 ARM ISA指令的序列。該 機器語言程序指令常駐于存儲器中,且由微處理器提取及執(zhí)行。
[0082] 硬件指令轉譯器包含一晶體管的配置,其接收一 ISA機器語言指令(例如一 x86 ISA或ARM ISA機器語言指令)來作為輸入,并對應地將一個或多個微指令直接輸出至該微 處理器的一執(zhí)行管線。執(zhí)行管線執(zhí)行該一個或多個微指令的結果,為該ISA指令定義的結 果。因此,該一個或多個微指令藉由該執(zhí)行管線的序列執(zhí)行「實行」該ISA指令;也就是,由 硬件指令轉譯器輸出的將執(zhí)行微指令,并由執(zhí)行管線在執(zhí)行由ISA指令定義的輸入端所定 義的ISA指令規(guī)范的運算后,以產生由ISA指令定義的一結果。因此,硬件指令轉譯器可說 是將ISA指令轉譯成一個或多個實行微指令。目前的揭示描述一微處理器的多個實施例, 該微處理器包含一硬件指令轉譯器,其將x86 ISA指令及ARM ISA指令轉譯成微指令。需 注意的是,該硬件指令轉譯器不一定要能轉譯由x86程序設計者的手冊或ARM程序設計者 的手冊定義的全部指令集,只要能轉譯這些指令的一子集(subset),因為大多數的x86 ISA 及ARM ISA處理器只支持這些指令的一子集,其由為他們各自的程序設計者的手冊所定義。 較特別的是,由x86程序設計者的手冊定義、且由硬件指令轉譯器轉譯的該指令子集,不一 定要對應任何仍存在的x86 ISA處理器,而由ARM程序設計者的手冊定義、且由硬件指令轉 譯器轉譯的該指令子集,不一定要對應任何仍存在的ARM ISA處理器。
[0083] 執(zhí)行管線為一多個階段的序列,其中各階段包含硬件邏輯及一硬件寄存器,用以 保持該硬件邏輯的輸出,以依據微處理器的一時鐘序號,提供至該序列的下一階段。該執(zhí)行 管線可包含多個如此階段的序列,亦即,多重管線。該執(zhí)行管線接收輸入微指令,然后回應 地執(zhí)行由微指令規(guī)范的運算,以輸出結果。各種的管線的該硬件邏輯執(zhí)行由微指令規(guī)范的 運算,其可包括,但不局限于,算數、邏輯、記載存取、比較、測試及分支解析,并且在各種數 據格式上執(zhí)行運算,其可包括,但不局限于,整數、浮點數、字符、二進碼十進數(BCD)及壓 縮。該執(zhí)行管線執(zhí)行微指令,其實行一 ISA指令(例如x86及ARM),以產生由ISA指令定義 的結果。該執(zhí)行管線不同于硬件指令轉譯器;特別是,該硬件指令轉譯器產生這些將執(zhí)行的 微指令,而執(zhí)行管線執(zhí)行它們;此外,該執(zhí)行管線不產生這些將執(zhí)行的微指令。
[0084] 指令高速緩存存儲器(instruction cache)為一隨機存取存儲裝置,位于一微處 理器中,該微處理器將一 ISA機器語言程序(例如x86 ISA及ARM ISA機器語言指令)的 指令放置于該隨機存取存儲裝置中,這些指令最近從系統(tǒng)存儲器取出,并被