国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

當(dāng)前位置: > 華清遠(yuǎn)見教育科技集團(tuán) > 嵌入式學(xué)習(xí) > 講師博文 > ARM core 介紹一
ARM core 介紹一
時(shí)間:2016-12-14作者:華清遠(yuǎn)見

一、ARM處理器的特點(diǎn)

(1)支持的數(shù)據(jù)類型

A.字節(jié) 8bit
        B.半字        16bit
        C.字           nbsp;32bit

(2)采用32位精簡指令集(RISC)處理器架構(gòu)

ARM處理器可以工作在兩種狀態(tài):

A . ARM狀態(tài)

指令長度為32位,這種狀態(tài)執(zhí)行的是字對(duì)齊方式的ARM指令

B. Thumb狀態(tài)

指令長度為16位,這種狀態(tài)執(zhí)行半字對(duì)齊方式的Thumb指令

主意:這兩個(gè)狀態(tài)間的切換并不影響處理器模式和寄存器內(nèi)容

小知識(shí):RISC和CISC

指令的強(qiáng)弱是CPU的重要指標(biāo),指令集是提高微處理器效率的有效工具之一。從現(xiàn)階段的主流體系結(jié)構(gòu)講,指令集可分為復(fù)雜指令集(CISC)和精簡指令集(RISC)兩部分。相應(yīng)的,微處理隨著微指令的復(fù)雜度也可分為CISC及RISC這兩類。

CISC是一種為了便于編程和提高記憶體訪問效率的晶片設(shè)計(jì)體系。在20世紀(jì)90年代中期之前,大多數(shù)的微處理器都采用CISC體系——包括Intel的80x86和Motorola的68K系列等。即通常所說的X86架構(gòu)就是屬于CISC體系的。RISC是為了提高處理器運(yùn)行的速度而設(shè)計(jì)的晶片體系。它的關(guān)鍵技術(shù)在于流水線操作(Pipelining):在一個(gè)時(shí)鐘周期里完成多條指令。而超流水線以及超標(biāo)量技術(shù)已普遍在晶片設(shè)計(jì)中使用。RISC體系多用于非x86陣營高性能微處理器CPU。像ARM(Advanced RISC Machines),既可以認(rèn)為是一個(gè)公司的名字,也可以認(rèn)為是對(duì)一類微處理器的通稱,還可以認(rèn)為是一種技術(shù)的名字。而ARM體系結(jié)構(gòu)目前被公認(rèn)為是業(yè)界的32位嵌入式RISC 微處理器結(jié)構(gòu)。所有ARM處理器共享這一體系結(jié)構(gòu)。

(1)CISC

CISC復(fù)雜指令系統(tǒng)計(jì)算機(jī)通過增強(qiáng)計(jì)算機(jī)指令系統(tǒng)功能,通過程序去執(zhí)行大量功能各異的指令,從而優(yōu)化計(jì)算機(jī)系統(tǒng)的性能。

由于具有大量的指令,因此CISC體系的優(yōu)缺點(diǎn)也很明顯。

優(yōu)點(diǎn):

a)具有豐富的指令系統(tǒng),很大程度上簡化了程序設(shè)計(jì)的難度。

b)CISC中不要求指令長度統(tǒng)一,可以節(jié)省存儲(chǔ)空間。

c)CISC指令可以直接對(duì)存儲(chǔ)器操作,使得通用寄存器數(shù)目較少。

同時(shí)CISC指令系統(tǒng)也帶來很多問題:

a)由于指令系統(tǒng)龐大,尋址方式、指令格式較多,指令長度不一,增加了硬件復(fù)雜程序,設(shè)計(jì)成本較高。

b)指令操作復(fù)雜、執(zhí)行周期長、速度低,難以優(yōu)化編譯生成高效的機(jī)器語言。

c)許多指令使用頻度低,增加了系統(tǒng)負(fù)擔(dān),降低了性價(jià)比。

(2)RISC

