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

下載本文檔

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

文檔簡(jiǎn)介

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

2、-Word):半字的長(zhǎng)度為:半字的長(zhǎng)度為16位,與位,與8位位/16位處理器體系結(jié)構(gòu)中字的長(zhǎng)度一致。位處理器體系結(jié)構(gòu)中字的長(zhǎng)度一致。字節(jié)(字節(jié)(Byte):各種處理器體系結(jié)構(gòu)中,字節(jié)):各種處理器體系結(jié)構(gòu)中,字節(jié)的長(zhǎng)度均為的長(zhǎng)度均為8位。位。 從編程的角度看從編程的角度看,ARM微處理器的微處理器的工作狀態(tài)工作狀態(tài)一般有兩種一般有兩種,并可在兩種狀態(tài)之間切換并可在兩種狀態(tài)之間切換:ARM狀態(tài),此時(shí)處理器執(zhí)行狀態(tài),此時(shí)處理器執(zhí)行32位的字對(duì)位的字對(duì)齊的齊的ARM指令;指令; Thumb狀態(tài),此時(shí)處理器執(zhí)行狀態(tài),此時(shí)處理器執(zhí)行16位的、位的、半字對(duì)齊的半字對(duì)齊的Thumb指令。指令。ARM處理器在

3、兩種工作狀態(tài)之間可以處理器在兩種工作狀態(tài)之間可以切換切換:進(jìn)入進(jìn)入Thumb狀態(tài)狀態(tài)。當(dāng)操作數(shù)寄存器的狀態(tài)位當(dāng)操作數(shù)寄存器的狀態(tài)位(位位0)為為1時(shí),執(zhí)行時(shí),執(zhí)行BX指令指令進(jìn)入進(jìn)入Thumb狀態(tài)。如果處理器在狀態(tài)。如果處理器在Thumb狀態(tài)進(jìn)入異常,狀態(tài)進(jìn)入異常,則當(dāng)異常處理則當(dāng)異常處理(IRQ、FIQ、Undef、Abort 和和 SWI)返返回時(shí),自動(dòng)轉(zhuǎn)換到回時(shí),自動(dòng)轉(zhuǎn)換到Thumb狀態(tài)。狀態(tài)。進(jìn)入進(jìn)入ARM狀態(tài)狀態(tài)。當(dāng)操作數(shù)寄存器的狀態(tài)位當(dāng)操作數(shù)寄存器的狀態(tài)位(位位0)為為0時(shí),執(zhí)行時(shí),執(zhí)行BX指令指令進(jìn)入進(jìn)入ARM狀態(tài)。處理器進(jìn)行異常處理狀態(tài)。處理器進(jìn)行異常處理(IRQ、FIQ、Re

4、set、Undef、Abort 和和 SWI ARM狀態(tài)執(zhí)行狀態(tài)執(zhí)行)。在此情況下,。在此情況下,把把PC 放人異常模式鏈接寄存器中。從異常向量地址開放人異常模式鏈接寄存器中。從異常向量地址開始執(zhí)行也可以進(jìn)入始執(zhí)行也可以進(jìn)入ARM狀態(tài)。狀態(tài)。ARM體系結(jié)構(gòu)將存儲(chǔ)器看作是體系結(jié)構(gòu)將存儲(chǔ)器看作是。從零字節(jié)到三字節(jié)放置第一個(gè)存儲(chǔ)的字?jǐn)?shù)從零字節(jié)到三字節(jié)放置第一個(gè)存儲(chǔ)的字?jǐn)?shù)據(jù),從第四個(gè)字節(jié)到第七個(gè)字節(jié)放置第二個(gè)存據(jù),從第四個(gè)字節(jié)到第七個(gè)字節(jié)放置第二個(gè)存儲(chǔ)的字?jǐn)?shù)據(jù),依次排列。儲(chǔ)的字?jǐn)?shù)據(jù),依次排列。作為作為32位的微處理器,位的微處理器,ARM體系結(jié)構(gòu)所支體系結(jié)構(gòu)所支持的最大尋址空間為持的最大尋址空間為4G

5、B。ARM體系結(jié)構(gòu)可以用兩種方法存儲(chǔ)字?jǐn)?shù)據(jù),體系結(jié)構(gòu)可以用兩種方法存儲(chǔ)字?jǐn)?shù)據(jù),稱為稱為大端格式大端格式和和小端格式小端格式,具體說明如下。具體說明如下。 字地址字地址高地址高地址低地址低地址以大端格式存儲(chǔ)字?jǐn)?shù)據(jù)以大端格式存儲(chǔ)字?jǐn)?shù)據(jù)以小端格式存儲(chǔ)字?jǐn)?shù)據(jù)以小端格式存儲(chǔ)字?jǐn)?shù)據(jù)高地址高地址低地址低地址字地址字地址ARM微處理器支持微處理器支持7種運(yùn)行模式,分別為:種運(yùn)行模式,分別為: 用戶模式用戶模式(usr):ARM處理器正常的程序執(zhí)行狀態(tài)。處理器正常的程序執(zhí)行狀態(tài)??焖僦袛嗄J娇焖僦袛嗄J?fiq):用于高速數(shù)據(jù)傳輸或通道處理。用于高速數(shù)據(jù)傳輸或通道處理。 外部中斷模式(外部中斷模式(irq):用

6、于通用的中斷處理。):用于通用的中斷處理。 管理模式(管理模式(svc):操作系統(tǒng)使用的保護(hù)模式,):操作系統(tǒng)使用的保護(hù)模式,系統(tǒng)復(fù)系統(tǒng)復(fù)位后的缺省模式。位后的缺省模式。1.指令終止模式指令終止模式(abt):指令預(yù)取終止時(shí)進(jìn)入該模式。指令預(yù)取終止時(shí)進(jìn)入該模式。 2.數(shù)據(jù)訪問終止模式數(shù)據(jù)訪問終止模式(abt):當(dāng)數(shù)據(jù)訪問終止時(shí)進(jìn)入該:當(dāng)數(shù)據(jù)訪問終止時(shí)進(jìn)入該 模式,可用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)。模式,可用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)。 指令未定義模式指令未定義模式(und):支持硬件協(xié)處理器指令的軟件支持硬件協(xié)處理器指令的軟件 仿真仿真系統(tǒng)模式系統(tǒng)模式(sys):運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。:運(yùn)行具有特權(quán)的

