ARM微處理器體系結(jié)構(gòu)_第1頁(yè)
ARM微處理器體系結(jié)構(gòu)_第2頁(yè)
ARM微處理器體系結(jié)構(gòu)_第3頁(yè)
ARM微處理器體系結(jié)構(gòu)_第4頁(yè)
ARM微處理器體系結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2.2 ARM微處理器體系結(jié)構(gòu)2.2.1 數(shù)據(jù)類型2.2.2 ARM微處理器的工作狀態(tài)2.2.3 ARM體系結(jié)構(gòu)的存儲(chǔ)器格式2.2.4 理器模式2.2.5 寄存器組織 1.ARM狀態(tài)下的寄存器組織 2.Thumb狀態(tài)下的寄存器組織2.2.6 異常2.2ARM微處理理器體系系結(jié)構(gòu)2.2.1數(shù)數(shù)據(jù)類型型ARM處處理器支支持以下下數(shù)據(jù)類型型:字(Word):字的的長(zhǎng)度為為32位位,而在在8位/16位位處理器器體系結(jié)結(jié)構(gòu)中,字的長(zhǎng)長(zhǎng)度一般般為16位,請(qǐng)請(qǐng)注意區(qū)區(qū)分。半字(Half-Word):半字字的長(zhǎng)度度為16位,與與8位/16位位處理器器體系結(jié)結(jié)構(gòu)中字字的長(zhǎng)度度一致。字節(jié)(Byte):各各種處理理

2、器體系系結(jié)構(gòu)中中,字節(jié)節(jié)的長(zhǎng)度度均為8位。2.2.2ARM微微處理器器的工作作狀態(tài)從編程的的角度看看,ARM微處處理器的的工作狀態(tài)態(tài)一般有兩兩種,并并可在兩兩種狀態(tài)態(tài)之間切切換:ARM狀狀態(tài),此此時(shí)處理理器執(zhí)行行32位位的字對(duì)對(duì)齊的ARM指指令;Thumb狀態(tài)態(tài),此時(shí)時(shí)處理器器執(zhí)行16位的的、半字字對(duì)齊的的Thumb指指令。ARM處處理器在在兩種工工作狀態(tài)態(tài)之間可可以切換:進(jìn)入Thumb狀態(tài)。當(dāng)操作數(shù)數(shù)寄存器器的狀態(tài)態(tài)位(位位0)為1時(shí),執(zhí)執(zhí)行BX指令進(jìn)進(jìn)入Thumb狀態(tài)。如果處處理器在在Thumb狀狀態(tài)進(jìn)入入異常,則當(dāng)異異常處理理(IRQ、FIQ、Undef、Abort和和SWI)返回時(shí)時(shí),

3、自動(dòng)動(dòng)轉(zhuǎn)換到到Thumb狀狀態(tài)。進(jìn)入ARM狀態(tài)態(tài)。當(dāng)操作數(shù)數(shù)寄存器器的狀態(tài)態(tài)位(位位0)為0時(shí),執(zhí)執(zhí)行BX指令進(jìn)進(jìn)入ARM狀態(tài)態(tài)。處理理器進(jìn)行行異常處處理(IRQ、FIQ、Reset、Undef、Abort 和SWIARM狀狀態(tài)執(zhí)行行)。在此此情況下下,把PC放放人異常常模式鏈鏈接寄存存器中。從異常常向量地地址開(kāi)始始執(zhí)行也也可以進(jìn)進(jìn)入ARM狀態(tài)態(tài)。2.2.3ARM體體系結(jié)構(gòu)構(gòu)的存儲(chǔ)儲(chǔ)器格式式ARM體體系結(jié)構(gòu)構(gòu)將存儲(chǔ)儲(chǔ)器看作作是從零零地址開(kāi)開(kāi)始的字字節(jié)的線線性組合合。從零字節(jié)節(jié)到三字字節(jié)放置置第一個(gè)個(gè)存儲(chǔ)的的字?jǐn)?shù)據(jù)據(jù),從第第四個(gè)字字節(jié)到第第七個(gè)字字節(jié)放置置第二個(gè)個(gè)存儲(chǔ)的的字?jǐn)?shù)據(jù)據(jù),依次次排列。作