和CISC相比,RISC的指令就要少得多,通常在幾十條左右,其基本設(shè)計(jì)思想是盡量簡化計(jì)算機(jī)的指令功能,從而降低硬件執(zhí)行指令的復(fù)雜度,因?yàn)檐浖扔布菀滋峁└蟮撵`活性和更高的智能。因此CISC的主要特點(diǎn)如下:

a) 精簡指令集:只保留了數(shù)量很少、功能簡單、能在一個(gè)機(jī)器周期內(nèi)完成的指令,如果要執(zhí)行復(fù)雜的程序功能則通過子程序而不是使用復(fù)雜指令來實(shí)現(xiàn)。

b)指令長度相同:每條指令的長度都是相同的,可以在一個(gè)單獨(dú)操作里完成。

c) 單機(jī)器周期指令:大多數(shù)的指令都可以在一個(gè)機(jī)器周期里完成,并且允許處理器在同一時(shí)間內(nèi)執(zhí)行一系列的指令。

使用RISC指令具有以下優(yōu)勢(shì):

a) 精簡指令系統(tǒng)的設(shè)計(jì)適合超大規(guī)模集成電路的實(shí)現(xiàn)。由于指令條數(shù)相對(duì)較少,尋址方式簡單,指令格式規(guī)整,與CISC結(jié)構(gòu)相比,控制器的譯碼和執(zhí)行硬件相對(duì)簡單,因此芯片中用于實(shí)現(xiàn)控制器的晶體面積明顯減小。

b)在使用相同的晶片技術(shù)和相同運(yùn)行時(shí)鐘下,RISC系統(tǒng)具有更快的運(yùn)行速度。精簡的指令系統(tǒng)可以加快指令的譯碼,控制器的簡化可以縮短指令的執(zhí)行延時(shí)等,這些都可以提高程序的執(zhí)行速度。

c)可以提供直接支持高級(jí)語言的能力,簡化編譯程序的設(shè)計(jì)。指令總數(shù)的減少,縮小了編譯過程中對(duì)功能類似的機(jī)器指令的選擇范圍,減輕了對(duì)各種尋址方式進(jìn)行選擇、分析和變換的負(fù)擔(dān),易于更換或取消指令、調(diào)整指令順序,提高程序運(yùn)行速度。

d)RISC處理器比相對(duì)應(yīng)的CISC處理器設(shè)計(jì)更簡單,所需要的時(shí)間將變得更短,并可以比CISC處理器應(yīng)用更多先進(jìn)的技術(shù),開發(fā)更快的下一代處理器。

相應(yīng)的,RISC也存在一些缺點(diǎn),主要有:

a) 由于指令少,因此加重了匯編程序員的負(fù)擔(dān),增加了機(jī)器語言程序的長度,從而占用了較大的存儲(chǔ)空間。

b) 相對(duì)來說,RISC對(duì)編譯器的要求更高,因?yàn)橹噶詈唵,RISC結(jié)構(gòu)的性能就依賴于編譯器的效率。編譯器的優(yōu)劣直接影響處理器的性能發(fā)揮。

綜合上面所述,若要再進(jìn)一步比較CISC與RISC之差異,可以由以下幾點(diǎn)來進(jìn)行分析:

1、指令的形成:CISC因指令復(fù)雜,故采微指令碼控制單元的設(shè)計(jì),而RISC的指令90%是由硬體直接完成,只有10%的指令是由軟體以組合的方式完成,因此指令執(zhí)行時(shí)間上RISC較短,但RISC所須ROM空間相對(duì)的比較大,至于RAM使用大小應(yīng)該與程序的應(yīng)用比較有關(guān)系。

2、定址模式:CISC的需要較多的定址模式,而RISC只有少數(shù)的定址模式,因此CPU在計(jì)算記憶體有效位址時(shí),CISC占用的周期較多。

3、指令周期:CISC指令的格式長短不一,執(zhí)行時(shí)的周期次數(shù)也不統(tǒng)一,而RISC結(jié)構(gòu)剛好相反,故適合采用管線處理架構(gòu)的設(shè)計(jì),進(jìn)而可以達(dá)到平均一周期完成一指令的方向努力。顯然的,在設(shè)計(jì)上RISC較CISC簡單,同時(shí)因?yàn)镃ISC的執(zhí)行步驟過多,閑置的單元電路等待時(shí)間增長,不利于平行處理的設(shè)計(jì),所以就效能而言RISC較CISC還是站了上風(fēng),但RISC因指令精簡化后造成應(yīng)用程式碼變大,需要較大的程式記憶體空間,且存在指令種類較多等等的缺點(diǎn)。

4、大量使用寄存器

二、ARM處理器的模式與異常

ARM體系結(jié)構(gòu)主要支持7種處理器模式,分別為 : 用戶模式、快中斷模式、中斷模式、管理模式、中止模式,未定義模式和系統(tǒng)模式

(1)系統(tǒng)(sys),快中斷(fiq)、中斷(irq)、管理(svc)、中止(abt)、未定義(und)這六種模式成為特權(quán)模式

(2)快中斷(fiq)、中斷(irq)、管理(svc)、中止(abt)、未定義(und)

這五種成為異常模式

思考:為什么處理會(huì)被設(shè)計(jì)成這么多模式呢?

處理器之所以被設(shè)計(jì)出這么多模式的目的是為了能夠更好地處理各種異常。

那什么是異常呢?所謂的異常,指的就是中止了程序正常執(zhí)行的過程而不得不去完成的一些特殊工作,如芯片復(fù)位,取指失敗,指令未定義,等等。

有些同學(xué)在大學(xué)的時(shí)候,學(xué)過51單片機(jī),知道中斷的概念。在這里中斷其實(shí)也是一種異常,這里的中斷包括外部硬件產(chǎn)生的外部中斷和由芯片內(nèi)部硬件產(chǎn)生的內(nèi)部中斷。由中斷產(chǎn)生的異常和其他異常,從處理方法的角度來看沒有任何區(qū)別,所以我們可以把這些異常統(tǒng)一起來研究。

注意:在正常情況下,一個(gè)普通程序可能會(huì)運(yùn)行在用戶模式和系統(tǒng)模式下,當(dāng)異常發(fā)生時(shí),ARM就會(huì)自動(dòng)切換到異常模式去處理異常,處理完后,又回到用戶模式或系統(tǒng)模式下繼續(xù)之前的工作。因?yàn)槊恳环N模式都包含相應(yīng)的私有資源,因此可以保證在處理異常的時(shí)候,原理的程序環(huán)境不會(huì)被新的環(huán)境破壞,從而保證了系統(tǒng)的正常工作。注意:在正常情況下,一個(gè)普通程序可能會(huì)運(yùn)行在用戶模式和系統(tǒng)模式下,當(dāng)異常發(fā)生時(shí),ARM就會(huì)自動(dòng)切換到異常模式去處理異常,處理完后,又回到用戶模式或系統(tǒng)模式下繼續(xù)之前的工作。因?yàn)槊恳环N模式都包含相應(yīng)的私有資源,因此可以保證在處理異常的時(shí)候,原理的程序環(huán)境不會(huì)被新的環(huán)境破壞,從而保證了系統(tǒng)的正常工作。

好了,關(guān)于ARM的異常和工作模式就介紹在這里,接下來我們來看看ARM每種模式下所擁有的寄存器。

三、ARM每種模式擁有的寄存器

前面我們講到,ARM使用的是RSIC架構(gòu),而RSIC架構(gòu)特點(diǎn)之一就是使用大量寄存器。ARM處理器支持多模式,每種模式都有一些寄存器是公用的,有一些是私有的。

在這里可以簡單總結(jié)一下:

(1)ARM總共有37個(gè)寄存器,其中R0-R7,CPSR,R15(pc)是任何模式下都公用的的寄存器

(2)用戶模式和系統(tǒng)模式使用相同的寄存器R0-R15,CPSR

(3)每種異常模式都有自己的 SPSR,R13,R14

(4)FIQ模式除了公共R0-R7寄存器外,還有自己私有的R8-R12,其他模式?jīng)]有自己私有的R8-R12寄存器

注意:Cortex體系結(jié)構(gòu)下有40個(gè)32-Bits長的寄存器Cortex-A多出3個(gè)寄存器,Monitor 模式 r13_mon , r14_mon, spsr_mon

接下來我們一起來看看這些寄存器都有什么作用吧。

四、ARM中每個(gè)寄存器的用途

(1)R0-R12 這些寄存器我們可以隨便使用,就像我們寫C語言一樣,都需要定義變量,在ARM的世界里,這些就是已經(jīng)定義好的變量,可以直接拿來使用,每個(gè)都可以用來存放一個(gè)32bit的數(shù)哦。

(2)R13,R14這兩個(gè)寄存器就要注意了,前面我們分析過,在所有的異常模式下都有自己的私有的R13,R14,即每種異常模式在操作R13和R14,不會(huì)對(duì)其他模式下R13和R14的值產(chǎn)生影響。

R13我們又叫做sp,也就是我們常說的棧指針。大家C語言的局部變量時(shí)需要入棧的,也就是說不管在那一種模式下,如果我們想調(diào)用C語言程序,那在之前先設(shè)置好對(duì)應(yīng)模式的sp指針。

R14為鏈接寄存器(LR),在結(jié)構(gòu)上有兩個(gè)特殊功能:

(1)在每種模式下,模式自身的R14用于保存子程序返回地址;

(2)當(dāng)發(fā)生異常時(shí),將R14對(duì)應(yīng)的異常模式設(shè)置為異常返回地址(有些異常有一個(gè)小的固定偏移量)。

(3)寄存器R15為程序計(jì)數(shù)器(PC),它指向正在取指的地址。也就說R15保存的是那一條指令的地址,CPU就會(huì)預(yù)取那一條指令。

(4)寄存器CPSR為程序狀態(tài)寄存器,它時(shí)刻記錄CPU的狀態(tài)

通過上圖我們可以知道,CPSR記錄了處理器當(dāng)前工作的模式,F(xiàn)IQ、IRQ中斷是否使能,指令帶條件執(zhí)行結(jié)果等信息。

下面我們?cè)敿?xì)來看看每一位分別代表什么意思:

A.條件代碼標(biāo)志

(N ) 運(yùn)算結(jié)果的高位反映在該標(biāo)志位。對(duì)于有符號(hào)二進(jìn)制補(bǔ)碼,結(jié)果為負(fù)數(shù)時(shí)N=1,結(jié)果為正數(shù)或零時(shí)N=0;

(Z ) 指令結(jié)果為0時(shí)Z=1(通常表示比較結(jié)果“相等”),否則Z=0;

(C ) 當(dāng)進(jìn)行加法運(yùn)算(包括CMN指令),并且高位產(chǎn)生進(jìn)位時(shí)C=1,否則C=0。當(dāng)進(jìn)行減法運(yùn)算(包括CMP 指令),并且高位產(chǎn)生借位時(shí) C=0,否則C=1。對(duì)于結(jié)合移位操作的非加法/減法指令,C為從高位后移出的值,其它指令C通常不變;

(V)進(jìn)行加法/減法運(yùn)算,并且發(fā)生有符號(hào)溢出時(shí)V=1,否則V=0,其它指令V通常不變。

B. 中斷禁止位包括I和F位

當(dāng)I位置位時(shí),IRQ中斷被禁止;

當(dāng)F位置位時(shí),F(xiàn)IQ中斷被禁止。

C.T位反映了正在操作的狀態(tài)

當(dāng)T位置位時(shí),處理器正在Thumb狀態(tài)下運(yùn)行;

當(dāng)T位清零時(shí),處理器正在ARM狀態(tài)下運(yùn)行。

D.模式位

模式位包括M4、M3、M2、M1和M0,這些位決定處理器的操作模式。

10000 User mode ; 10001 FIQ mode; 10011 SVC mode ; 10111

Abort mode ; 11011 Undfined mode;

11111 System mode; 10110 Monitor mode; 10010 IRQ

注意:不是所有模式位的組合都定義了有效的處理器模式,如果使用了錯(cuò)誤的設(shè)置,將引起一個(gè)無法恢復(fù)的錯(cuò)誤

(5)SPSR 程序狀態(tài)保存寄存器

每種異常都有自己的SPSR,在因?yàn)楫惓J录M(jìn)入異常時(shí)它保存CPSR的當(dāng)前值,異常退出時(shí)可通過它恢復(fù)CPSR。

五、Thumb狀態(tài)下的寄存器

ARM狀態(tài)和Thumb狀態(tài)之間寄存器的關(guān)系

Thumb狀態(tài)寄存器與ARM狀態(tài)寄存器有如下的關(guān)系:

Thumb狀態(tài)R0~R7與ARM狀態(tài)R0~R7相同;

Thumb狀態(tài)CPSR和SPSR與ARM狀態(tài)CPSR和SPSR相同;

Thumb狀態(tài)SP映射到ARM狀態(tài)R13;

Thumb狀態(tài)LR映射到ARM狀態(tài)R14;

Thumb狀態(tài)PC映射到ARM狀態(tài)PC(R15)。

注意: 在Thumb狀態(tài)中,高寄存器(R8~R15)不是標(biāo)準(zhǔn)寄存器集的一部分

六、ARM異常處理

前面我們已經(jīng)說過異常了,所謂的異?梢岳斫鉃镃PU的正常執(zhí)行被打斷,而不得不去完成一些特殊的工作。有些同學(xué)可能感覺還是有點(diǎn)抽象,舉個(gè)例子說明一下吧:假如你正在努力的寫代碼,這個(gè)時(shí)候你肚子餓了,必須得解決呀,你就停止寫代碼,去吃飯了,吃完飯你又繼續(xù)寫代碼了,過了一會(huì),你的瞌睡蟲來找你了,必須得睡覺呀,都三天三夜沒睡了。睡完之后,你又開始寫代碼。這里的肚子餓,瞌睡蟲就可以理解成異常情況,必須得處理,處理完后還得恢復(fù)以前的狀態(tài)。

那異常產(chǎn)生的時(shí)候,硬件上會(huì)自動(dòng)做那些事情呢?注意是硬件自動(dòng)做的哦,不需要我們介入的。

當(dāng)一種異常發(fā)生時(shí),硬件就會(huì)自動(dòng)執(zhí)行如下動(dòng)作:

(1)將CPSR保存到相應(yīng)異常模式下的SPSR中

(2)把PC寄存器保存到相應(yīng)異常模式下的LR中

(3)將CPSR設(shè)置成相應(yīng)的異常模式

(4)設(shè)置PC寄存器的值為相應(yīng)處理程序的入口地址

可以總結(jié)如下圖:

細(xì)心的同學(xué)就會(huì)發(fā)現(xiàn),這里的PC寄存器的值不是應(yīng)該指向正在執(zhí)行的指令嗎?為什么圖中卻指向了正在提起的指令,這里的"正在提取"又有什么含義呢?呵呵,這就涉及到流水線的問題了,關(guān)于流水線我們后面會(huì)介紹的。

這里我們還是先搞明白,異常產(chǎn)生的時(shí)候,硬件應(yīng)該將PC值設(shè)為多少呢?要想明白這個(gè)問題,還必須先知道一個(gè)概念"異常向量表"。

ARM一共有5種異常模式,按道理,每一種異常模式都應(yīng)該有一個(gè)唯一的入口地址。這些入口地址彼此相鄰,我們一般稱之為異常向量表。

當(dāng)異常產(chǎn)生的時(shí)候,硬件會(huì)自動(dòng)將PC的值設(shè)置為對(duì)應(yīng)異常量的入口地址。具體異常向量表存放在什么位置,我們可以通過相關(guān)的協(xié)處理指令進(jìn)行設(shè)置就可以了。這個(gè)我們?cè)诤笃诘恼n程中會(huì)講到。

好了到這里,我們已經(jīng)知道了,異常發(fā)生時(shí),硬件都自動(dòng)做了哪些事情。那異常返回的時(shí)候,硬件也會(huì)自動(dòng)做一些事情嗎?呵呵,答案是沒有。異常返回的時(shí)候,程序員必須做如下事情:

異常返回

(1)從 SPSR_<mode>恢復(fù)CPSR

(2)從LR_<mode>恢復(fù)PC

這些事情產(chǎn)生的效果就是恢復(fù)現(xiàn)場哦。

發(fā)表評(píng)論
評(píng)論列表(網(wǎng)友評(píng)論僅供網(wǎng)友表達(dá)個(gè)人看法,并不表明本站同意其觀點(diǎn)或證實(shí)其描述)