7、操作系統(tǒng)任務(wù)。ARM微處理器的運(yùn)行模式可以通過軟件改微處理器的運(yùn)行模式可以通過軟件改變,也可以通過外部中斷或異常處理改變。變,也可以通過外部中斷或異常處理改變。大多數(shù)的應(yīng)用程序運(yùn)行在用戶模式下,當(dāng)大多數(shù)的應(yīng)用程序運(yùn)行在用戶模式下,當(dāng)處理器運(yùn)行在用戶模式下時(shí),某些被保護(hù)的系處理器運(yùn)行在用戶模式下時(shí),某些被保護(hù)的系統(tǒng)資源是不能被訪問的。統(tǒng)資源是不能被訪問的。除用戶模式以外,其余的所有除用戶模式以外,其余的所有6種模式稱為種模式稱為非用戶模式或特權(quán)模式非用戶模式或特權(quán)模式(Privileged Modes);其中除去用戶模式和系統(tǒng)模式以外的其中除去用戶模式和系統(tǒng)模式以外的5種又種又稱為異常模式稱為異

8、常模式(Exception Modes),常用于處理,常用于處理中斷或異常中斷或異常,以及需要訪問受保護(hù)的系統(tǒng)資源等以及需要訪問受保護(hù)的系統(tǒng)資源等情況。情況。處理器啟動(dòng)時(shí)的模式轉(zhuǎn)換圖處理器啟動(dòng)時(shí)的模式轉(zhuǎn)換圖超級(jí)模式超級(jí)模式(Supervisor)多種特權(quán)模式變化多種特權(quán)模式變化用戶程序的運(yùn)行模式用戶程序的運(yùn)行模式復(fù)位后的缺復(fù)位后的缺省模式省模式主要完成各主要完成各模式的堆棧模式的堆棧設(shè)置,注意設(shè)置,注意不要進(jìn)入用不要進(jìn)入用戶模式戶模式一般為用戶一般為用戶模式模式User處理器模式處理器模式如圖如圖 2-4 所示所示,ARM微處理器共有微處理器共有37個(gè)個(gè)32位寄存器,其中位寄存器,其中31個(gè)為

9、通用寄存器,個(gè)為通用寄存器,6個(gè)個(gè)為狀態(tài)寄存器。但是這些寄存器不能被同為狀態(tài)寄存器。但是這些寄存器不能被同時(shí)訪問,具體哪些寄存器是可編程訪問的,時(shí)訪問,具體哪些寄存器是可編程訪問的,取決于微處理器的工作狀態(tài)及具體的運(yùn)行取決于微處理器的工作狀態(tài)及具體的運(yùn)行模式。但在任何時(shí)候,通用寄存器模式。但在任何時(shí)候,通用寄存器R0R14、程序計(jì)數(shù)器程序計(jì)數(shù)器PC、一個(gè)或兩個(gè)狀態(tài)寄存器都、一個(gè)或兩個(gè)狀態(tài)寄存器都是可訪問的。是可訪問的。. ARM狀態(tài)下的寄存器組織狀態(tài)下的寄存器組織(1) 通用寄存器通用寄存器 (2) 寄存器寄存器R16 通用寄存器包括通用寄存器包括R0R15,可以分為,可以分為3類:類:未分組

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

11、對(duì)于分組寄存器,它們每一次所訪問的物對(duì)于分組寄存器,它們每一次所訪問的物理寄存器與處理器當(dāng)前的運(yùn)行模式有關(guān)。理寄存器與處理器當(dāng)前的運(yùn)行模式有關(guān)。對(duì)于對(duì)于R8R12,每個(gè)寄存器對(duì)應(yīng)兩個(gè)不同的,每個(gè)寄存器對(duì)應(yīng)兩個(gè)不同的物理寄存器,當(dāng)使用物理寄存器,當(dāng)使用fiq模式時(shí),訪問寄存器模式時(shí),訪問寄存器R8_fiqR12_fiq;當(dāng)使用除;當(dāng)使用除fiq模式以外的其他模式以外的其他模式時(shí),訪問寄存器模式時(shí),訪問寄存器R8_usrR12_usr。對(duì)于對(duì)于R13、R14,每個(gè)寄存器對(duì)應(yīng),每個(gè)寄存器對(duì)應(yīng)6個(gè)不同個(gè)不同的物理寄存器,其中一個(gè)是用戶模式與系統(tǒng)模的物理寄存器,其中一個(gè)是用戶模式與系統(tǒng)模式共用,另外式共

12、用,另外5個(gè)物理寄存器對(duì)應(yīng)于其他個(gè)物理寄存器對(duì)應(yīng)于其他5種不種不同的運(yùn)行模式。同的運(yùn)行模式。采用以下記號(hào)來采用以下記號(hào)來區(qū)分區(qū)分不同的物理寄存器:不同的物理寄存器:R13_R14_其中,其中,mode為以下幾種模式之一:為以下幾種模式之一:usr、fiq、irq、svc、abt、und。寄存器寄存器R13在在ARM指令中常用作堆棧指針,指令中常用作堆棧指針,但這只是一種習(xí)慣用法,用戶也可使用其他的但這只是一種習(xí)慣用法,用戶也可使用其他的寄存器作為堆棧指針。而在寄存器作為堆棧指針。而在Thumb指令集中,指令集中,某些指令強(qiáng)制性的要求使用某些指令強(qiáng)制性的要求使用R13作為堆棧指針。作為堆棧指針。

13、由于處理器的每種運(yùn)行模式均有自己獨(dú)由于處理器的每種運(yùn)行模式均有自己獨(dú)立的物理寄存器立的物理寄存器R13,在用戶應(yīng)用程序的初,在用戶應(yīng)用程序的初始化部分,一般都要初始化每種模式下的始化部分,一般都要初始化每種模式下的R13,使其指向該運(yùn)行模式的棧空間,使其指向該運(yùn)行模式的??臻g.這樣,當(dāng)程序的運(yùn)行進(jìn)入異常模式時(shí),這樣,當(dāng)程序的運(yùn)行進(jìn)入異常模式時(shí),可以將需要保護(hù)的寄存器放入可以將需要保護(hù)的寄存器放入R13所指向的所指向的堆棧,而當(dāng)程序從異常模式返回時(shí),則從對(duì)堆棧,而當(dāng)程序從異常模式返回時(shí),則從對(duì)應(yīng)的堆棧中恢復(fù),采用這種方式可以保證異應(yīng)的堆棧中恢復(fù),采用這種方式可以保證異常發(fā)生后程序的正常執(zhí)行。常發(fā)