4、為32位的微微處理器器,ARM體系系結(jié)構(gòu)所所支持的的最大尋尋址空間間為4GB。ARM體體系結(jié)構(gòu)構(gòu)可以用用兩種方方法存儲(chǔ)儲(chǔ)字?jǐn)?shù)據(jù)據(jù),稱為為大端格式式和小端格式式,具體說(shuō)說(shuō)明如下下。 大端端格式:字?jǐn)?shù)據(jù)據(jù)的高字字節(jié)存儲(chǔ)儲(chǔ)在低地地址中,而字?jǐn)?shù)數(shù)據(jù)的低低字節(jié)則則存放在在高地址址中。字地地址高地址低地址以大端格格式存儲(chǔ)儲(chǔ)字?jǐn)?shù)據(jù)據(jù) 小端端格式:與大端端存儲(chǔ)格格式相反反,在小小端存儲(chǔ)儲(chǔ)格式中中,低地地址中存存放的是是字?jǐn)?shù)據(jù)據(jù)的低字字節(jié),高高地址存存放的是是字?jǐn)?shù)據(jù)據(jù)的高字字節(jié)。以小端格格式存儲(chǔ)儲(chǔ)字?jǐn)?shù)據(jù)據(jù)高地址低地址字地地址2.2.4理理器模式式ARM微微處理器器支持7種運(yùn)行行模式,分別為為:用戶模式式(usr

5、):ARM處理器器正常的的程序執(zhí)執(zhí)行狀態(tài)態(tài)??焖僦袛鄶嗄J?fiq):用用于高速速數(shù)據(jù)傳傳輸或通通道處理理。外部中斷斷模式(irq):用用于通用用的中斷斷處理。管理模式式(svc):操作系系統(tǒng)使用用的保護(hù)護(hù)模式,系統(tǒng)復(fù)位位后的缺缺省模式式。1.指令令終止模模式(abt):指令令預(yù)取終終止時(shí)進(jìn)進(jìn)入該模模式。2.數(shù)據(jù)據(jù)訪問(wèn)終終止模式式(abt):當(dāng)數(shù)據(jù)據(jù)訪問(wèn)終終止時(shí)進(jìn)進(jìn)入該模模式,可可用于虛虛擬存儲(chǔ)儲(chǔ)及存儲(chǔ)儲(chǔ)保護(hù)。指令未定定義模式式(und):支持硬硬件協(xié)處處理器指指令的軟軟件仿仿真系統(tǒng)模式式(sys):運(yùn)行具具有特權(quán)權(quán)的操作作系統(tǒng)任任務(wù)。ARM微微處理器器的運(yùn)行行模式可可以通過(guò)過(guò)軟件改改變,也也

6、可以通通過(guò)外部部中斷或或異常處處理改變變。大多數(shù)的的應(yīng)用程程序運(yùn)行行在用戶戶模式下下,當(dāng)處處理器運(yùn)運(yùn)行在用用戶模式式下時(shí),某些被被保護(hù)的的系統(tǒng)資資源是不不能被訪訪問(wèn)的。除用戶模模式以外外,其余余的所有有6種模模式稱為為非用戶戶模式或或特權(quán)模模式(Privileged Modes);其中除去去用戶模模式和系系統(tǒng)模式式以外的的5種又又稱為異異常模式式(ExceptionModes),常用于于處理中中斷或異異常,以以及需要要訪問(wèn)受受保護(hù)的的系統(tǒng)資資源等情情況。處理器啟啟動(dòng)時(shí)的的模式轉(zhuǎn)轉(zhuǎn)換圖超級(jí)模式式(Supervisor)多種特權(quán)權(quán)模式變變化用戶程序序的運(yùn)行行模式復(fù)位后的的缺省模模式主要完成成各模式

7、式的堆棧棧設(shè)置,注意不不要進(jìn)入入用戶模模式一般為用用戶模式式User處理器模模式2.2.5寄寄存器組組織如圖2-4所所示,ARM微處理理器共有有37個(gè)個(gè)32位位寄存器器,其中中31個(gè)個(gè)為通用用寄存器器,6個(gè)個(gè)為狀態(tài)態(tài)寄存器器。但是是這些寄寄存器不不能被同同時(shí)訪問(wèn)問(wèn),具體體哪些寄寄存器是是可編程程訪問(wèn)的的,取決決于微處處理器的的工作狀狀態(tài)及具具體的運(yùn)運(yùn)行模式式。但在在任何時(shí)時(shí)候,通通用寄存存器R0R14、程程序計(jì)數(shù)數(shù)器PC、一個(gè)個(gè)或兩個(gè)個(gè)狀態(tài)寄寄存器都都是可訪訪問(wèn)的。1.ARM狀狀態(tài)下的的寄存器器組織(1)通通用寄寄存器(2)寄寄存器器R16(1)通通用寄寄存器通用寄存存器包括括R0R15,可以

8、以分為3類:未分組寄寄存器R0R7分組寄存存器R8R14程序計(jì)數(shù)數(shù)器PC(R15) 未分分組寄存存器R0R7在所有的的運(yùn)行模模式下,未分組組寄存器器都指向向同一個(gè)個(gè)物理寄寄存器,它們未未被系統(tǒng)統(tǒng)用作特特殊的用用途,因因此,在在中斷或或異常處處理進(jìn)行行運(yùn)行模模式轉(zhuǎn)換換時(shí),由由于不同同的處理理器運(yùn)行行模式均均使用相相同的物物理寄存存器,可可能會(huì)造造成寄存存器中數(shù)數(shù)據(jù)的破破壞,這這一點(diǎn)在在進(jìn)行程程序設(shè)計(jì)計(jì)時(shí)應(yīng)引引起注意意。 分組組寄存器器R8R14對(duì)于分組組寄存器器,它們們每一次次所訪問(wèn)問(wèn)的物理理寄存器器與處理理器當(dāng)前前的運(yùn)行行模式有有關(guān)。對(duì)于R8R12,每每個(gè)寄存存器對(duì)應(yīng)應(yīng)兩個(gè)不不同的物物理寄存存

