5 指令集架构汇总
1 定義
指令集架構(Instruction Set Architecture,ISA)也稱指令集或者指令集體系,是計算機體系結構中與程序設計有關的部分,包含基本數(shù)據(jù)類型,指令集,寄存器,尋址模式,存儲體系,中斷,異常處理以及外部IO。
1.1 指令集架構與微架構
指令集架構與微架構(microarchitecture)不同,微架構指的是一套用于執(zhí)行指令集的微處理器設計方法,使得指令集架構可以在微處理器上被執(zhí)行。
不同微架構的處理器可以共享一種指令集。舉例:例如Intel的Pentium處理器與AMD的AMD Athlon處理器,都是屬于x86的指令集架構,但是兩者在處理器的內(nèi)部設計上存在本質(zhì)區(qū)別。
1.2 指令集架構的分類
復雜指令集計算機(Complex Instruction Set Computer,CISC):每個指令可執(zhí)行若干低端操作,例如存儲器讀取、存儲、計算操作等,指令數(shù)目多且復雜,每條指令字長不相等。這些特性使得代碼編寫較為簡單,但是復雜的指令需要若干指令周期才可以實現(xiàn)。
精簡指令集計算機(Reduced Instruction Set Computer,RISC):對指令數(shù)目與尋址方式都做了精簡,只保留經(jīng)常使用的指令,因此實現(xiàn)更加容易,指令并行程度較好,編譯器效率較高。但是對于一些特殊操作,需要通過處理器額外的執(zhí)行時間來彌補。其特征包括統(tǒng)一指令編碼、泛用的寄存器,單純的尋址模式等,每條指令的執(zhí)行時間較短。
實際上在后來的發(fā)展中,RISC與CISC在競爭的過程中相互學習,現(xiàn)在的RISC指令集也達到數(shù)百條,運行周期也不再固定。
2 x86相關的架構及其發(fā)展歷史
x86泛指一系列基于Intel 8086且向后兼容的指令集架構。1978年Intel推出了8086處理器(16位微處理器),1985年Intel推出了80386(32位處理器)。由于Intel早期處理器名稱是以數(shù)字來表示80x86,因此這些架構稱之為x86。
x86
通常來說是Intel開發(fā)的32位指令集,這種指令集兼容16位指令,一直沿用至今,屬于CISC指令集。早期Intel生產(chǎn)的CPU與AMD生產(chǎn)的CPU均支持這種指令集,相應地,這些CPU被稱為x86架構(The x86 architecture)Intel官方稱這種指令集架構為IA-32(Intel Architecture, 32-bit)。有時候也會被稱為i386。
當CPU邁向64位時,對于指令集,有2種發(fā)展途徑:
向下兼容x86
重新設計新的指令集,不兼容x86
這分別引出了2種指令集架構:AMD64與IA-64。
AMD64
AMD在Intel之前,選擇了前者——設計了一向下兼容x86的64位指令集,稱之為AMD64,并生產(chǎn)了相應指令集的CPU,市場反映良好。
IA-64
Intel選擇了而后者——設計了一種全新的64位指令集,不兼容x86,稱之為IA-64。但是反響不好,因為是全新設計的指令集,不支持Windows,也沒有相應的編譯器。
安騰(Itanium)處理器是屬于Intel安騰架構的64位處理器,傳聞所謂的安騰架構就是IA-64,不過沒有經(jīng)過Intel官方證實。
x86-64(或者寫成x86_64)
Intel在IA-64反響不好的情況下,決定開始支持AMD64的指令集,稱之為x86-64(或者x86_64),表示這是x86指令集的64位擴展。實際上AMD64與x86-64基本是同一個ISA,現(xiàn)在我們使用購買的Intel或者AMD生產(chǎn)的CPU,都屬于x86-64的ISA。
有時候,x86-64也會被簡稱為x64,也有的公司會使用amd64,實際上所指都是同一ISA,同時指代AMD的AMD64與Intel的x86-64。
x86與x86_64的區(qū)別
x86與x86_64指令集架構最主要的區(qū)別其位數(shù):
x86是32位的,從寄存器角度來看,設計了8個32位通用寄存器(EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI)
x86-64是64位的將原先的8個通用寄存器擴展為64位的(RAX,RBX,RCX,RDX,RBP,RSP,RSI,RDI),并且還增加了若干通用寄存器,對于MMX的寄存器位數(shù)與數(shù)量也進行了擴展
小結
x86 = IA-32 = i386;AMD64 = x86-64(x86_64) = x64 ≠ IA-64
對于x86-64體系結構的CPU,都做了兼容32位的特殊處理,在64位的CPU上運行32位的軟件(包括操作系統(tǒng))都是沒有問題的。
這里有一個例子,例如,我希望安裝Anaconda,從Index of /anaconda/archive/ | 清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror網(wǎng)站上尋找安裝包進行安裝,可以發(fā)現(xiàn)最新版本W(wǎng)indows操作系統(tǒng)下有2個exe格式的安裝包,分別為
一個結尾是x86,另一個結尾是x86_64。
相同點:對于x86_64架構的Intel處理器或者AMD處理器,兩個安裝包都可以成功安裝并運行,因為x86_64是兼容32位的,可以執(zhí)行x86指令集的32位指令,也就可以運行32位的軟件。
不同點:
x86_64安裝包較大,因為是使用64位的x86_64指令集的二進制代碼,容量較大;運行在x86_64架構的處理器上速度較快;
x86安裝包較小,因為是使用32位的x86指令集的二進制代碼,容量較小;運行在x86_64架構的處理器上速度較慢;
再例如,有時候安裝包名稱的后綴是amd64,但是我使用的是x86_64架構的Intel處理器,這種情況下也是可以運行的,因為amd64與x86_64本質(zhì)是同一個指令集。
3 ARM相關指令集體系結構
ARM既可以認為是一個公司的名字,也可以認為是對一類微處理器的通稱。
ARM公司的特點
ARM公司通過轉讓高性能、低成本的、低功耗的RISC微處理器、外圍和系統(tǒng)芯片設計技術給合作伙伴,使他們能用這些技術來生產(chǎn)各具特色的芯片。ARM從不制造和銷售具體的處理器芯片,而是把處理器的設計授權給相關的商務合作伙伴,讓他們?nèi)ジ鶕?jù)自己的強項設計具體的芯片,稱之為“知識產(chǎn)權授權”。
ARM架構的特點
ARM指令集架構屬于RISC架構,在其官網(wǎng)文檔中,描述了其特點:
大量、統(tǒng)一的寄存器;
Load/store體系結構,通過寄存器進行操作指令,不能直接作用內(nèi)存;
簡單的尋址模式,所有l(wèi)oad/store方式都通過寄存器內(nèi)容和指令字段;
ARM架構的歷史演變
ARM架構,曾稱進階精簡指令集機器(Advanced RISC Machine)。其架構的版本以數(shù)字命名,一直到現(xiàn)在的ARMv8(目前已經(jīng)有ARMv9),其歷史演變?nèi)缦聢D所示。
每次版本更新都會添加新的特性,從ARMv7開始,其架構開始出現(xiàn)分支,ARM稱之為不同的系列(Architecture profiles),分別命名為
架構 | 特點 | 應用 |
ARMv7-A (Application) | 運行復雜應用程序的應用處理,支持大型嵌入式操作系統(tǒng) | Symbian,Linux,Windows Mobile或CE |
ARMv7-R (Real-time) | 硬實時且高性能的處理器,可靠性高,對事件反應敏捷 | 高端實時市場:高檔轎車的組件,大型大電機控制器 |
ARMv7-M (Microcontroller) | 低成本,低功耗,急速反應中斷,高處理效率 | 單片機應用,實時控制系統(tǒng) |
用于服務器的ARM架構芯片,是A系列的。目前較為流行的是ARMv8-A,ARM架構服務器的處理器,都是屬于A-profile的ARM架構。
例如華為泰山服務器使用的是海思的Kunpeng 920處理器,是基于ARMv8-A設計的服務器處理器芯片。研究其架構我們可以參考ARM提供的架構手冊:Arm? Architecture Reference Manual - Armv8, for A-profile architecture。
ARM的指令集架構與執(zhí)行模式
在ARMv8之前,ARM處理器一直支持兩種形式上相對獨立的指令集:
ARM:32位的ARM指令集,對應處理器ARM狀態(tài)
Thumb:16位的指令集,對應處理器Thumb狀態(tài)
在Thumb指令集的基礎上,Thumb-2指令集,是Thumb的超集,支持16位和32位指令。成為了后面的T32指令集。在ARMv8之后,為了區(qū)分之前的指令集,將指令集作出以下區(qū)分。
A64:A64指令集是在ARMv8-A中引入的,以支持64位架構。A64指令集有固定的32位指令長度。主要
A32:A32指令集有固定的32位指令長度,并在4字節(jié)邊界上對齊。A32指令集實際上是在ARMv6和ARMv7架構中我們常說的ARM指令集,ARMv8及之后改名A32(為了與A64進行區(qū)分)。隨著Thumb-2技術的引入,它的大部分功能都被納入了T32中。A32指令主要被用于A-profile和R-profile,相當于對T32指令集的擴展。
T32:T32指令集最初是作為16位指令的補充集引入的,用于改進的用戶代碼的代碼密度。隨著時間的推移,T32演變成16位和32位混合長度的指令集。因此,編譯器可以在單個指令集中平衡性能和代碼大小。T32指令集就是在在ARMv6和ARMv7架構中的Thumb指令集,ARMv8及之后改名為T32。T32支持所有架構的Profile,并且是M-Profile架構所支持的唯一指令集。
ARMv8架構具有兩種不同的執(zhí)行模式(execution modes):
AArch64:64位執(zhí)行狀態(tài),地址保存在64位寄存器中,基本指令集中的指令使用64位寄存器進行處理。 AArch64狀態(tài)支持A64指令集;
AArch32:32位執(zhí)行狀態(tài),地址保存在32位寄存器中,基本指令集中的指令使用32位寄存器進行處理。 與ARMv7-A兼容,AArch32狀態(tài)支持T32和A32指令集。
總結
- 上一篇: centos7 svn集成ldap用户认
- 下一篇: Android ViewPager真正的