14、生后程序的正常執(zhí)行。R14也稱做子程序連接寄存器也稱做子程序連接寄存器(Subroutine Link Register)或連接寄存器或連接寄存器LR。當(dāng)執(zhí)行當(dāng)執(zhí)行BL子程序調(diào)用指令時(shí),子程序調(diào)用指令時(shí),R14中得到中得到R15(程序計(jì)數(shù)器程序計(jì)數(shù)器PC)的備份。其他情況下,的備份。其他情況下,R14用作通用寄存器。用作通用寄存器。與之類似,當(dāng)發(fā)生中斷或異常時(shí),對(duì)應(yīng)的與之類似,當(dāng)發(fā)生中斷或異常時(shí),對(duì)應(yīng)的分組寄存器分組寄存器R14_svc、R14_irq、R14_fiq、R14_abt和和R14_und用來保存用來保存R15的返回的返回值。值。寄存器寄存器R14常用于如下的情況:常用于如下的情況

15、:在每一種運(yùn)行模式下,都可用在每一種運(yùn)行模式下,都可用R14保存子程序的返回地址,當(dāng)用保存子程序的返回地址,當(dāng)用BL或或BLX指令調(diào)用子程序時(shí)指令調(diào)用子程序時(shí),將將PC的當(dāng)前值復(fù)制的當(dāng)前值復(fù)制給給R14,執(zhí)行完子程序后,又將,執(zhí)行完子程序后,又將R14的的值復(fù)制回值復(fù)制回PC,即可完成子程序的調(diào)用返,即可完成子程序的調(diào)用返回?;?。以上的描述可用指令完成:以上的描述可用指令完成:執(zhí)行以下任意一條指令:執(zhí)行以下任意一條指令: MOV PC,LR 或或 BX LR在子程序入口處使用以下指令將在子程序入口處使用以下指令將R14存存 入入堆棧:堆棧: STMFD SP! ,LR對(duì)應(yīng)的對(duì)應(yīng)的,使用以下指令

16、可以完成子程序返回:使用以下指令可以完成子程序返回:LDMFD SP! ,PC R14也可作為通用寄存器。也可作為通用寄存器。寄存器寄存器R15用作程序計(jì)數(shù)器用作程序計(jì)數(shù)器(PC)。在。在ARM狀態(tài)下,位狀態(tài)下,位1:0為為0,位,位31:2用于保用于保存存PC;在;在Thumb狀態(tài)下,位狀態(tài)下,位0為為0,位,位31:1用于保存用于保存PC。雖然可以用作通用寄存器,但是有一些雖然可以用作通用寄存器,但是有一些指令在使用指令在使用R15時(shí)有一些特殊限制,若不注時(shí)有一些特殊限制,若不注意,執(zhí)行的結(jié)果將是不可預(yù)料的。意,執(zhí)行的結(jié)果將是不可預(yù)料的。在在ARM狀態(tài)下,狀態(tài)下,PC的的0和和1位是位是0

17、,在,在Thumb狀態(tài)下,狀態(tài)下,PC的的0位是位是0。 R15雖然也可用作通用寄存器,但一般雖然也可用作通用寄存器,但一般不這么使用,因?yàn)閷?duì)不這么使用,因?yàn)閷?duì)R15的使用有一些特殊的使用有一些特殊的限制,當(dāng)違反了這些限制時(shí),程序的執(zhí)的限制,當(dāng)違反了這些限制時(shí),程序的執(zhí)行結(jié)果是未知的。行結(jié)果是未知的。由于由于ARM體系結(jié)構(gòu)采用多級(jí)流水線技術(shù),體系結(jié)構(gòu)采用多級(jí)流水線技術(shù),對(duì)于對(duì)于ARM指令集而言,指令集而言,PC總是指向當(dāng)前指總是指向當(dāng)前指令的下兩條指令的地址,即令的下兩條指令的地址,即PC的值為當(dāng)前的值為當(dāng)前指令的地址值加八個(gè)字節(jié)。指令的地址值加八個(gè)字節(jié)。在在ARM狀態(tài)下,任一時(shí)刻可以訪問以上

18、狀態(tài)下,任一時(shí)刻可以訪問以上所討論的所討論的16個(gè)通用寄存器和個(gè)通用寄存器和12個(gè)狀態(tài)寄存?zhèn)€狀態(tài)寄存器。在非用戶模式器。在非用戶模式(特權(quán)模式特權(quán)模式) 下,則可訪下,則可訪問到特定模式分組寄存器,圖問到特定模式分組寄存器,圖2-4說明在每說明在每一種運(yùn)行模式下,哪一些寄存器是可以訪一種運(yùn)行模式下,哪一些寄存器是可以訪問的。問的。 寄存器寄存器R16用作用作CPSR(Current Program Status Register,當(dāng)前,當(dāng)前程序狀態(tài)寄存器程序狀態(tài)寄存器),CPSR可在任可在任何運(yùn)行模式下被訪問,它包括條件何運(yùn)行模式下被訪問,它包括條件標(biāo)志位、中斷禁止位、當(dāng)前處理器標(biāo)志位、中斷禁

19、止位、當(dāng)前處理器模式標(biāo)志位,以及其他一些相關(guān)的模式標(biāo)志位,以及其他一些相關(guān)的控制和狀態(tài)位??刂坪蜖顟B(tài)位。 每一種運(yùn)行模式下又都有一個(gè)專用每一種運(yùn)行模式下又都有一個(gè)專用的物理狀態(tài)寄存器,稱為的物理狀態(tài)寄存器,稱為SPSR (Saved Program Status Register,備份的程序,備份的程序狀態(tài)寄存器狀態(tài)寄存器),當(dāng)異常發(fā)生時(shí)當(dāng)異常發(fā)生時(shí),SPSR用于保用于保存存CPSR的當(dāng)前值的當(dāng)前值,從異常退出時(shí)則可由從異常退出時(shí)則可由SPSR來恢復(fù)來恢復(fù)CPSR。由于用戶模式和系統(tǒng)模式不屬于異由于用戶模式和系統(tǒng)模式不屬于異常模式,它們沒有常模式,它們沒有SPSR,當(dāng)在這兩種模,當(dāng)在這兩種模式