9、器,當(dāng)當(dāng)使用fiq模模式時(shí),訪問(wèn)寄寄存器R8_fiqR12_fiq;當(dāng)當(dāng)使用除除fiq模式以以外的其其他模式式時(shí),訪訪問(wèn)寄存存器R8_usrR12_usr。對(duì)于R13、R14,每個(gè)寄寄存器對(duì)對(duì)應(yīng)6個(gè)個(gè)不同的的物理寄寄存器,其中一一個(gè)是用用戶模式式與系統(tǒng)統(tǒng)模式共共用,另另外5個(gè)個(gè)物理寄寄存器對(duì)對(duì)應(yīng)于其其他5種種不同的的運(yùn)行模模式。采用以下下記號(hào)來(lái)來(lái)區(qū)分不同的物物理寄存存器:R13_R14_其中,mode為以下下幾種模模式之一一:usr、fiq、irq、svc、abt、und。寄存器R13在在ARM指令中中常用作作堆棧指指針,但但這只是是一種習(xí)習(xí)慣用法法,用戶戶也可使使用其他他的寄存存器作為為堆棧

10、指指針。而而在Thumb指令集集中,某某些指令令強(qiáng)制性性的要求求使用R13作作為堆棧棧指針。由于處理理器的每每種運(yùn)行行模式均均有自己己獨(dú)立的的物理寄寄存器R13,在用戶戶應(yīng)用程程序的初初始化部部分,一一般都要要初始化化每種模模式下的的R13,使其其指向該該運(yùn)行模模式的棧??臻g.這樣,當(dāng)當(dāng)程序的的運(yùn)行進(jìn)進(jìn)入異常常模式時(shí)時(shí),可以以將需要要保護(hù)的的寄存器器放入R13所所指向的的堆棧,而當(dāng)程程序從異異常模式式返回時(shí)時(shí),則從從對(duì)應(yīng)的的堆棧中中恢復(fù),采用這這種方式式可以保保證異常常發(fā)生后后程序的的正常執(zhí)執(zhí)行。R14也也稱做子子程序連連接寄存存器(Subroutine LinkRegister)或連接接寄存

11、器器LR。當(dāng)執(zhí)行BL子程程序調(diào)用用指令時(shí)時(shí),R14中得得到R15(程程序計(jì)數(shù)數(shù)器PC)的備備份。其其他情況況下,R14用用作通用用寄存器器。與之類似似,當(dāng)發(fā)發(fā)生中斷斷或異常常時(shí),對(duì)對(duì)應(yīng)的分分組寄存存器R14_svc、R14_irq、R14_fiq、R14_abt和和R14_und用來(lái)來(lái)保存R15的的返回值值。寄存器R14常常用于如如下的情情況:在每一種種運(yùn)行模模式下,都可用用R14保存子子程序的的返回地地址,當(dāng)當(dāng)用BL或BLX指令令調(diào)用子子程序時(shí)時(shí),將PC的當(dāng)當(dāng)前值復(fù)復(fù)制給R14,執(zhí)行完完子程序序后,又又將R14的值值復(fù)制回回PC,即可完完成子程程序的調(diào)調(diào)用返回回。以上的描描述可用用指令完完成

12、:執(zhí)行以下下任意一一條指令令:MOVPC,LR 或BXLR在子程序序入口處處使用以以下指令令將R14存入入堆堆棧:STMFDSP!,LR對(duì)應(yīng)的,使用以以下指令令可以完完成子程程序返回回:LDMFDSP!,PCR14也也可作為為通用寄寄存器。 程序序計(jì)數(shù)器器PC(R15)寄存器R15用用作程序序計(jì)數(shù)器器(PC)。在在ARM狀態(tài)下下,位1:0為0,位31:2用用于保存存PC;在Thumb狀態(tài)下下,位0為為0,位位31:1用于保保存PC。雖然可以以用作通通用寄存存器,但但是有一一些指令令在使用用R15時(shí)有一一些特殊殊限制,若不注注意,執(zhí)執(zhí)行的結(jié)結(jié)果將是是不可預(yù)預(yù)料的。在ARM狀態(tài)下下,PC的0和和1

13、位是是0,在在Thumb狀狀態(tài)下,PC的的0位是是0。R15雖雖然也可可用作通通用寄存存器,但但一般不不這么使使用,因因?yàn)閷?duì)R15的的使用有有一些特特殊的限限制,當(dāng)當(dāng)違反了了這些限限制時(shí),程序的的執(zhí)行結(jié)結(jié)果是未未知的。由于ARM體系系結(jié)構(gòu)采采用多級(jí)級(jí)流水線線技術(shù),對(duì)于ARM指指令集而而言,PC總是是指向當(dāng)當(dāng)前指令令的下兩兩條指令令的地址址,即PC的值值為當(dāng)前前指令的的地址值值加八個(gè)個(gè)字節(jié)。在ARM狀態(tài)下下,任一一時(shí)刻可可以訪問(wèn)問(wèn)以上所所討論的的16個(gè)個(gè)通用寄寄存器和和12個(gè)狀態(tài)態(tài)寄存器器。在非非用戶模模式(特特權(quán)模式式)下下,則可可訪問(wèn)到到特定模模式分組組寄存器器,圖2-4說(shuō)說(shuō)明在每每一種運(yùn)運(yùn)

