




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2.2ARM微處理器體系結(jié)構(gòu)
2.2.1數(shù)據(jù)類型
2.2.2ARM微處理器的工作狀態(tài)
2.2.3ARM體系結(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ù)據(jù)類型ARM處理器支持以下數(shù)據(jù)類型:字(Word):字的長度為32位,而在8位/16位處理器體系結(jié)構(gòu)中,字的長度一般為16位,請(qǐng)注意區(qū)分。半字(Half-Word):半字的長度為16位,與8位/16位處理器體系結(jié)構(gòu)中字的長度一致。字節(jié)(Byte):各種處理器體系結(jié)構(gòu)中,字節(jié)的長度均為8位。
2.2.2ARM微處理器的工作狀態(tài)
從編程的角度看,ARM微處理器的工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:ARM狀態(tài),此時(shí)處理器執(zhí)行32位的字對(duì)齊的ARM指令;Thumb狀態(tài),此時(shí)處理器執(zhí)行16位的、半字對(duì)齊的Thumb指令。ARM處理器在兩種工作狀態(tài)之間可以切換:進(jìn)入Thumb狀態(tài)。當(dāng)操作數(shù)寄存器的狀態(tài)位(位[0])為1時(shí),執(zhí)行BX指令進(jìn)入Thumb狀態(tài)。如果處理器在Thumb狀態(tài)進(jìn)入異常,則當(dāng)異常處理(IRQ、FIQ、Undef、Abort和SWI)返回時(shí),自動(dòng)轉(zhuǎn)換到Thumb狀態(tài)。進(jìn)入ARM狀態(tài)。當(dāng)操作數(shù)寄存器的狀態(tài)位(位[0])為0時(shí),執(zhí)行BX指令進(jìn)入ARM狀態(tài)。處理器進(jìn)行異常處理(IRQ、FIQ、Reset、Undef、Abort和SWIARM狀態(tài)執(zhí)行)。在此情況下,把PC放人異常模式鏈接寄存器中。從異常向量地址開始執(zhí)行也可以進(jìn)入ARM狀態(tài)。2.2.3ARM體系結(jié)構(gòu)的存儲(chǔ)器格式ARM體系結(jié)構(gòu)將存儲(chǔ)器看作是從零地址開始的字節(jié)的線性組合。從零字節(jié)到三字節(jié)放置第一個(gè)存儲(chǔ)的字?jǐn)?shù)據(jù),從第四個(gè)字節(jié)到第七個(gè)字節(jié)放置第二個(gè)存儲(chǔ)的字?jǐn)?shù)據(jù),依次排列。作為32位的微處理器,ARM體系結(jié)構(gòu)所支持的最大尋址空間為4GB。ARM體系結(jié)構(gòu)可以用兩種方法存儲(chǔ)字?jǐn)?shù)據(jù),稱為大端格式和小端格式,具體說明如下?!舸蠖烁袷剑鹤?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中,而字?jǐn)?shù)據(jù)的低字節(jié)則存放在高地址中。891011456701233124231615870字地址高地址低地址以大端格式存儲(chǔ)字?jǐn)?shù)據(jù) ◆小端格式:與大端存儲(chǔ)格式相反,在小端存儲(chǔ)格式中,低地址中存放的是字?jǐn)?shù)據(jù)的低字節(jié),高地址存放的是字?jǐn)?shù)據(jù)的高字節(jié)。11109876543210以小端格式存儲(chǔ)字?jǐn)?shù)據(jù)高地址低地址3124231615870字地址8402.2.4理器模式 ARM微處理器支持7種運(yùn)行模式,分別為:用戶模式(usr):ARM處理器正常的程序執(zhí)行狀態(tài)??焖僦袛嗄J?fiq):用于高速數(shù)據(jù)傳輸或通道處理。外部中斷模式(irq):用于通用的中斷處理。管理模式(svc):操作系統(tǒng)使用的保護(hù)模式,系統(tǒng)復(fù)位后的缺省模式。1.指令終止模式(abt):指令預(yù)取終止時(shí)進(jìn)入該模式。2.數(shù)據(jù)訪問終止模式(abt):當(dāng)數(shù)據(jù)訪問終止時(shí)進(jìn)入該 模式,可用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)。指令未定義模式(und):支持硬件協(xié)處理器指令的軟件 仿真系統(tǒng)模式(sys):運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。ARM微處理器的運(yùn)行模式可以通過軟件改變,也可以通過外部中斷或異常處理改變。大多數(shù)的應(yīng)用程序運(yùn)行在用戶模式下,當(dāng)處理器運(yùn)行在用戶模式下時(shí),某些被保護(hù)的系統(tǒng)資源是不能被訪問的。除用戶模式以外,其余的所有6種模式稱為非用戶模式或特權(quán)模式(PrivilegedModes);其中除去用戶模式和系統(tǒng)模式以外的5種又稱為異常模式(ExceptionModes),常用于處理中斷或異常,以及需要訪問受保護(hù)的系統(tǒng)資源等情況。處理器啟動(dòng)時(shí)的模式轉(zhuǎn)換圖超級(jí)模式(Supervisor)多種特權(quán)模式變化用戶程序的運(yùn)行模式復(fù)位后的缺省模式主要完成各模式的堆棧設(shè)置,注意不要進(jìn)入用戶模式一般為用戶模式User處理器模式寄寄存器組織織如圖2-4所示,ARM微處處理器共有37個(gè)32位位寄存器,其其中31個(gè)為為通用寄存器器,6個(gè)為狀狀態(tài)寄存器。。但是這些寄寄存器不能被被同時(shí)訪問,,具體哪些寄寄存器是可編編程訪問的,,取決于微處處理器的工作作狀態(tài)及具體體的運(yùn)行模式式。但在任何何時(shí)候,通用用寄存器R0~R14、、程序計(jì)數(shù)器器PC、一個(gè)個(gè)或兩個(gè)狀態(tài)態(tài)寄存器都是是可訪問的。。1.ARM狀態(tài)下的寄寄存器組織(1)通用用寄存器.(2)寄存存器R16(1)通用用寄存器.通用寄存器包包括R0~R15,可以以分為3類::未分組寄存器器R0~R7分組寄存器R8~R14程序計(jì)數(shù)器PC(R15)①未分組寄寄存器R0~R7在所有的運(yùn)行行模式下,未未分組寄存器器都指向同一一個(gè)物理寄存存器,它們未未被系統(tǒng)用作作特殊的用途途,因此,在在中斷或異常常處理進(jìn)行運(yùn)運(yùn)行模式轉(zhuǎn)換換時(shí),由于不不同的處理器器運(yùn)行模式均均使用相同的的物理寄存器器,可能會(huì)造造成寄存器中中數(shù)據(jù)的破壞壞,這一點(diǎn)在在進(jìn)行程序設(shè)設(shè)計(jì)時(shí)應(yīng)引起起注意。②分組寄存存器R8~R14對(duì)于分組寄存存器,它們每每一次所訪問問的物理寄存存器與處理器器當(dāng)前的運(yùn)行行模式有關(guān)。。對(duì)于R8~R12,每個(gè)個(gè)寄存器對(duì)應(yīng)應(yīng)兩個(gè)不同的的物理寄存器器,當(dāng)使用fiq模式時(shí)時(shí),訪問寄存存器R8_fiq~R12_fiq;當(dāng)使用除除fiq模式式以外的其他他模式時(shí),訪訪問寄存器R8_usr~R12_usr。對(duì)于R13、、R14,每每個(gè)寄存器對(duì)對(duì)應(yīng)6個(gè)不同同的物理寄存存器,其中一一個(gè)是用戶模模式與系統(tǒng)模模式共用,另另外5個(gè)物理理寄存器對(duì)應(yīng)應(yīng)于其他5種種不同的運(yùn)行行模式。采用以下記號(hào)號(hào)來區(qū)分不同的物理寄寄存器:R13_<mode>R14_<mode>其中,mode為以下幾幾種模式之一一:usr、、fiq、irq、svc、abt、und。。寄存器R13在ARM指指令中常用作作堆棧指針,,但這只是一一種習(xí)慣用法法,用戶也可可使用其他的的寄存器作為為堆棧指針。。而在Thumb指令集集中,某些指指令強(qiáng)制性的的要求使用R13作為堆堆棧指針。由于處理器的的每種運(yùn)行模模式均有自己己獨(dú)立的物理理寄存器R13,在用戶戶應(yīng)用程序的的初始化部分分,一般都要要初始化每種種模式下的R13,使其其指向該運(yùn)行行模式的棧空空間.這樣,當(dāng)程序序的運(yùn)行進(jìn)入入異常模式時(shí)時(shí),可以將需需要保護(hù)的寄寄存器放入R13所指向向的堆棧,而而當(dāng)程序從異異常模式返回回時(shí),則從對(duì)對(duì)應(yīng)的堆棧中中恢復(fù),采用用這種方式可可以保證異常常發(fā)生后程序序的正常執(zhí)行行。R14也稱稱做子程序序連接寄存存器(SubroutineLinkRegister)或或連接寄存存器LR。。當(dāng)執(zhí)行BL子程序調(diào)調(diào)用指令時(shí)時(shí),R14中得到R15(程程序計(jì)數(shù)器器PC)的的備份。其其他情況下下,R14用作通用用寄存器。。與之類似,,當(dāng)發(fā)生中中斷或異常常時(shí),對(duì)應(yīng)應(yīng)的分組寄寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用來保保存R15的返回值值。寄存器R14常用于于如下的情情況:在每一種運(yùn)運(yùn)行模式下下,都可用用R14保保存子程序序的返回地地址,當(dāng)用用BL或BLX指令令調(diào)用子程程序時(shí),將將PC的當(dāng)當(dāng)前值復(fù)制制給R14,執(zhí)行完完子程序后后,又將R14的值值復(fù)制回PC,即可可完成子程程序的調(diào)用用返回。以上的描述述可用指令令完成:執(zhí)行以下任任意一條指指令:MOVPC,LR或BXLR在子程序入入口處使用用以下指令令將R14存入入堆棧:STMFDSP!,{<Regs>,LR}對(duì)應(yīng)的,使使用以下指指令可以完完成子程序序返回:LDMFDSP!,{<Regs>,PC}R14也可可作為通用用寄存器。。③程序計(jì)計(jì)數(shù)器PC(R15)寄存器R15用作程程序計(jì)數(shù)器器(PC)。在ARM狀態(tài)下下,位[1:0]為為0,位[31:2]用于保保存PC;;在Thumb狀態(tài)態(tài)下,位[0]為0,位[31:1]用于保存存PC。雖然可以用用作通用寄寄存器,但但是有一些些指令在使使用R15時(shí)有一些些特殊限制制,若不注注意,執(zhí)行行的結(jié)果將將是不可預(yù)預(yù)料的。在ARM狀狀態(tài)下,PC的0和和1位是0,在Thumb狀狀態(tài)下,PC的0位位是0。R15雖然也也可用作通用用寄存器,但但一般不這么么使用,因?yàn)闉閷?duì)R15的的使用有一些些特殊的限制制,當(dāng)違反了了這些限制時(shí)時(shí),程序的執(zhí)執(zhí)行結(jié)果是未未知的。由于ARM體體系結(jié)構(gòu)采用用多級(jí)流水線線技術(shù),對(duì)于于ARM指令令集而言,PC總是指向向當(dāng)前指令的的下兩條指令令的地址,即即PC的值為為當(dāng)前指令的的地址值加八八個(gè)字節(jié)。在ARM狀態(tài)態(tài)下,任一時(shí)時(shí)刻可以訪問問以上所討論論的16個(gè)通通用寄存器和和1~2個(gè)狀狀態(tài)寄存器。。在非用戶模模式(特權(quán)模模式)下,,則可訪問到到特定模式分分組寄存器,,圖2-4說說明在每一種種運(yùn)行模式下下,哪一些寄寄存器是可以以訪問的。(2)寄存存器R16寄存器R16用作CPSR(CurrentProgramStatusRegister,當(dāng)當(dāng)前程序狀態(tài)態(tài)寄存器),,CPSR可可在任何運(yùn)行行模式下被訪訪問,它包括括條件標(biāo)志位位、中斷禁止止位、當(dāng)前處處理器模式標(biāo)標(biāo)志位,以及及其他一些相相關(guān)的控制和和狀態(tài)位。每一種運(yùn)行模模式下又都有有一個(gè)專用的的物理狀態(tài)寄寄存器,稱為為SPSR(SavedProgramStatusRegister,備份的程程序狀態(tài)寄存存器),當(dāng)異異常發(fā)生時(shí),SPSR用用于保存CPSR的當(dāng)前前值,從異常常退出時(shí)則可可由SPSR來恢復(fù)CPSR。由于用戶模式式和系統(tǒng)模式式不屬于異常常模式,它們們沒有SPSR,當(dāng)在這這兩種模式下下訪問SPSR時(shí),結(jié)果果是未知的。。程序狀態(tài)字參參見后面說明明。2.Thumb狀態(tài)下下的寄存器組組織Thumb狀狀態(tài)下的寄存存器集是ARM狀態(tài)下寄寄存器集的一一個(gè)子集,程程序可以直接接訪問8個(gè)通通用寄存器(R7~R0)、程序計(jì)計(jì)數(shù)器(PC)、堆棧指指針(SP)、連接寄存存器(LR)和CPSR。同時(shí),在每一一種特權(quán)模式式下都有一組組SP、LR和SPSR。圖2-4表明Thumb狀態(tài)下的的寄存器組織織。(1)Thumb狀態(tài)態(tài)下的寄存器器組織與ARM狀態(tài)下的的寄存器組織織的關(guān)系Thumb狀狀態(tài)下和ARM狀態(tài)下的的R0~R7是相同的Thumb狀狀態(tài)下和ARM狀態(tài)下的的CPSR和和所有的SPSR是相同同的Thumb狀狀態(tài)下的SP對(duì)應(yīng)于ARM狀態(tài)下的的R13Thumb狀狀態(tài)下的LR對(duì)應(yīng)于ARM狀態(tài)下的的R14Thumb狀狀態(tài)下的程序序計(jì)數(shù)器對(duì)應(yīng)應(yīng)于ARM狀狀態(tài)下的R15以上的對(duì)應(yīng)關(guān)關(guān)系如圖2-5所示。(2)訪問問THUMB狀態(tài)下的高高位寄存器(Hi-registers)在Thumb狀態(tài)下,高高位寄存器R8~R15并不是標(biāo)準(zhǔn)準(zhǔn)寄存器集的的一部分,但但可使用匯編編語言程序有有限制地訪問問這些寄存器器,將其用作作快速的暫存存器.使用帶特殊變變量的MOV指令,數(shù)數(shù)據(jù)可以在低低位寄存器和和高位寄存器器之間進(jìn)行傳傳送,高位寄寄存器的值可可以使用CMP和ADD指令進(jìn)行比比較或加上低低位寄存器中中的值。(3)程序序狀態(tài)寄存器器ARM體系結(jié)結(jié)構(gòu)包含一個(gè)個(gè)當(dāng)前程序狀狀態(tài)寄存器(CPSR)和5個(gè)備份份的程序狀態(tài)態(tài)寄存器(SPSRs)。備份的程序狀狀態(tài)寄存器用用來進(jìn)行異常常處理,其功功能包括:保存ALU中中的當(dāng)前操作作信息。控制允許和禁禁止中斷。設(shè)置處理器的的運(yùn)行模式。。程序狀態(tài)寄存存器每一位的的安排如圖2-6所所示.①條件碼標(biāo)標(biāo)志(ConditionCodeFlags)N、Z、C、、V均為條件件碼標(biāo)志位。。它們的內(nèi)容容可被算術(shù)或或邏輯運(yùn)算的的結(jié)果所改變變,并且可以以決定某條指指令是否被執(zhí)執(zhí)行。在ARM狀態(tài)態(tài)下,絕大多多數(shù)的指令都都是有條件執(zhí)執(zhí)行的。在Thumb狀狀態(tài)下.僅有有分支指令是是有條件執(zhí)行行的。條件碼碼標(biāo)志各位的的具體含義如表2-1所所示。②控制位PSR的低8位(包括I、F、T和和M[4:0])稱為控控制位,當(dāng)發(fā)發(fā)生異常時(shí)這這些位可以被被改變。如果果處理器運(yùn)行行特權(quán)模式,,這些位也可可以由程序修修改。中斷禁止位I、FI=1禁禁止IRQ中中斷F=1禁禁止FIQ中中斷T標(biāo)志位:該該位反映處理理器的運(yùn)行狀狀態(tài)。對(duì)于ARM體體系結(jié)構(gòu)v5及以上版本本的T系列處處理器,當(dāng)該該位為1時(shí),,程序運(yùn)行于于Thumb狀態(tài),否則則運(yùn)行于ARM狀態(tài)。對(duì)于ARM體體系結(jié)構(gòu)v5及以上版本本的非T系列列處理器,當(dāng)當(dāng)該位為1時(shí)時(shí),執(zhí)行下一一條指令以引引起未定義的的指令異常;;當(dāng)該位為0時(shí),表示運(yùn)運(yùn)行于ARM狀態(tài)。運(yùn)行模式位M[4:0]:M0、M1、M2、M3、、M4是模式式位。這些位位決定了處理理器的運(yùn)行模模式。具體含含義如表2-2所所示。由表2-2可可知,并不是是所有的運(yùn)行行模式位的組組合都是有效效的,其他的的組合結(jié)果會(huì)會(huì)導(dǎo)致處理器器進(jìn)入一個(gè)不不可恢復(fù)的狀狀態(tài)。③保留位PSR中的其其余位為保留留位,當(dāng)改變變PSR中的的條件碼標(biāo)志志位或者控制制位時(shí),保留留位不要改變變,在程序中中也不要使用用保留位來存存儲(chǔ)數(shù)據(jù)。保保留位將用于于ARM版本本的擴(kuò)展。異異常異常(exception)由內(nèi)部或外外部源產(chǎn)生以以引起處理器器處理一個(gè)事事件。例如,,外部中斷或或試圖執(zhí)行未未定義指令都都會(huì)引起異常常。在處理異異常之前,處處理器狀態(tài)必必須保留,以以便在異常處處理程序完成成后,原來的的程序能夠重重新執(zhí)行。同同一時(shí)刻可能能出現(xiàn)多個(gè)異異常。ARM支持7種類型的異常。表2-3列出了異常的的類型以及處處理這些異常常的處理器模模式。異常出出現(xiàn)后,強(qiáng)制制從異常類型型對(duì)應(yīng)的固定定存儲(chǔ)器地址址開始執(zhí)行程程序。這些固固定的地址稱稱為異常向量量(ExceptionVectors)。。當(dāng)異常出現(xiàn)時(shí)時(shí),異常模式式分組的R14和SPSR用于保存存狀態(tài),即R14_<exceptionmode>=returnlinkSPSR_<exception_mode>=CPSRCPSR[4:0]=exceptionmodenumberCPSR[5] =0//*在ARM狀態(tài)執(zhí)行行*/if<exceptionmode>==ResetorFIQthenCPSR[6]=1//*禁止止快速中斷*//*否則CPSR[6]不變*/CPSR[7]=1//*禁止正常常中斷*/PC=exceptionvectoraddress當(dāng)處理異常返返回時(shí),將SPSR傳送送到CPSR,R14傳傳送到PC。。這可用兩種種方法自動(dòng)完完成,即使用帶S位的的數(shù)據(jù)處理指指令,將PC作為目的寄寄存器;使用帶恢復(fù)CPSR的多多加載指令。。1.復(fù)位位處理器上一旦旦有復(fù)位輸入入,ARM處處理器立刻停停止執(zhí)行當(dāng)前前指令。復(fù)位位完成下列操操作R14_svc=UNPREDICTABLEvalueSPSR_svc=UNPREDICTABLEvalueCPSR[4:0]=0b10011/*進(jìn)進(jìn)入管理模式式*/CPSR[5]=0/*在ARM狀態(tài)下執(zhí)行行*/CPSR[6]=1/*禁止快速速中斷*/CPSR[7]=1/*禁止正常常中斷*/IfhighvectorsconfiguredthenPC=0xFFFF0000ElsePC=0x00000000復(fù)位后,ARM處理器在在禁止中斷的的管理模式下下,從地址0x00000000或或OxFFFF0000開始執(zhí)行指指令。2.未定義指指令異常當(dāng)ARM處理理器執(zhí)行協(xié)處處理器指令時(shí)時(shí),它必須等等待任一外部部協(xié)處理器應(yīng)應(yīng)答后,才能能真正執(zhí)行這這條指令。若若協(xié)處理器沒沒有響應(yīng),就就會(huì)出現(xiàn)未定定義指令異常常。若試圖執(zhí)行未未定義的指令令,也會(huì)出現(xiàn)現(xiàn)未定義指令令異常。未定義指令異異??捎糜跊]沒有物理協(xié)處處理器(硬件件)的系統(tǒng)上上,對(duì)協(xié)處理理器進(jìn)行軟件件仿真,或在在軟件仿真時(shí)時(shí)進(jìn)行指令集集擴(kuò)展。當(dāng)未定義指令令異常出現(xiàn)時(shí)時(shí),執(zhí)行下列列操作:R14_und=addressofnextinstructionaftertheundefinedinstructionSPSR_und=CPSRCPSR[4:0]=0b11011/*進(jìn)進(jìn)入未定義模模式*/CPSR[5]=0/*在ARM狀態(tài)執(zhí)行*//*CPSR[6]不變變*/CPSR[7]=1/*禁止正常常中斷*/IfhighvectorsconfiguredthenPC=0xFFFF0004ElsePC=0x00000004在仿真未定義義指令后,使使用下列指令令返回,即MOVSPC,R14上面的指令恢恢復(fù)PC(從從R14_und)和CPSR(從從SPSR_und),,并返回到未未定義指令后后的下一條指指令。3.軟件中斷斷異常軟件中斷指令令SWI(SoftWareInterruptlnstruction)進(jìn)入管理模模式,以請(qǐng)求求特定的管理理(操作系統(tǒng)統(tǒng))函數(shù)。當(dāng)當(dāng)執(zhí)行SWI時(shí),完成下下列操作:R14_svc=addressofnextinstructionaftertheSWIinstructionSPSR_svc=CPSRCPSR[4:0]=0b10011/*進(jìn)進(jìn)入管理模式式*/CPSR[5]=0/*在ARM狀態(tài)執(zhí)行*//*CPSR[6]不變變*/CPSR[7]=1/*禁止正常常中斷*/IfhighvectorsconfiguredthenPC=0xFFFF0008ElesPC=0x00000008完成SWI操操作后,使用用下列指令恢恢復(fù)PC(從從R14_svc)和CPSR(從從SPSR_svc),,并返回到SWI指令后后的下一條指指令,即MOVSPC,R144.預(yù)取中中止(取指令令存儲(chǔ)器中止止)存儲(chǔ)器系統(tǒng)發(fā)發(fā)出存儲(chǔ)器中中止(abort)信號(hào)號(hào)。響應(yīng)取指指激活的中止止標(biāo)記所取的的指令無效。。若處理器試圖圖執(zhí)行無效指指令,則產(chǎn)生生預(yù)取中止異異常。若指令未執(zhí)行行(例如,指指令在流水線線中發(fā)生了轉(zhuǎn)轉(zhuǎn)移),則不不發(fā)生預(yù)取中中止。在ARMv5及以以上版本中,,執(zhí)行BKPT指令也會(huì)會(huì)產(chǎn)生預(yù)取中中止異常。當(dāng)試圖執(zhí)行一一條中止的指指令時(shí),將執(zhí)執(zhí)行下列操作作:R14_abt=addressoftheabortedinstruction+4SPSR_abt=CPSRCPSR[4:0]=0b10111/*進(jìn)進(jìn)入中止模式式*/CPSR[5]=0/*在ARM狀態(tài)執(zhí)行*//*CPSR[6]不變*/CPSR[7]=1/*禁止正常常中斷*/IfhighvectorsconfiguredthenPC=0xFFFF000CElsePC=0x0000000C確定中止原因因后,使用下下面指令從中中止模式返回回,即SUBSPC,R14,#4上面的指令恢恢復(fù)PC(從從R14_abt)和CPSR(從從SPSR_abt),,并返回到中中止的指令。。5.?dāng)?shù)據(jù)中止止(數(shù)據(jù)訪問問存儲(chǔ)器中止止)存儲(chǔ)器系統(tǒng)發(fā)發(fā)出存儲(chǔ)器中中止信號(hào)。響響應(yīng)數(shù)據(jù)訪問問(加載或存存儲(chǔ))激活的的中止標(biāo)記數(shù)數(shù)據(jù)為無效。。在下面的任任何指令或異異常改變CPU狀態(tài)之前前,數(shù)據(jù)中止止異常發(fā)生。。執(zhí)行下列操操作:R14_abt=addressoftheabortedinstruction+8SPSR_abt=CPSRCPSR[4:0]=0b10111/*進(jìn)進(jìn)入中止模式式*/CPSR[5]=0/*在ARM狀態(tài)執(zhí)行*//*CPSR[6]不變*/CPSR[7]=1/*禁止正常常中斷*/IfhighvectorsconfiguredthenPC=0xFFFF0010ElsePC=0x00000010確定中止原因因后,使用下下列指令從中中止模式返回回,即SUBSPC,R14,#8上面的指令恢恢復(fù)PC(從從R14_abt)和CPSR(從SPSR_abt),并返回重重新執(zhí)行中止止的指令。若若中止的指令令不需要重新新執(zhí)行,則使使用下面的指指令:SUBSPC,R14,#46.中斷請(qǐng)請(qǐng)求(IRQ)異常通過處理器上上的IRQ輸輸入引腳,由由外部產(chǎn)生IRQ異常。。IRQ異常常的優(yōu)先級(jí)比比FIQ異常常的低。當(dāng)進(jìn)進(jìn)入FIQ處處理時(shí),會(huì)屏屏蔽掉IRQ異常。若CPSR的的I位置為1,則禁止IRQ中斷。。若I位清零零,則ARM在指令執(zhí)行行完之前檢查查IRQ輸入入。只能在特權(quán)模模式下改變I位,當(dāng)檢測測到IRQ時(shí)時(shí),執(zhí)行下列列操作:R14_irq=addressoftheabortedinstruction+4SPSR_irq=CPSRCPSR[4:0]=0b10010/*進(jìn)進(jìn)入IRQ模式*/CPSR[5]=0/*在在ARM狀狀態(tài)執(zhí)行*//*CPSR[6]不變變*/CPSR[7]=1/*禁禁止正常中中斷*/IfhighvectorsconfiguredthenPC=0xFFFF0018ElsePC=0x00000018使用下面的的指令從中中斷服務(wù)返返回,即SUBSPC,,R14,,#4上面的指令令恢復(fù)PC(從R14_irq)和CPSR(從SPSR_irq),并并繼續(xù)執(zhí)行行被中斷的的程序。7.快速中中斷請(qǐng)求(FIQ)異常通過處理器器上的FIQ輸入引引腳,由外外部產(chǎn)生FIQ異常常。FIQ被設(shè)計(jì)成成支持?jǐn)?shù)據(jù)據(jù)傳送和通通道處理,,并有足夠夠的私有(private)寄存器,,從而在這這樣的應(yīng)用用中可避免免對(duì)寄存器器保存的需需求,減少少了上下文文切換的總總開銷。當(dāng)CPSR的F位置置1時(shí),禁禁止快速中中斷。若F位清零,,則ARM在執(zhí)行指指令時(shí)檢查查FIQ輸輸入。只能能在特權(quán)模模式下改變變F位,當(dāng)當(dāng)檢測到FIQ時(shí),執(zhí)行下列列操作,即即R14_fiq=addressoftheabortedinstruction+4SPSR_fiq=CPSRCPSR[4:0]=0b10001/*進(jìn)進(jìn)入FIQ模式*/CPSR[5]=0/*在在ARM狀狀態(tài)執(zhí)行*/CPSR[6]=1/*禁禁止快速中中斷*/CPSR[7]=1/*禁禁止正常中中斷*/IfhighvectorsconfiguredthenPC=0xFFFF001CElsePC=0x0000001C使用下面的的指令從中中斷服務(wù)返返回,即SUBSPC,,R14,,#4上面的指令令恢復(fù)PC(從R14_fiq)和CPSR(從SPSR_fiq),并并繼續(xù)執(zhí)行行被中斷的的程序。FIQ向量量放在最后后,允許FIQ異常常處理程序序直接放在在地址0x0000001C或0xFFFF001C開開始的位置置,而不需需要由向量量的分支指指令執(zhí)行跳跳轉(zhuǎn)到異常常處理程序序。8.異常常優(yōu)先級(jí)異常的優(yōu)先先級(jí)如表2-4所列列。優(yōu)先級(jí)異常優(yōu)先級(jí)異常1(最高)復(fù)位4IRQ2數(shù)據(jù)中止5預(yù)取中止3FIQ6(最低)未定義指信、SWI9.高端端向量一些ARM實(shí)現(xiàn)允許許異常向量量的定位由由32位地地址空間低低端的正常常地址范圍圍Ox00000000~Ox000000lC,移到到接近于地地址空間高高端的另一一地址范圍圍0xFFFF0000~0xFFFF00lC。這些改變后后的地址位位置稱為高高端向量。。由IMPLEMENTATIONDEFINED決決定是否支支持高端向向量。如果果支持,則則在輸入硬硬件配置時(shí)時(shí),選擇是是使用正常常向量還是是高端向量量。10.異異常的進(jìn)入入和退出只要正常的的程序流程程被暫時(shí)停停止,則異異常發(fā)生,,例如服務(wù)務(wù)外部的中中斷。在異常被處處理之前,,必須保存存當(dāng)前的處處理器狀態(tài)態(tài),以便當(dāng)當(dāng)處理程序序完成后,,原來的程程序能重新新開始。如果幾種異異常同時(shí)發(fā)發(fā)生,則對(duì)對(duì)它們按固固定的次序序處理,可可參考異常常優(yōu)先級(jí)(1)進(jìn)進(jìn)入異常的的操作處理一個(gè)異異常時(shí),ARM7TDMI用用于:①將下一條條指令的地地址保存在在相應(yīng)的LR寄存器器中。如果異常是是從ARM狀態(tài)進(jìn)入入,則保存存在LR寄寄存器中的的是下一條條指令的地地址(當(dāng)前前PC+4或PC+8,取決決于異常,,見表2-5)。如果異常是是從Thumb狀態(tài)態(tài)進(jìn)入,則則保存在LR寄存器器中的是當(dāng)當(dāng)前PC的的偏移值。。它能使程程序在異常常處理返回回后從正確確的位置重重新開始。。這就意味異異常處不需需要確定異異常是從何何種狀態(tài)進(jìn)進(jìn)入的。例例如在軟件件中斷(SWI)情情況下,““MOVSPC,,R14_svc””,總是返返回到下一一條指令,,而與SWI是在ARM還是是Thumb狀態(tài)下下執(zhí)行的無無關(guān)。②將CPSR復(fù)制到到相應(yīng)的SPSR中中。③迫使CPSR模式式位設(shè)置成成取決于異異常的值。。④迫使PC從相關(guān)的的異常向量量中取下一一條指令。。也可以設(shè)設(shè)置中斷禁禁止位來阻阻止其它無無法處理的的異常嵌套套。如果在異常常發(fā)生時(shí)處處理器是在在Thumb狀態(tài)下下,那么當(dāng)當(dāng)用中斷異異常向量地地址加載PC時(shí),自自動(dòng)切換進(jìn)進(jìn)入ARM狀態(tài)。(2)退退出異常的的操作在完成異常常處理后::將LR寄存存器的值減減去相應(yīng)的的偏移量(偏移量根根據(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)進(jìn)入異常處處理時(shí)保存存在相應(yīng)的的R14寄寄存器中的的PC值,,以及在退退出異常處處理時(shí)推薦薦使用的指指令。PC是具有有預(yù)取中止止的BL/SWI/未定義指指令所取的的地址;PC是從FIQ或IRQ取得得優(yōu)先權(quán)后后不能執(zhí)行行的指令的的地址;PC是產(chǎn)生生數(shù)據(jù)中止止的加載或或存儲(chǔ)指令令的地址;;復(fù)位時(shí)保存存在R14_svc中的值是是不可預(yù)知知的。R0R0R0R0R0R0R1R1R1R1R1R1R2R2R2R2R2R2R3R3R3R3R3R3R4R4R4R4R4R4R5R5R5R5R5R5R6R6R6R6R6R6R7R7R7R7R7R7R8◣R8-fiqR8R8R8R8R9◣R9-fiqR9R9R9R9R10◣R10-fiqR10R10R10R10R11◣R11-fiqR11R11R11R11R12◣R12-fiqR12R12R12R12R13◣R13-fiq◣13-svc◣13-adt◣13-itq◣13-undR14◣R14-fiq◣14-svc◣14-adt◣14-itq◣14-undR15(PC)R15(PC)R15(PC)R15(PC)R15(PC)R15(PC)Systerm&UserFIQSupervisterAboutIRGUndefinedARM狀態(tài)下下的積存器組組織CPSRCPSRCPSRCPSRCPSRCPSR
◣SPSR-foq◣SPSR-svc◣SPSR-abt◣SPSR-inq◣SPSR-und返回圖2-5Thumb狀態(tài)下的的寄存器組織織R0R1R2R3R4R5R6R7StackPoint(SP)LinkRegister(LR)ProgramCounter(PC)CPSRSPSRROR1R2R3R4R5R6R7R8R9R10R11R12StackPoint(R13)LinkRegister(R14)ProgramCounter(R15)CPSRSPSRThumb狀狀態(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í)(無符號(hào)數(shù)溢出),C=1,否則C=0;減法運(yùn)算(包括比較指令CMP);當(dāng)運(yùn)算時(shí)產(chǎn)生了借位(無符號(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í)(無符號(hào)數(shù)溢出),C=1,否則C=0;減法運(yùn)算(包括比較指令CMP);當(dāng)運(yùn)算時(shí)產(chǎn)生了借位(無符號(hào)數(shù)溢出),C=0,否則C
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校設(shè)施安裝合同范本
- 房屋拆除新建合同范本
- 石料 道路運(yùn)輸合同范本
- 2025設(shè)備租賃承包合同范本
- 2025養(yǎng)殖產(chǎn)品買賣合同模板
- 2025年珠海市重點(diǎn)中學(xué)9校聯(lián)考初三英語試題含答案
- 江蘇泰州周莊初級(jí)中學(xué)2024-2025學(xué)年全國初三模擬考一全國卷英語試題含答案
- 江蘇省鹽城市東臺(tái)市第二聯(lián)盟重點(diǎn)名校2025屆初三第二次“聯(lián)測促改”活動(dòng)物理試題試卷含解析
- 中國計(jì)量大學(xué)《羽毛球初級(jí)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇省重點(diǎn)中學(xué)2024-2025學(xué)年初三下學(xué)期開學(xué)考英語試題含答案
- 2025生豬購買合同范文
- 醫(yī)療器械經(jīng)營質(zhì)量管理制度及工作程序-完整版
- (二模)溫州市2025屆高三第二次適應(yīng)性考試英語試卷(含答案)+聽力音頻+聽力原文
- 行政事業(yè)單位固定資產(chǎn)培訓(xùn)
- 6.1.2化學(xué)反應(yīng)與電能 課件 2024-2025學(xué)年高一下學(xué)期化學(xué)人教版(2019)必修第二冊(cè)
- 建筑施工企業(yè)安全生產(chǎn)流程
- 外來植物入侵工程施工方案
- 初中生科學(xué)素養(yǎng)與科學(xué)探究能力的培養(yǎng)策略研究考核試卷
- 河池市出租車駕駛員從業(yè)資格區(qū)域科目考試題庫(含答案)
- 淘汰賽賽對(duì)陣表
- 醫(yī)療糾紛中的病歷偽造篡改問題研究
評(píng)論
0/150
提交評(píng)論