20、下訪問式下訪問SPSR時(shí),結(jié)果是未知的。時(shí),結(jié)果是未知的。程序狀態(tài)字參見后面說明。程序狀態(tài)字參見后面說明。Thumb狀態(tài)下的寄存器集是狀態(tài)下的寄存器集是ARM狀態(tài)狀態(tài)下寄存器集的一個(gè)子集,程序可以直接訪問下寄存器集的一個(gè)子集,程序可以直接訪問8個(gè)通用寄存器個(gè)通用寄存器(R7R0)、程序計(jì)數(shù)器、程序計(jì)數(shù)器(PC)、堆棧指針堆棧指針(SP)、連接寄存器、連接寄存器(LR)和和CPSR。同時(shí),在每一種特權(quán)模式下都有一組同時(shí),在每一種特權(quán)模式下都有一組SP、LR和和SPSR。圖圖2-4表明表明Thumb狀態(tài)下的寄存器組織。狀態(tài)下的寄存器組織。 (1) Thumb狀態(tài)下的寄存器組織與狀態(tài)下的寄存器組織與

21、ARM狀態(tài)下狀態(tài)下的寄存器組織的關(guān)系的寄存器組織的關(guān)系Thumb狀態(tài)下和狀態(tài)下和ARM狀態(tài)下的狀態(tài)下的R0R7是相同是相同的的Thumb狀態(tài)下和狀態(tài)下和ARM狀態(tài)下的狀態(tài)下的CPSR和所有和所有的的SPSR是相同的是相同的Thumb狀態(tài)下的狀態(tài)下的SP對(duì)應(yīng)于對(duì)應(yīng)于ARM狀態(tài)下的狀態(tài)下的R13Thumb狀態(tài)下的狀態(tài)下的LR對(duì)應(yīng)于對(duì)應(yīng)于ARM狀態(tài)下的狀態(tài)下的R14Thumb狀態(tài)下的程序計(jì)數(shù)器對(duì)應(yīng)于狀態(tài)下的程序計(jì)數(shù)器對(duì)應(yīng)于ARM狀態(tài)狀態(tài)下的下的R15在在Thumb狀態(tài)下,高位寄存器狀態(tài)下,高位寄存器R8R15并不是標(biāo)準(zhǔn)寄存器集的一部分,但可使用匯并不是標(biāo)準(zhǔn)寄存器集的一部分,但可使用匯編語言程序有限制

22、地訪問這些寄存器,將其編語言程序有限制地訪問這些寄存器,將其用作快速的暫存器用作快速的暫存器.使用帶特殊變量的使用帶特殊變量的 MOV指令指令,數(shù)據(jù)可以數(shù)據(jù)可以在低位寄存器和高位寄存器之間進(jìn)行傳送在低位寄存器和高位寄存器之間進(jìn)行傳送,高高位寄存器的值可以使用位寄存器的值可以使用CMP和和ADD指令進(jìn)行指令進(jìn)行比較或加上低位寄存器中的值。比較或加上低位寄存器中的值。ARM體系結(jié)構(gòu)包含一個(gè)當(dāng)前程序狀態(tài)寄存體系結(jié)構(gòu)包含一個(gè)當(dāng)前程序狀態(tài)寄存器器(CPSR)和和5個(gè)備份的程序狀態(tài)寄存器個(gè)備份的程序狀態(tài)寄存器 (SPSRs)。備份的程序狀態(tài)寄存器用來進(jìn)行異常處理,備份的程序狀態(tài)寄存器用來進(jìn)行異常處理,其功

23、能包括:其功能包括:保存保存ALU中的當(dāng)前操作信息。中的當(dāng)前操作信息。控制允許和禁止中斷??刂圃试S和禁止中斷。設(shè)置處理器的運(yùn)行模式。設(shè)置處理器的運(yùn)行模式。程序狀態(tài)寄存器每一位的安排程序狀態(tài)寄存器每一位的安排如圖如圖2-6所所示示.N、Z、C、V均為條件碼標(biāo)志位。它均為條件碼標(biāo)志位。它們的內(nèi)容可被算術(shù)或邏輯運(yùn)算的結(jié)果所們的內(nèi)容可被算術(shù)或邏輯運(yùn)算的結(jié)果所改變,并且可以決定某條指令是否被執(zhí)改變,并且可以決定某條指令是否被執(zhí)行。行。在在ARM狀態(tài)下,絕大多數(shù)的指令都是狀態(tài)下,絕大多數(shù)的指令都是有條件執(zhí)行的。在有條件執(zhí)行的。在Thumb狀態(tài)下僅有狀態(tài)下僅有分支指令是有條件執(zhí)行的。條件碼標(biāo)志分支指令是有條

24、件執(zhí)行的。條件碼標(biāo)志各位的具體含義各位的具體含義如表如表2-1所示所示。 PSR的低的低8位位(包括包括I、F、T和和M4:0)稱為控制稱為控制位,當(dāng)發(fā)生異常時(shí)這些位可以被改變。如果位,當(dāng)發(fā)生異常時(shí)這些位可以被改變。如果處理器運(yùn)行特權(quán)模式,這些位也可以由程序處理器運(yùn)行特權(quán)模式,這些位也可以由程序修改。修改。中斷禁止位中斷禁止位I、FI1 禁止禁止IRQ中斷中斷F1 禁止禁止FIQ中斷中斷T標(biāo)志位:該位反映處理器的運(yùn)行狀態(tài)。標(biāo)志位:該位反映處理器的運(yùn)行狀態(tài)。 對(duì)于對(duì)于ARM體系結(jié)構(gòu)體系結(jié)構(gòu)v5及以上版本的及以上版本的T系列處理器,當(dāng)該位為系列處理器,當(dāng)該位為1時(shí),程序運(yùn)行于時(shí),程序運(yùn)行于Thum

25、b狀態(tài),否則運(yùn)行于狀態(tài),否則運(yùn)行于ARM狀態(tài)。狀態(tài)。對(duì)于對(duì)于ARM體系結(jié)構(gòu)體系結(jié)構(gòu)v5及以上版本的非及以上版本的非T系列處理器,當(dāng)該位為系列處理器,當(dāng)該位為1時(shí),執(zhí)行下一條時(shí),執(zhí)行下一條指令以引起未定義的指令異常;當(dāng)該位為指令以引起未定義的指令異常;當(dāng)該位為0時(shí),表示運(yùn)行于時(shí),表示運(yùn)行于ARM狀態(tài)。狀態(tài)。運(yùn)行模式位運(yùn)行模式位M4:0:M0、M1 、 M2、M3、M4是模式位。這些位決定了處理器是模式位。這些位決定了處理器的運(yùn)行模式。具體含義的運(yùn)行模式。具體含義如表如表2-2所示。所示。由表由表2-2可知,并不是所有的運(yùn)行模可知,并不是所有的運(yùn)行模式位的組合都是有效的,其他的組合結(jié)式位的組合都是