14、行模式式下,哪哪一些寄寄存器是是可以訪訪問(wèn)的。(2)寄寄存器器R16寄存器R16用用作CPSR(CurrentProgram StatusRegister,當(dāng)當(dāng)前程序序狀態(tài)寄寄存器),CPSR可可在任何何運(yùn)行模模式下被被訪問(wèn),它包括括條件標(biāo)標(biāo)志位、中斷禁禁止位、當(dāng)前處處理器模模式標(biāo)志志位,以以及其他他一些相相關(guān)的控控制和狀狀態(tài)位。每一種運(yùn)運(yùn)行模式式下又都都有一個(gè)個(gè)專用的的物理狀狀態(tài)寄存存器,稱稱為SPSR(Saved ProgramStatus Register,備份份的程序序狀態(tài)寄寄存器),當(dāng)異異常發(fā)生生時(shí),SPSR用于保保存CPSR的的當(dāng)前值值,從異異常退出出時(shí)則可可由SPSR來(lái)來(lái)恢復(fù)CP

15、SR。由于用戶戶模式和和系統(tǒng)模模式不屬屬于異常常模式,它們沒(méi)沒(méi)有SPSR,當(dāng)在這這兩種模模式下訪訪問(wèn)SPSR時(shí)時(shí),結(jié)果果是未知知的。程序狀態(tài)態(tài)字參見(jiàn)見(jiàn)后面說(shuō)說(shuō)明。2.Thumb狀態(tài)態(tài)下的寄寄存器組組織Thumb狀態(tài)態(tài)下的寄寄存器集集是ARM狀態(tài)態(tài)下寄存存器集的的一個(gè)子子集,程程序可以以直接訪訪問(wèn)8個(gè)個(gè)通用寄寄存器(R7R0)、程序序計(jì)數(shù)器器(PC)、堆堆棧指針針(SP)、連連接寄存存器(LR)和和CPSR。同時(shí),在在每一種種特權(quán)模模式下都都有一組組SP、LR和和SPSR。圖2-4表明Thumb狀態(tài)下下的寄存存器組織織。(1)Thumb狀狀態(tài)下的的寄存器器組織與與ARM狀態(tài)下下的寄存存器組織織的

16、關(guān)系系Thumb狀態(tài)態(tài)下和ARM狀狀態(tài)下的的R0R7是是相同的的Thumb狀態(tài)態(tài)下和ARM狀狀態(tài)下的的CPSR和所所有的SPSR是相同同的Thumb狀態(tài)態(tài)下的SP對(duì)應(yīng)應(yīng)于ARM狀態(tài)態(tài)下的R13Thumb狀態(tài)態(tài)下的LR對(duì)應(yīng)應(yīng)于ARM狀態(tài)態(tài)下的R14Thumb狀態(tài)態(tài)下的程程序計(jì)數(shù)數(shù)器對(duì)應(yīng)應(yīng)于ARM狀態(tài)態(tài)下的R15以上的對(duì)對(duì)應(yīng)關(guān)系系如圖2-5所所示。(2)訪訪問(wèn)THUMB狀態(tài)態(tài)下的高高位寄存存器(Hi-registers)在Thumb狀狀態(tài)下,高位寄寄存器R8R15并并不是標(biāo)標(biāo)準(zhǔn)寄存存器集的的一部分分,但可可使用匯匯編語(yǔ)言言程序有有限制地地訪問(wèn)這這些寄存存器,將將其用作作快速的的暫存器器.使用帶特特

17、殊變量量的MOV指指令,數(shù)數(shù)據(jù)可以以在低位位寄存器器和高位位寄存器器之間進(jìn)進(jìn)行傳送送,高位位寄存器器的值可可以使用用CMP和ADD指令令進(jìn)行比比較或加加上低位位寄存器器中的值值。(3)程程序狀狀態(tài)寄存存器ARM體體系結(jié)構(gòu)構(gòu)包含一一個(gè)當(dāng)前前程序狀狀態(tài)寄存存器(CPSR)和5個(gè)備份份的程序序狀態(tài)寄寄存器(SPSRs)。備份的程程序狀態(tài)態(tài)寄存器器用來(lái)進(jìn)進(jìn)行異常常處理,其功能能包括:保存ALU中的的當(dāng)前操操作信息息??刂圃试S許和禁止止中斷。設(shè)置處理理器的運(yùn)運(yùn)行模式式。程序狀態(tài)態(tài)寄存器器每一位位的安排排如圖2-6所示示. 條件件碼標(biāo)志志(ConditionCode Flags)N、Z、C、V均為條條件碼

18、標(biāo)標(biāo)志位。它們的的內(nèi)容可可被算術(shù)術(shù)或邏輯輯運(yùn)算的的結(jié)果所所改變,并且可可以決定定某條指指令是否否被執(zhí)行行。在ARM狀態(tài)下下,絕大大多數(shù)的的指令都都是有條條件執(zhí)行行的。在在Thumb狀狀態(tài)下僅有分分支指令令是有條條件執(zhí)行行的。條條件碼標(biāo)標(biāo)志各位位的具體體含義如表2-1所示示。 控制制位PSR的的低8位位(包括括I、F、T和和M4:0)稱為為控制位位,當(dāng)發(fā)發(fā)生異常常時(shí)這些些位可以以被改變變。如果果處理器器運(yùn)行特特權(quán)模式式,這些些位也可可以由程程序修改改。中斷禁止止位I、FI1禁禁止止IRQ中斷F1禁禁止止FIQ中斷T標(biāo)志位位:該位位反映處處理器的的運(yùn)行狀狀態(tài)。對(duì)于ARM體系系結(jié)構(gòu)v5及以以上版本本

