ARM處理器是由哪些基本體系進行構(gòu)成的?
ARM 公司是微處理器行業(yè)的一家知名企業(yè),它是知識產(chǎn)權(quán)供應(yīng)商,設(shè)計基于ARM體系的處理器;公司并不生產(chǎn)芯片,也不出售芯片,它轉(zhuǎn)讓設(shè)計方案給半導(dǎo)體廠商,由半導(dǎo)體廠商生產(chǎn)soc,并銷售,同時提供一些其他設(shè)計服務(wù),比如物理IP,圖形內(nèi)核和開發(fā)工具的設(shè)計。ARM微處理器包括ARM7、ARM9、ARM9E、ARM10E、SecurCore、以及Intel的StrongARM、XScale和其它廠商基于ARM體系結(jié)構(gòu)的處理器,除了具有ARM體系結(jié)構(gòu)的共同特點以外,每一個系列的ARM微處理器都有各自的特點和應(yīng)用領(lǐng)域。
ARM的體系結(jié)構(gòu)或處理器結(jié)構(gòu)主要體現(xiàn)在:ARM微處理器的寄存器結(jié)構(gòu)、異常處理、存儲器結(jié)構(gòu)、指令系統(tǒng)、接口等方面。
1、寄存器結(jié)構(gòu):
ARM處理器共有37個寄存器,被分為若干個組(BANK),這些寄器包括:
● 31個通用寄存器,包括程序計數(shù)器(PC指針),均為32位的寄存器。
● 6個狀態(tài)寄存器,用以標(biāo)識CPU的工作狀態(tài)及程序的運行狀態(tài),均為32位,目前只使用了其中的一部分。
(1)處理器運行模式:
ARM微處理器支持7種運行模式,分別為:
● usr(用戶模式):ARM處理器正常程序執(zhí)行模式。
● fiq(快速中斷模式):用于高速數(shù)據(jù)傳輸或通道處理
● irq(外部中斷模式):用于通用的中斷處理
● svc(管理模式):操作系統(tǒng)使用的保護模式
● abt (數(shù)據(jù)訪問終止模式): 當(dāng)數(shù)據(jù)或指令預(yù)取終止時進入該模式,可用于虛擬存儲及存儲保護。
● sys(系統(tǒng)模式): 運行具有特權(quán)的操作系統(tǒng)任務(wù)。
● und(未定義指令中止模式):當(dāng)未定義的指令執(zhí)行時進入該模式,可用于支持硬件協(xié)處理器的軟件仿真。
ARM微處理器的運行模式可以通過軟件改變,也可以通過外部中斷或異常處理改變。
大多數(shù)的應(yīng)用程序運行在用戶模式下,當(dāng)處理器運行在用戶模式下時,某些被保護的系統(tǒng)資源是不能被訪問的。
除用戶模式以外,其余的所有6種模式稱之為非用戶模式,或特權(quán)模式;其中除去用戶模式和系統(tǒng)模式以外的5種又稱為異常模式,常用于處理中斷或異常,以及需要訪問受保護的系統(tǒng)資源等情況。
ARM的RISC體系結(jié)構(gòu)的發(fā)展中已經(jīng)提供了低功耗、小體積、高性能的方案。而為了解決代碼長度的問題,ARM體系結(jié)構(gòu)又增加了T變種,開發(fā)了一種新的指令體系,這就是Thumb指令集,它是ARM技術(shù)的一大特色。
Thumb是ARM體系結(jié)構(gòu)的擴展。它有從標(biāo)準(zhǔn)32位ARM指令集抽出來的36條指令格式,可以重新編成16位的操作碼。這能帶來很高的代碼密度。
支持Thumb的ARM體系結(jié)構(gòu)的處理器狀態(tài)可以方便的切換、運行到Thumb狀態(tài),在該狀態(tài)下指令集是16位的Thumb指令集。
ARM指令集對比Thumb指令集:
· 完成相同的操作,Thumb指令通常需要更多的指令,因此在對系統(tǒng)運行時間要求苛刻的應(yīng)用場合ARM指令集更為適合;
· Thumb指令集沒有包含進行異常處理時需要的一些指令,因此在異常中斷時,還是需要使用ARM指令,這種限制決定了Thumb指令需要和ARM指令配合使用。
ARM處理器的工作狀態(tài)由程序狀態(tài)寄存器CPSR的D5位的值控制,ARM指令集和Thumb指令集都設(shè)有處理器工作狀態(tài)切換指令,以供程序在執(zhí)行過程中對處理器進行狀態(tài)切換。啟動時,處理器默認(rèn)狀態(tài)為ARM狀態(tài)。
Thumb指令與ARM指令的時間效率和空間效率對比:
· Thumb代碼所需的存儲空間為ARM代碼的60%~70%;
· Thumb代碼使用的指令數(shù)比ARM代碼多30%~40%;
· 使用32位的存儲器,ARM代碼比Thumb代碼快約40%;
· 若使用16位存儲器,則Thumb代碼比ARM代碼快40%~50%;
· 與ARM代碼相比較,使用Thumb代碼,存儲器的功耗會降低約30%。
若對系統(tǒng)的性能有較高要求,則應(yīng)使用32位存儲系統(tǒng)和ARM指令集;若對系統(tǒng)的成本及功耗有較高要求,則應(yīng)使用16位存儲系統(tǒng)和Thumb指令集。當(dāng)然,若兩者結(jié)合使用,充分發(fā)揮各自的優(yōu)點,則會取得更好的效果。