26、有效的,其他的組合結(jié)果會(huì)導(dǎo)致處理器進(jìn)入一個(gè)不可恢復(fù)的狀果會(huì)導(dǎo)致處理器進(jìn)入一個(gè)不可恢復(fù)的狀態(tài)。態(tài)。 保留位保留位PSR中的其余位為保留位,當(dāng)改變中的其余位為保留位,當(dāng)改變PSR中的條件碼標(biāo)志位或者控制位時(shí),中的條件碼標(biāo)志位或者控制位時(shí),保留位不要改變,在程序中也不要使用保留位不要改變,在程序中也不要使用保留位來存儲(chǔ)數(shù)據(jù)。保留位將用于保留位來存儲(chǔ)數(shù)據(jù)。保留位將用于ARM版本的擴(kuò)展。版本的擴(kuò)展。異常異常(exception)由內(nèi)部或外部源產(chǎn)生以引由內(nèi)部或外部源產(chǎn)生以引起處理器處理一個(gè)事件。例如,外部中斷或試圖起處理器處理一個(gè)事件。例如,外部中斷或試圖執(zhí)行未定義指令都會(huì)引起異常。在處理異常之前,執(zhí)行未

27、定義指令都會(huì)引起異常。在處理異常之前,處理器狀態(tài)必須保留,以便在異常處理程序完成處理器狀態(tài)必須保留,以便在異常處理程序完成后,原來的程序能夠重新執(zhí)行。同一時(shí)刻可能出后,原來的程序能夠重新執(zhí)行。同一時(shí)刻可能出現(xiàn)多個(gè)異常?,F(xiàn)多個(gè)異常。 ARM支持支持7種種類型的類型的異常異常。表表2-3列出了異列出了異常的類型以及處理這些異常的處理器模式。異常常的類型以及處理這些異常的處理器模式。異常出現(xiàn)后,強(qiáng)制從異常類型對(duì)應(yīng)的固定存儲(chǔ)器地址出現(xiàn)后,強(qiáng)制從異常類型對(duì)應(yīng)的固定存儲(chǔ)器地址開始執(zhí)行程序。這些固定的地址稱為異常向量開始執(zhí)行程序。這些固定的地址稱為異常向量(Exception Vectors)。當(dāng)異常出現(xiàn)時(shí)

28、,異常模式分組的當(dāng)異常出現(xiàn)時(shí),異常模式分組的R14和和SPSR用于保存用于保存狀態(tài),即狀態(tài),即R14_ = return linkSPSR_ = CPSRCPSR4:0 = exception mode numberCPSR5= 0 *在在ARM狀態(tài)執(zhí)行狀態(tài)執(zhí)行*if = Reset or FIQ then CPSR6 = 1 *禁止快速中斷禁止快速中斷* *否則否則CPSR6不變不變*CPSR7 = 1 *禁止正常中斷禁止正常中斷*/PC = exception vector address當(dāng)處理異常返回時(shí),將當(dāng)處理異常返回時(shí),將SPSR傳送到傳送到CPSR,R14傳送傳送到到PC。這可用兩

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

30、中斷*/CPSR71 /*禁止正常中斷禁止正常中斷*/If high vectors configured thenPC=0 xFFFF0000ElsePC=0 x00000000復(fù)位后復(fù)位后,ARM處理器在禁止中斷的管理模式下處理器在禁止中斷的管理模式下,從地從地址址0 x00000000或或OxFFFF0000開始執(zhí)行指令。開始執(zhí)行指令。當(dāng)當(dāng)ARM處理器執(zhí)行協(xié)處理器指令時(shí),它必須處理器執(zhí)行協(xié)處理器指令時(shí),它必須等待任一外部協(xié)處理器應(yīng)答后,才能真正執(zhí)行這等待任一外部協(xié)處理器應(yīng)答后,才能真正執(zhí)行這條指令。若協(xié)處理器沒有響應(yīng),就會(huì)出現(xiàn)未定義條指令。若協(xié)處理器沒有響應(yīng),就會(huì)出現(xiàn)未定義指令異常。指令

31、異常。若試圖執(zhí)行未定義的指令,也會(huì)出現(xiàn)未定義若試圖執(zhí)行未定義的指令,也會(huì)出現(xiàn)未定義指令異常。指令異常。未定義指令異??捎糜跊]有物理協(xié)處理器未定義指令異常可用于沒有物理協(xié)處理器(硬硬件件)的系統(tǒng)上,對(duì)協(xié)處理器進(jìn)行軟件仿真,或在軟的系統(tǒng)上,對(duì)協(xié)處理器進(jìn)行軟件仿真,或在軟件仿真時(shí)進(jìn)行指令集擴(kuò)展。件仿真時(shí)進(jìn)行指令集擴(kuò)展。當(dāng)未定義指令異常出現(xiàn)時(shí),執(zhí)行下列操作:當(dāng)未定義指令異常出現(xiàn)時(shí),執(zhí)行下列操作: R14_und=address of next instruction after the undefined instructionSPSR_und=CPSRCPSR4:0=0b11011 /*進(jìn)入未定義模

32、式進(jìn)入未定義模式*/CPSR5=0 /*在在ARM狀態(tài)執(zhí)行狀態(tài)執(zhí)行*/*CPSR6不變不變*/CPSR7=1 /*禁止正常中斷禁止正常中斷*/If high vectors configured thenPC=0 xFFFF0004ElsePC=0 x00000004在仿真未定義指令后,使用下列指令返回,即在仿真未定義指令后,使用下列指令返回,即MOVS PC,R14上面的指令恢復(fù)上面的指令恢復(fù)PC(從從R14_und)和和CPSR(從從SPSR_und),并返回到未定義指令后的下一條指令。,并返回到未定義指令后的下一條指令。軟件中斷指令軟件中斷指令SWI(SoftWare Interrupt

33、 lnstruction)進(jìn)入管理模式,以請(qǐng)求特定的管理進(jìn)入管理模式,以請(qǐng)求特定的管理(操作系統(tǒng)操作系統(tǒng))函數(shù)。當(dāng)函數(shù)。當(dāng)執(zhí)行執(zhí)行SWI時(shí),完成下列操作:時(shí),完成下列操作:R14_svc=address of next instruction after the SWI instructionSPSR_svc=CPSRCPSR4:0=0b10011 /*進(jìn)入管理模式進(jìn)入管理模式*/CPSR5=0 /*在在ARM狀態(tài)執(zhí)行狀態(tài)執(zhí)行*/*CPSR6不變不變*/CPSR7=1 /*禁止正常中斷禁止正常中斷*/If high vectors configured thenPC=0 xFFFF0008El