19、的T系系列處理理器,當(dāng)當(dāng)該位為為1時(shí),程序運(yùn)運(yùn)行于Thumb狀態(tài)態(tài),否則則運(yùn)行于于ARM狀態(tài)。對(duì)于ARM體系系結(jié)構(gòu)v5及以以上版本本的非T系列處處理器,當(dāng)該位位為1時(shí)時(shí),執(zhí)行行下一條條指令以以引起未未定義的的指令異異常;當(dāng)當(dāng)該位為為0時(shí),表示運(yùn)運(yùn)行于ARM狀狀態(tài)。運(yùn)行模式式位M4:0:M0、M1、 M2、M3、M4是模式式位。這這些位決決定了處處理器的的運(yùn)行模模式。具具體含義義如表2-2所示示。由表2-2可知知,并不不是所有有的運(yùn)行行模式位位的組合合都是有有效的,其他的的組合結(jié)結(jié)果會(huì)導(dǎo)導(dǎo)致處理理器進(jìn)入入一個(gè)不不可恢復(fù)復(fù)的狀態(tài)態(tài)。 保留留位PSR中中的其余余位為保保留位,當(dāng)改變變PSR中的條條件

20、碼標(biāo)標(biāo)志位或或者控制制位時(shí),保留位位不要改改變,在在程序中中也不要要使用保保留位來(lái)來(lái)存儲(chǔ)數(shù)數(shù)據(jù)。保保留位將將用于ARM版版本的擴(kuò)擴(kuò)展。2.2.6異異常異常(exception)由內(nèi)內(nèi)部或外外部源產(chǎn)產(chǎn)生以引引起處理理器處理理一個(gè)事事件。例例如,外外部中斷斷或試圖圖執(zhí)行未未定義指指令都會(huì)會(huì)引起異異常。在在處理異異常之前前,處理理器狀態(tài)態(tài)必須保保留,以以便在異異常處理理程序完完成后,原來(lái)的的程序能能夠重新新執(zhí)行。同一時(shí)時(shí)刻可能能出現(xiàn)多多個(gè)異常常。ARM支支持7種類型的異常。表2-3列出了異異常的類類型以及及處理這這些異常常的處理理器模式式。異常常出現(xiàn)后后,強(qiáng)制制從異常常類型對(duì)對(duì)應(yīng)的固固定存儲(chǔ)儲(chǔ)器地址

21、址開(kāi)始執(zhí)執(zhí)行程序序。這些些固定的的地址稱稱為異常常向量(Exception Vectors)。當(dāng)異常出出現(xiàn)時(shí),異常模模式分組組的R14和SPSR用于保保存狀態(tài)態(tài),即R14_= returnlinkSPSR_=CPSRCPSR4:0=exceptionmodenumberCPSR5=0*在在ARM狀態(tài)執(zhí)執(zhí)行*if = Reset or FIQthenCPSR6= 1*禁禁止快速速中斷*否則則CPSR6不變變*CPSR7 =1*禁止止正常中中斷*/PC= exceptionvectoraddress當(dāng)處理異異常返回回時(shí),將將SPSR傳送送到CPSR,R14傳送到到PC。這可用用兩種方方法自動(dòng)動(dòng)完成

22、,即使用帶S位的數(shù)數(shù)據(jù)處理理指令,將PC作為目目的寄存存器;使用帶恢恢復(fù)CPSR的的多加載載指令。復(fù)位位處理器上上一旦有有復(fù)位輸輸入,ARM處處理器立立刻停止止執(zhí)行當(dāng)當(dāng)前指令令。復(fù)位位完成下下列操作作R14_svc=UNPREDICTABLEvalueSPSR_svc=UNPREDICTABLE valueCPSR4:0=0b10011/*進(jìn)入入管理模模式*/CPSR50/*在在ARM狀態(tài)下下執(zhí)行*/CPSR61/*禁禁止快速速中斷*/CPSR71/*禁禁止正常常中斷*/Ifhigh vectorsconfiguredthenPC=0 xFFFF0000ElsePC=0 x00000000復(fù)位

23、后,ARM處理器器在禁止止中斷的的管理模模式下,從地址址0 x00000000或OxFFFF0000開(kāi)始執(zhí)執(zhí)行指令令。未定定義指令令異常當(dāng)ARM處理器器執(zhí)行協(xié)協(xié)處理器器指令時(shí)時(shí),它必必須等待待任一外外部協(xié)處處理器應(yīng)應(yīng)答后,才能真真正執(zhí)行行這條指指令。若若協(xié)處理理器沒(méi)有有響應(yīng),就會(huì)出出現(xiàn)未定定義指令令異常。若試圖執(zhí)執(zhí)行未定定義的指指令,也也會(huì)出現(xiàn)現(xiàn)未定義義指令異異常。未定義指指令異常常可用于于沒(méi)有物物理協(xié)處處理器(硬件)的系統(tǒng)統(tǒng)上,對(duì)對(duì)協(xié)處理理器進(jìn)行行軟件仿仿真,或或在軟件件仿真時(shí)時(shí)進(jìn)行指指令集擴(kuò)擴(kuò)展。當(dāng)未定義義指令異異常出現(xiàn)現(xiàn)時(shí),執(zhí)執(zhí)行下列列操作:R14_und=addressofnextin