34、esPC=0 x00000008完成完成SWI操作后,使用下列指令操作后,使用下列指令恢復(fù)恢復(fù)PC(從從R14_svc)和和CPSR(從從SPSR_svc),并返回到,并返回到SWI指令指令后的下一條指令,即后的下一條指令,即MOVS PC,R14存儲(chǔ)器系統(tǒng)發(fā)出存儲(chǔ)器中止存儲(chǔ)器系統(tǒng)發(fā)出存儲(chǔ)器中止(abort)信號(hào)。信號(hào)。響應(yīng)取指激活的中止標(biāo)記所取的指令無效。響應(yīng)取指激活的中止標(biāo)記所取的指令無效。若處理器試圖執(zhí)行無效指令,則產(chǎn)生預(yù)若處理器試圖執(zhí)行無效指令,則產(chǎn)生預(yù)取中止異常。取中止異常。若指令未執(zhí)行若指令未執(zhí)行(例如,指令在流水線中發(fā)例如,指令在流水線中發(fā)生了轉(zhuǎn)移生了轉(zhuǎn)移),則不發(fā)生預(yù)取中止。在

35、,則不發(fā)生預(yù)取中止。在ARMv5及以上版本中,執(zhí)行及以上版本中,執(zhí)行BKPT指令也會(huì)產(chǎn)生預(yù)指令也會(huì)產(chǎn)生預(yù)取中止異常。取中止異常。當(dāng)試圖執(zhí)行一條中止的指令時(shí),將執(zhí)行當(dāng)試圖執(zhí)行一條中止的指令時(shí),將執(zhí)行下列操作:下列操作:R14_abt=address of the aborted instruction + 4SPSR_abt=CPSRCPSR4:0=0b10111 /*進(jìn)入中止模式進(jìn)入中止模式*/CPSR5=0 /*在在ARM狀態(tài)執(zhí)行狀態(tài)執(zhí)行*/* CPSR 6不變不變*/CPSR7=1 /*禁止正常中斷禁止正常中斷*/If high vectors configured thenPC=0 xF

36、FFF000CElse PC=0 x0000000C確定中止原因后,使用下面指令從中止模式返回,即確定中止原因后,使用下面指令從中止模式返回,即SUBS PC,R14,#4上面的指令恢復(fù)上面的指令恢復(fù)PC(從從R14_abt)和和CPSR(從從SPSR_abt),并返回到中止的指令。,并返回到中止的指令。存儲(chǔ)器系統(tǒng)發(fā)出存儲(chǔ)器中止信號(hào)。響應(yīng)數(shù)據(jù)存儲(chǔ)器系統(tǒng)發(fā)出存儲(chǔ)器中止信號(hào)。響應(yīng)數(shù)據(jù)訪問訪問(加載或存儲(chǔ)加載或存儲(chǔ))激活的中止標(biāo)記數(shù)據(jù)為無效。激活的中止標(biāo)記數(shù)據(jù)為無效。在下面的任何指令或異常改變?cè)谙旅娴娜魏沃噶罨虍惓8淖僀PU狀態(tài)之前,數(shù)狀態(tài)之前,數(shù)據(jù)中止異常發(fā)生。執(zhí)行下列操作:據(jù)中止異常發(fā)生。執(zhí)行下

37、列操作:R14_abt=address of the aborted instruction + 8SPSR_abt=CPSRCPSR4:0=0b10111 /*進(jìn)入中止模式進(jìn)入中止模式*/CPSR5=0 /*在在ARM狀態(tài)執(zhí)行狀態(tài)執(zhí)行*/* CPSR 6不變不變*/CPSR7=1 /*禁止正常中斷禁止正常中斷*/If high vectors configured thenPC=0 xFFFF0010Else PC=0 x00000010確定中止原因后,使用下列指令從中止模確定中止原因后,使用下列指令從中止模式返回,即式返回,即SUBS PC,R14,#8上面的指令恢復(fù)上面的指令恢復(fù)PC(從

38、從R14_abt)和和CPSR (從從SPSR_abt),并返回重新執(zhí)行中止的指令。,并返回重新執(zhí)行中止的指令。若中止的指令不需要重新執(zhí)行,則使用下面的若中止的指令不需要重新執(zhí)行,則使用下面的指令:指令:SUBS PC,R14,#4通過處理器上的通過處理器上的IRQ輸入引腳,由外輸入引腳,由外部產(chǎn)生部產(chǎn)生IRQ異常。異常。IRQ異常的優(yōu)先級(jí)比異常的優(yōu)先級(jí)比FIQ異常的低。當(dāng)進(jìn)入異常的低。當(dāng)進(jìn)入FIQ處理時(shí),會(huì)屏處理時(shí),會(huì)屏蔽掉蔽掉IRQ異常。異常。若若CPSR的的I位置為位置為1,則禁止,則禁止IRQ中斷。中斷。若若I位清零,則位清零,則ARM在指令執(zhí)行完之前在指令執(zhí)行完之前檢查檢查IRQ輸入

39、。輸入。只能在特權(quán)模式下改變只能在特權(quán)模式下改變I位,當(dāng)檢測(cè)到位,當(dāng)檢測(cè)到IRQ時(shí),執(zhí)行下列操作:時(shí),執(zhí)行下列操作:R14_irq=address of the aborted instruction + 4SPSR_irq=CPSRCPSR4:0=0b10010 /*進(jìn)入進(jìn)入IRQ模式模式*/CPSR5=0 /*在在ARM狀態(tài)執(zhí)行狀態(tài)執(zhí)行*/* CPSR 6不變不變*/CPSR7=1 /*禁止正常中斷禁止正常中斷*/If high vectors configured thenPC=0 xFFFF0018Else PC=0 x00000018使用下面的指令從中斷服務(wù)返回,即使用下面的指令從中

40、斷服務(wù)返回,即SUBS PC,R14,#4上面的指令恢復(fù)上面的指令恢復(fù)PC(從從R14_irq)和和CPSR(從從SPSR_irq),并繼續(xù)執(zhí)行被中斷的程序。,并繼續(xù)執(zhí)行被中斷的程序。通過處理器上的通過處理器上的FIQ輸入引腳,由外部產(chǎn)輸入引腳,由外部產(chǎn)生生FIQ異常。異常。FIQ被設(shè)計(jì)成支持?jǐn)?shù)據(jù)傳送和通被設(shè)計(jì)成支持?jǐn)?shù)據(jù)傳送和通道處理,并有足夠的私有道處理,并有足夠的私有(private)寄存器,寄存器,從而在這樣的應(yīng)用中可避免對(duì)寄存器保存的從而在這樣的應(yīng)用中可避免對(duì)寄存器保存的需求,減少了上下文切換的總開銷。需求,減少了上下文切換的總開銷。當(dāng)當(dāng)CPSR的的F位置位置1時(shí),禁止快速中斷。時(shí),禁

41、止快速中斷。若若F位清零,則位清零,則ARM在執(zhí)行指令時(shí)檢查在執(zhí)行指令時(shí)檢查FIQ輸輸入。只能在特權(quán)模式下改變?nèi)?。只能在特?quán)模式下改變F位,當(dāng)檢測(cè)到位,當(dāng)檢測(cè)到FIQ時(shí)時(shí),執(zhí)行下列操作,即執(zhí)行下列操作,即R14_fiq=address of the aborted instruction + 4SPSR_fiq=CPSRCPSR4:0=0b10001 /*進(jìn)入進(jìn)入FIQ模式模式*/CPSR5=0 /*在在ARM狀態(tài)執(zhí)行狀態(tài)執(zhí)行*/CPSR6=1 /*禁止快速中斷禁止快速中斷*/CPSR7=1 /*禁止正常中斷禁止正常中斷*/If high vectors configured thenPC=0

42、 xFFFF001CElsePC=0 x0000001C 使用下面的指令從中斷服務(wù)返回,使用下面的指令從中斷服務(wù)返回,即即SUBS PC,R14,#4上面的指令恢復(fù)上面的指令恢復(fù)PC(從從R14_fiq)和和CPSR(從從SPSR_fiq),并繼續(xù)執(zhí)行被中,并繼續(xù)執(zhí)行被中斷的程序。斷的程序。FIQ向量放在最后,允許向量放在最后,允許FIQ異常處理程序直接放在地址異常處理程序直接放在地址0 x0000001C或或0 xFFFF001C開始的位開始的位置,而不需要由向量的分支指令執(zhí)行跳置,而不需要由向量的分支指令執(zhí)行跳轉(zhuǎn)到異常處理程序。轉(zhuǎn)到異常處理程序。8. 異常優(yōu)先級(jí)異常優(yōu)先級(jí)異常的優(yōu)先級(jí)如表異

43、常的優(yōu)先級(jí)如表2-4所列。所列。 優(yōu)先級(jí)優(yōu)先級(jí)異常異常優(yōu)先級(jí)優(yōu)先級(jí)異常異常1(最高)(最高)復(fù)位復(fù)位4IRQ2數(shù)據(jù)中止數(shù)據(jù)中止5預(yù)取中止預(yù)取中止3FIQ6(最低)(最低) 未定義指信、未定義指信、SWI一些一些ARM實(shí)現(xiàn)允許異常向量的定位實(shí)現(xiàn)允許異常向量的定位由由32位地址空間低端的正常地址范圍位地址空間低端的正常地址范圍Ox00000000Ox000000lC,移到接近,移到接近于地址空間高端的另一地址范圍于地址空間高端的另一地址范圍0 xFFFF00000 xFFFF00lC。這些改變后的地址位置稱為高端向這些改變后的地址位置稱為高端向量。由量。由IMPLEMENTATION DEFINE

44、D決決定是否支持高端向量。如果支持,則在定是否支持高端向量。如果支持,則在輸入硬件配置時(shí),選擇是使用正常向量輸入硬件配置時(shí),選擇是使用正常向量還是高端向量。還是高端向量。只要正常的程序流程被暫時(shí)停止只要正常的程序流程被暫時(shí)停止,則異常發(fā)生,例如服務(wù)外部的中斷。則異常發(fā)生,例如服務(wù)外部的中斷。在異常被處理之前,必須保存當(dāng)在異常被處理之前,必須保存當(dāng)前的處理器狀態(tài),以便當(dāng)處理程序完前的處理器狀態(tài),以便當(dāng)處理程序完成后,原來的程序能重新開始。成后,原來的程序能重新開始。如果幾種異常同時(shí)發(fā)生,則對(duì)它如果幾種異常同時(shí)發(fā)生,則對(duì)它們按固定的次序處理,可參考異常優(yōu)們按固定的次序處理,可參考異常優(yōu)先級(jí)先級(jí)處理

45、一個(gè)異常時(shí),處理一個(gè)異常時(shí),ARM7TDMI用于:用于:將下一條指令的地址保存在相應(yīng)的將下一條指令的地址保存在相應(yīng)的LR寄存器中。寄存器中。如果異常是從如果異常是從ARM狀態(tài)進(jìn)入,則保存狀態(tài)進(jìn)入,則保存在在LR寄存器中的是下一條指令的地址寄存器中的是下一條指令的地址(當(dāng)當(dāng)前前PC+4或或PC+8,取決于異常,見表,取決于異常,見表2-5)。如果異常是從如果異常是從Thumb狀態(tài)進(jìn)入,則狀態(tài)進(jìn)入,則保存在保存在LR寄存器中的是當(dāng)前寄存器中的是當(dāng)前PC的偏移的偏移值。它能使程序在異常處理返回后從正值。它能使程序在異常處理返回后從正確的位置重新開始。確的位置重新開始。這就意味異常處不需要確定異常是這

46、就意味異常處不需要確定異常是從何種狀態(tài)進(jìn)入的。例如在軟件中斷從何種狀態(tài)進(jìn)入的。例如在軟件中斷(SWI)情況下,情況下,“MOVS PC,R14_svc”,總是返回到下一條指令,而總是返回到下一條指令,而與與SWI是在是在ARM還是還是Thumb狀態(tài)下執(zhí)行狀態(tài)下執(zhí)行的無關(guān)。的無關(guān)。將將CPSR復(fù)制到相應(yīng)的復(fù)制到相應(yīng)的SPSR中。中。迫使迫使CPSR模式位設(shè)置成取決于模式位設(shè)置成取決于異常的值。異常的值。迫使迫使PC從相關(guān)的異常向量中取下從相關(guān)的異常向量中取下一條指令。也可以設(shè)置中斷禁止位一條指令。也可以設(shè)置中斷禁止位來阻止其它無法處理的異常嵌套。來阻止其它無法處理的異常嵌套。如果在異常發(fā)生時(shí)處理