24、structionaftertheundefined instructionSPSR_und=CPSRCPSR4:0=0b11011/*進(jìn)入入未定義義模式*/CPSR5=0/*在在ARM狀態(tài)執(zhí)執(zhí)行*/*CPSR6不不變*/CPSR7=1/*禁禁止正常常中斷*/Ifhigh vectorsconfiguredthenPC=0 xFFFF0004ElsePC=0 x00000004在仿真未未定義指指令后,使用下下列指令令返回,即MOVSPC,R14上面的指指令恢復(fù)復(fù)PC(從R14_und)和CPSR(從SPSR_und),并并返回到到未定義義指令后后的下一一條指令令。3軟件件中斷異異常軟件中斷斷指

25、令SWI(SoftWareInterrupt lnstruction)進(jìn)入入管理模模式,以以請(qǐng)求特特定的管管理(操操作系統(tǒng)統(tǒng))函數(shù)數(shù)。當(dāng)執(zhí)執(zhí)行SWI時(shí),完成下下列操作作:R14_svc=addressofnextinstructionaftertheSWI instructionSPSR_svc=CPSRCPSR4:0=0b10011/*進(jìn)入入管理模模式*/CPSR5=0/*在在ARM狀態(tài)執(zhí)執(zhí)行*/*CPSR6不不變*/CPSR7=1/*禁禁止正常常中斷*/Ifhigh vectorsconfiguredthenPC=0 xFFFF0008ElesPC=0 x00000008完成SWI操作作后

26、,使使用下列列指令恢恢復(fù)PC(從R14_svc)和CPSR(從SPSR_svc),并返回回到SWI指令令后的下下一條指指令,即即MOVSPC,R144.預(yù)預(yù)取中止止(取指指令存儲(chǔ)儲(chǔ)器中止止)存儲(chǔ)器系系統(tǒng)發(fā)出出存儲(chǔ)器器中止(abort)信號(hào)。響應(yīng)取取指激活活的中止止標(biāo)記所所取的指指令無(wú)效效。若處理器器試圖執(zhí)執(zhí)行無(wú)效效指令,則產(chǎn)生生預(yù)取中中止異常常。若指令未未執(zhí)行(例如,指令在在流水線線中發(fā)生生了轉(zhuǎn)移移),則則不發(fā)生生預(yù)取中中止。在在ARMv5及及以上版版本中,執(zhí)行BKPT指令也也會(huì)產(chǎn)生生預(yù)取中中止異常常。當(dāng)試圖執(zhí)執(zhí)行一條條中止的的指令時(shí)時(shí),將執(zhí)執(zhí)行下列列操作:R14_abt=addressoft

27、he abortedinstruction+4SPSR_abt=CPSRCPSR4:0=0b10111/*進(jìn)入入中止模模式*/CPSR5=0/*在在ARM狀態(tài)執(zhí)執(zhí)行*/*CPSR 6不變變*/CPSR7=1/*禁禁止正常常中斷*/Ifhigh vectorsconfiguredthenPC=0 xFFFF000CElsePC=0 x0000000C確定中止止原因后后,使用用下面指指令從中中止模式式返回,即SUBSPC,R14,#4上面的指指令恢復(fù)復(fù)PC(從R14_abt)和CPSR(從SPSR_abt),并并返回到到中止的的指令。數(shù)據(jù)據(jù)中止(數(shù)據(jù)訪訪問(wèn)存儲(chǔ)儲(chǔ)器中止止)存儲(chǔ)器系系統(tǒng)發(fā)出出存儲(chǔ)器器

28、中止信信號(hào)。響響應(yīng)數(shù)據(jù)據(jù)訪問(wèn)(加載或或存儲(chǔ))激活的的中止標(biāo)標(biāo)記數(shù)據(jù)據(jù)為無(wú)效效。在下下面的任任何指令令或異常常改變CPU狀狀態(tài)之前前,數(shù)據(jù)據(jù)中止異異常發(fā)生生。執(zhí)行行下列操操作:R14_abt=addressofthe abortedinstruction+8SPSR_abt=CPSRCPSR4:0=0b10111/*進(jìn)入入中止模模式*/CPSR5=0/*在在ARM狀態(tài)執(zhí)執(zhí)行*/*CPSR 6不變變*/CPSR7=1/*禁禁止正常常中斷*/Ifhigh vectorsconfiguredthenPC=0 xFFFF0010ElsePC=0 x00000010確定中止止原因后后,使用用下列指指令從中

29、中止模式式返回,即SUBSPC,R14,#8上面的指指令恢復(fù)復(fù)PC(從R14_abt)和CPSR(從SPSR_abt),并返回回重新執(zhí)執(zhí)行中止止的指令令。若中中止的指指令不需需要重新新執(zhí)行,則使用用下面的的指令:SUBSPC,R14,#4.中中斷請(qǐng)求求(IRQ)異異常通過(guò)處理理器上的的IRQ輸入引引腳,由由外部產(chǎn)產(chǎn)生IRQ異常常。IRQ異常常的優(yōu)先先級(jí)比FIQ異異常的低低。當(dāng)進(jìn)進(jìn)入FIQ處理理時(shí),會(huì)會(huì)屏蔽掉掉IRQ異常。若CPSR的I位置為為1,則則禁止IRQ中中斷。若若I位清清零,則則ARM在指令令執(zhí)行完完之前檢檢查IRQ輸入入。只能在特特權(quán)模式式下改變變I位,當(dāng)檢測(cè)測(cè)到IRQ時(shí),執(zhí)行下下列