47、器是在如果在異常發(fā)生時(shí)處理器是在Thumb狀態(tài)下,那么當(dāng)用中斷異常狀態(tài)下,那么當(dāng)用中斷異常向量地址加載向量地址加載PC時(shí),自動(dòng)切換進(jìn)入時(shí),自動(dòng)切換進(jìn)入ARM狀態(tài)。狀態(tài)。在完成異常處理后:在完成異常處理后:1.將將LR寄存器的值減去相應(yīng)的偏移量寄存器的值減去相應(yīng)的偏移量(偏偏移量根據(jù)異常不同而不同移量根據(jù)異常不同而不同),送到,送到PC中;中;2.將將SPSR復(fù)制回復(fù)制回CPSR中;中;3.清除中斷禁止位標(biāo)志。清除中斷禁止位標(biāo)志。另外,不需要顯式切換回另外,不需要顯式切換回Thumb狀態(tài),狀態(tài),因?yàn)閺囊驗(yàn)閺腟PSR中將中將CPSR T位自動(dòng)設(shè)置為異位自動(dòng)設(shè)置為異常前的原值。常前的原值。表表2-5

48、中總結(jié)了進(jìn)入異常處理時(shí)保中總結(jié)了進(jìn)入異常處理時(shí)保存在相應(yīng)的存在相應(yīng)的R14寄存器中的寄存器中的PC值,值,以及在退出異常處理時(shí)推薦使用的以及在退出異常處理時(shí)推薦使用的指令指令。1.PC是具有預(yù)取中止的是具有預(yù)取中止的BL/SWI/未定義未定義指令所取的地址;指令所取的地址;2.PC是從是從FIQ或或IRQ取得優(yōu)先權(quán)后不能執(zhí)取得優(yōu)先權(quán)后不能執(zhí)行的指令的地址;行的指令的地址;3.PC是產(chǎn)生數(shù)據(jù)中止的加載或存儲(chǔ)指令是產(chǎn)生數(shù)據(jù)中止的加載或存儲(chǔ)指令的地址;的地址;4.復(fù)位時(shí)保存在復(fù)位時(shí)保存在R14_svc中的值是不可預(yù)中的值是不可預(yù)知的。知的。R0R0R0R0R0R0R1R1R1R1R1R1R2R2R2

49、R2R2R2R3R3R3R3R3R3R4R4R4R4R4R4R5R5R5R5R5R5R6R6R6R6R6R6R7R7R7R7R7R7R8R8-fiqR8R8R8R8R9R9-fiqR9R9R9R9R10R10-fiqR10R10R10R10R11R11-fiqR11R11R11R11R12R12-fiqR12R12R12R12R13R13-fiq13-svc13-adt13-itq13-undR14R14-fiq14-svc14-adt14-itq14-undR15(PC)R15(PC)R15(PC)R15(PC)R15(PC)R15(PC)Systerm&User FIQ Supervist

50、er About IRG UndefinedARM狀態(tài)下的狀態(tài)下的積存器組織積存器組織CPSRCPSRCPSRCPSRCPSRCPSRSPSR-foqSPSR-svcSPSR-abtSPSR-inqSPSR-und返回返回圖圖 2-5 Thumb 狀態(tài)下的寄存器組織狀態(tài)下的寄存器組織 Thumb狀態(tài)狀態(tài)ARM狀狀態(tài)態(tài)返回返回返回返回標(biāo)志位標(biāo)志位含義含義N當(dāng)用兩個(gè)補(bǔ)碼表示的帶符號(hào)數(shù)進(jìn)行運(yùn)算時(shí),當(dāng)用兩個(gè)補(bǔ)碼表示的帶符號(hào)數(shù)進(jìn)行運(yùn)算時(shí),N=1表示運(yùn)算的結(jié)果為負(fù)數(shù);表示運(yùn)算的結(jié)果為負(fù)數(shù);N=0表示運(yùn)算的結(jié)果為表示運(yùn)算的結(jié)果為正數(shù)或零正數(shù)或零ZZ=1表示運(yùn)算的結(jié)果為零;表示運(yùn)算的結(jié)果為零;Z=0表示運(yùn)算的

51、結(jié)果表示運(yùn)算的結(jié)果為非零為非零C可以有可以有4種方法設(shè)置種方法設(shè)置C的值;的值;加法運(yùn)算(包括比較指令加法運(yùn)算(包括比較指令CMP);當(dāng)運(yùn)算結(jié)果產(chǎn));當(dāng)運(yùn)算結(jié)果產(chǎn)生了進(jìn)位時(shí)(無符號(hào)數(shù)溢出),生了進(jìn)位時(shí)(無符號(hào)數(shù)溢出),C=1,否則,否則C=0;減法運(yùn)算(包括比較指令減法運(yùn)算(包括比較指令CMP);當(dāng)運(yùn)算時(shí)產(chǎn)生);當(dāng)運(yùn)算時(shí)產(chǎn)生了借位(無符號(hào)數(shù)溢出),了借位(無符號(hào)數(shù)溢出),C=0,否則,否則C=1;對(duì)于包含移位操作的非加對(duì)于包含移位操作的非加/減運(yùn)算指令,減運(yùn)算指令,C為移出為移出值的最后一位;值的最后一位;對(duì)于其它的非加對(duì)于其它的非加/減運(yùn)算指令,減運(yùn)算指令,C的值通常不改變的值通常不改變條條件件碼碼的的具具體體含含義義N當(dāng)用兩個(gè)補(bǔ)碼表示的帶符號(hào)數(shù)進(jìn)行運(yùn)算時(shí),當(dāng)用兩個(gè)補(bǔ)碼表示的帶符號(hào)數(shù)進(jìn)行運(yùn)算時(shí),N=1表表示運(yùn)算的結(jié)果為負(fù)數(shù);示運(yùn)算的結(jié)果為負(fù)數(shù);N=0表示運(yùn)算的結(jié)果為正數(shù)表示運(yùn)算的結(jié)果為正數(shù)或零或零ZZ=1表示運(yùn)算的結(jié)果為零;表示運(yùn)算的結(jié)果為零;Z=0表示運(yùn)算的結(jié)果為非表示運(yùn)算

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論