30、操作作:R14_irq=addressofthe abortedinstruction+4SPSR_irq=CPSRCPSR4:0=0b10010/*進(jìn)入入IRQ模式*/CPSR5=0/*在在ARM狀態(tài)執(zhí)執(zhí)行*/*CPSR 6不變變*/CPSR7=1/*禁禁止正常常中斷*/Ifhigh vectorsconfiguredthenPC=0 xFFFF0018ElsePC=0 x00000018使用下面面的指令令從中斷斷服務(wù)返返回,即即SUBSPC,R14,#4上面的指指令恢復(fù)復(fù)PC(從R14_irq)和CPSR(從SPSR_irq),并并繼續(xù)執(zhí)執(zhí)行被中中斷的程程序??焖偎僦袛嗾?qǐng)請(qǐng)求(FIQ)異常

31、通過(guò)處理理器上的的FIQ輸入引引腳,由由外部產(chǎn)產(chǎn)生FIQ異常常。FIQ被設(shè)設(shè)計(jì)成支支持?jǐn)?shù)據(jù)據(jù)傳送和和通道處處理,并并有足夠夠的私有有(private)寄存器器,從而而在這樣樣的應(yīng)用用中可避避免對(duì)寄寄存器保保存的需需求,減減少了上上下文切切換的總總開(kāi)銷。當(dāng)CPSR的F位置1時(shí),禁禁止快速速中斷。若F位位清零,則ARM在執(zhí)執(zhí)行指令令時(shí)檢查查FIQ輸入。只能在在特權(quán)模模式下改改變F位位,當(dāng)檢檢測(cè)到FIQ時(shí)時(shí),執(zhí)行行下列操操作,即即R14_fiq=addressofthe abortedinstruction+4SPSR_fiq=CPSRCPSR4:0=0b10001/*進(jìn)入入FIQ模式*/CPSR5

32、=0/*在在ARM狀態(tài)執(zhí)執(zhí)行*/CPSR6=1/*禁禁止快速速中斷*/CPSR7=1/*禁禁止正常常中斷*/Ifhigh vectorsconfiguredthenPC=0 xFFFF001CElsePC=0 x0000001C使用下面面的指令令從中斷斷服務(wù)返返回,即即SUBSPC,R14,#4上面的指指令恢復(fù)復(fù)PC(從R14_fiq)和CPSR(從SPSR_fiq),并并繼續(xù)執(zhí)執(zhí)行被中中斷的程程序。FIQ向向量放在在最后,允許FIQ異異常處理理程序直直接放在在地址0 x0000001C或0 xFFFF001C開(kāi)開(kāi)始的位位置,而而不需要要由向量量的分支支指令執(zhí)執(zhí)行跳轉(zhuǎn)轉(zhuǎn)到異常常處理程程序。8.

33、異異常優(yōu)先先級(jí)異常的優(yōu)優(yōu)先級(jí)如如表2-4所列列。 優(yōu)先級(jí)異常優(yōu)先級(jí)異常1(最高)復(fù)位4IRQ2數(shù)據(jù)中止5預(yù)取中止3FIQ6(最低)未定義指信、SWI9.高高端向量量一些ARM實(shí)現(xiàn)現(xiàn)允許異異常向量量的定位位由32位地址址空間低低端的正正常地址址范圍Ox00000000Ox000000lC,移到接接近于地地址空間間高端的的另一地地址范圍圍0 xFFFF00000 xFFFF00lC。這些改變變后的地地址位置置稱為高高端向量量。由IMPLEMENTATIONDEFINED決定是是否支持持高端向向量。如如果支持持,則在在輸入硬硬件配置置時(shí),選選擇是使使用正常常向量還還是高端端向量。10.異異常的的進(jìn)入

34、和和退出只要正常常的程序序流程被被暫時(shí)停停止,則則異常發(fā)發(fā)生,例例如服務(wù)務(wù)外部的的中斷。在異常被被處理之之前,必必須保存存當(dāng)前的的處理器器狀態(tài),以便當(dāng)當(dāng)處理程程序完成成后,原原來(lái)的程程序能重重新開(kāi)始始。如果幾種種異常同同時(shí)發(fā)生生,則對(duì)對(duì)它們按按固定的的次序處處理,可可參考異異常優(yōu)先先級(jí)(1)進(jìn)進(jìn)入異異常的操操作處理一個(gè)個(gè)異常時(shí)時(shí),ARM7TDMI用于:將下一一條指令令的地址址保存在在相應(yīng)的的LR寄寄存器中中。如果異常常是從ARM狀狀態(tài)進(jìn)入入,則保保存在LR寄存存器中的的是下一一條指令令的地址址(當(dāng)前前PC+4或PC+8,取決決于異常常,見(jiàn)表表2-5)。如果異常常是從Thumb狀態(tài)態(tài)進(jìn)入,則保存

35、存在LR寄存器器中的是是當(dāng)前PC的偏偏移值。它能使使程序在在異常處處理返回回后從正正確的位位置重新新開(kāi)始。這就意味味異常處處不需要要確定異異常是從從何種狀狀態(tài)進(jìn)入入的。例例如在軟軟件中斷斷(SWI)情情況下,“MOVSPC,R14_svc”,總是返返回到下下一條指指令,而而與SWI是在在ARM還是Thumb狀態(tài)態(tài)下執(zhí)行行的無(wú)關(guān)關(guān)。將CPSR復(fù)復(fù)制到相相應(yīng)的SPSR中。迫使CPSR模式位位設(shè)置成成取決于于異常的的值。迫使PC從相相關(guān)的異異常向量量中取下下一條指指令。也也可以設(shè)設(shè)置中斷斷禁止位位來(lái)阻止止其它無(wú)無(wú)法處理理的異常常嵌套。如果在異異常發(fā)生生時(shí)處理理器是在在Thumb狀狀態(tài)下,那么當(dāng)當(dāng)用中

36、斷斷異常向向量地址址加載PC時(shí),自動(dòng)切切換進(jìn)入入ARM狀態(tài)。(2)退退出異異常的操操作在完成異異常處理理后:將LR寄寄存器的的值減去去相應(yīng)的的偏移量量(偏移移量根據(jù)據(jù)異常不不同而不不同),送到PC中;將SPSR復(fù)制制回CPSR中中;清除中斷斷禁止位位標(biāo)志。另外,不不需要顯顯式切換換回Thumb狀態(tài),因?yàn)閺膹腟PSR中將將CPSRT位自動(dòng)動(dòng)設(shè)置為為異常前前的原值值。(3)進(jìn)進(jìn)入和和退出異異常小結(jié)結(jié)表2-5中總結(jié)了了進(jìn)入異異常處理理時(shí)保存存在相應(yīng)應(yīng)的R14寄存存器中的的PC值值,以及及在退出出異常處處理時(shí)推推薦使用用的指令令。PC是具具有預(yù)取取中止的的BL/SWI/未定定義指令令所取的的地址;PC

37、是從從FIQ或IRQ取得得優(yōu)先權(quán)權(quán)后不能能執(zhí)行的的指令的的地址;PC是產(chǎn)產(chǎn)生數(shù)據(jù)據(jù)中止的的加載或或存儲(chǔ)指指令的地地址;復(fù)位時(shí)保保存在R14_svc中的值值是不可可預(yù)知的的。R0R0R0R0R0R0R1R1R1R1R1R1R2R2R2R2R2R2R3R3R3R3R3R3R4R4R4R4R4R4R5R5R5R5R5R5R6R6R6R6R6R6R7R7R7R7R7R7R8R8-fiqR8R8R8R8R9R9-fiqR9R9R9R9R10R10-fiqR10R10R10R10R11R11-fiqR11R11R11R11R12R12-fiqR12R12R12R12R13R13-fiq13-svc13-a

38、dt13-itq13-undR14R14-fiq14-svc14-adt14-itq14-undR15(PC)R15(PC)R15(PC)R15(PC)R15(PC)R15(PC)Systerm&UserFIQSupervisterAboutIRGUndefinedARM狀狀態(tài)下的的積存器器組織CPSRCPSRCPSRCPSRCPSRCPSRSPSR-foqSPSR-svcSPSR-abtSPSR-inqSPSR-und返回圖 2-5Thumb狀狀態(tài)下的的寄存器器組織 R0 R1 R2 R3 R4 R5 R6 R7Stack Point (SP)Link Register (LR)Progra

39、m Counter (PC) CPSR SPSR RO R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12Stack Point (R13)Link Register (R14)Program Counter (R15) CPSR SPSRThumb狀態(tài)態(tài)ARM狀狀態(tài)返回返回標(biāo)志位含義N當(dāng)用兩個(gè)補(bǔ)碼表示的帶符號(hào)數(shù)進(jìn)行運(yùn)算時(shí),N=1表示運(yùn)算的結(jié)果為負(fù)數(shù);N=0表示運(yùn)算的結(jié)果為正數(shù)或零ZZ=1表示運(yùn)算的結(jié)果為零;Z=0表示運(yùn)算的結(jié)果為非零C可以有4種方法設(shè)置C的值;加法運(yùn)算(包括比較指令CMP);當(dāng)運(yùn)算結(jié)果產(chǎn)生了進(jìn)位時(shí)(無(wú)符號(hào)數(shù)溢出),C=1,否則C=0;減法運(yùn)算(包括比較指令CMP);當(dāng)運(yùn)算時(shí)產(chǎn)生了借位(無(wú)符號(hào)數(shù)溢出),C=0,否則C=1;對(duì)于包含移位操作的非加/減運(yùn)算指令,C為移出值的最后一位;對(duì)于其它的非加/減運(yùn)算指令,C的值通常不改變條件碼的的具體含含義N當(dāng)用兩個(gè)補(bǔ)碼表示的帶符號(hào)數(shù)進(jìn)行運(yùn)算時(shí),N=1表示運(yùn)算的結(jié)果為負(fù)數(shù);N=0表示運(yùn)算的結(jié)果為正數(shù)或零ZZ=1表示運(yùn)算的結(jié)果為零;Z=0表示運(yùn)算的結(jié)果為非零C可以有4種方法設(shè)置C的值;加法運(yùn)算(包括比較指令CMP);當(dāng)運(yùn)算結(jié)果產(chǎn)生了進(jìn)位時(shí)(無(wú)符號(hào)數(shù)溢出),C=1,否則C=0;減法運(yùn)算(包括比較指令CMP);當(dāng)運(yùn)算時(shí)產(chǎn)生了借位(無(wú)符號(hào)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論