




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ARMLinuxTraining(2)
ARM體系構(gòu)造與編程模型第1頁(yè)ARM介紹ARM是AdvancedRISCMachines縮寫,它是一家微處理器行業(yè)著名公司,該公司設(shè)計(jì)了大量高性能、便宜、耗能低RISC(精簡(jiǎn)指令集)處理器。ARM公司特點(diǎn)是只設(shè)計(jì)芯片,而不生產(chǎn)。它將技術(shù)授權(quán)給世界上許多著名半導(dǎo)體、軟件和OEM廠商,并提供服務(wù)。第2頁(yè)ARM授權(quán)模型將技術(shù)授權(quán)給其他芯片廠商形成各具特色ARM芯片...第3頁(yè)ARM體系構(gòu)造
ARM處理器為RISC芯片,其簡(jiǎn)單構(gòu)造使ARM內(nèi)核非常小,這使得器件功耗也非常低。它具有典型RISC特點(diǎn):大、統(tǒng)一寄存器文獻(xiàn)裝載/保存構(gòu)造,數(shù)據(jù)處理操作只針對(duì)寄存器內(nèi)容,而不直接對(duì)存放器進(jìn)行操作簡(jiǎn)單尋址模式統(tǒng)一和固定長(zhǎng)度指令域,簡(jiǎn)化了指令譯碼第4頁(yè)ARM體系構(gòu)造版本ARM體系構(gòu)造從最初開發(fā)到目前有了巨大改善,并仍在完善和發(fā)展。為了清楚體現(xiàn)每個(gè)ARM應(yīng)用實(shí)例所使用指令集,ARM公司定義了7種主要ARM指令集體系構(gòu)造版本,以版本號(hào)v1~v7表達(dá)。第5頁(yè)ARM-v1
該版本ARM體系構(gòu)造,只有26位尋址空間,沒有商業(yè)化,其特點(diǎn)為:基本數(shù)據(jù)處理指令(不包括乘法);字節(jié)、字和半字加載/存放指令;具有分支指令,包括在子程序調(diào)用中使用分支和鏈接指令;在操作系統(tǒng)調(diào)用中使用軟件中斷指令。第6頁(yè)ARM-v2同樣為26位尋址空間,目前已經(jīng)廢棄不再使用,它相對(duì)v1版本有下列改善:具有乘法和乘加指令;支持協(xié)處理器;迅速中斷模式中兩個(gè)以上分組寄存器;具有原子性加載/存放指令SWP和SWPB。第7頁(yè)ARM-v3尋址范圍擴(kuò)展到32位(也基本廢棄),具有獨(dú)立程序:具有乘法和乘加指令;支持協(xié)處理器;迅速中斷模式中具有兩個(gè)以上分組寄存器;具有原子性加載/存放指令SWP和SWPB。第8頁(yè)ARM-v4不再為了與此前版本兼容而支持26位體系構(gòu)造,并明確了哪些指令會(huì)引發(fā)未定義指令異常發(fā)生,它相對(duì)v3版本作了下列改善:半字加載/存放指令;字節(jié)和半字加載和符號(hào)擴(kuò)展指令;具有能夠轉(zhuǎn)換到Thumb狀態(tài)指令;顧客模式寄存器新特權(quán)處理器模式。第9頁(yè)ARM-v5在v4版本基礎(chǔ)上,對(duì)指令定義進(jìn)行了必要修正,對(duì)v4版本體系構(gòu)造進(jìn)行了擴(kuò)展并增加了指令,如下:改善了ARM/Thumb狀態(tài)之間切換效率;允許非T變量和T變量同樣,使用相同代碼生成技術(shù);增加計(jì)數(shù)前導(dǎo)零指令和軟件斷點(diǎn)指令;對(duì)乘法指令如何設(shè)置標(biāo)志作了嚴(yán)格定義。第10頁(yè)ARM-v6ARMArchitectureVersion6contains81newinstructionsSeveraladditionalclassesofinstructionPackeddataSIMD(SingleInstructionMultipleData)“SumofAbsoluteDifference”operationMoresaturatedarithmeticSupportformixedendiannessExceptionentryandreturninstructionsUnlikesomepreviousextensionstotheinstructionset(e.g.BLXoffset),theV6extensioninstructionsaremainlyconditionalAllareconditionalexceptwhereindicatedinthefollowingtext第11頁(yè)ARM-v7新基于ARMv7架構(gòu)處理器將為系統(tǒng)設(shè)計(jì)者提供更多選擇,能夠?yàn)閼?yīng)用目標(biāo)選擇更合適CPU。同步提供性能、功耗控制、代碼大小以及芯片成本方面優(yōu)化。采取了Thumb-2技術(shù),比32位代碼減少使用31%內(nèi)存,減小系統(tǒng)開銷,比Thumb技術(shù)增加38%性能減少了對(duì)文字池訪問頻度,這更使得設(shè)計(jì)者在只實(shí)現(xiàn)一種TCMRAM時(shí),性能惡化降到最低第12頁(yè)4THalfwordandsignedhalfword/bytesupportSystemmodeThumbinstructionsetImprovedARM/ThumbInterworkingCLZSaturatedarithmeticDSPmultiply-accumulateinstructionsExtensions:Jazelle(5TEJ)5TE6SIMDInstructionsMulti-processingV6MemoryarchitectureUnaligneddatasupportExtensions:Thumb-2(6T2)TrustZone(6Z)7Thumb-2CoreSight7A(Applications)NEON7R(Real-time)Hardwaredivide7M(Microcontroller)Thumb-2ONLYARM體系發(fā)展第13頁(yè)ARM處理器和體系構(gòu)造 Processorcore ArchitectureARM7TDMIfamily v4TARM720T,ARM740TARM9TDMIfamily v4TARM920T,ARM922T,ARM940TARM9Efamily v5TE,v5TEJARM946E-S,ARM966E-S,ARM926EJ-SARM10Efamily v5TE,v5TEJARM1020E,ARM1022E,ARM1026EJ-SARM11family v6ARM1136J(F)-S ARM1156T2(F)-S v6T2ARM1176JZ(F)-S v6ZCortexfamilyARMCortex-A8 v7AARMCortex-R4 v7RARMCortex-M3 v7M第14頁(yè)ARM處理器核介紹ARM公司開發(fā)了很多系列ARM處理器核,目前最新系列是ARM11。目前應(yīng)用比較廣泛系列是:ARM7ARM9ARM9EARM10SecurCoreXscaleCortex第15頁(yè)ARM7系列支持高密度16位Thumb指令集;支持片上調(diào)試;支持64位乘法;支持EmbededICE觀測(cè)硬件;ARM7TDMI可綜合(synthesizable)版本(軟核),對(duì)應(yīng)用工程師來說其編程模型與ARM7TDMI一致;ARM7TDMI-S第16頁(yè)處理器執(zhí)行指令典型步驟從存放器讀取指令(fetch)譯碼以鑒別它是屬于哪一條指令(dec)從指令中提取指令操作數(shù)(這些操作數(shù)往往存在于寄存器中)(reg)將操作數(shù)進(jìn)行組合以得到成果或存放器地址(ALU)假如需要,則訪問存放器以存放數(shù)據(jù)(mem)將成果寫回到寄存器堆(res)第17頁(yè)3級(jí)流水線指令執(zhí)行過程取指:從存放器裝載指令;譯碼:對(duì)剛裝載指令進(jìn)行識(shí)別;執(zhí)行:處理指令并把成果寫回對(duì)應(yīng)寄存器取指譯碼執(zhí)行指令從存放器中取出對(duì)指令使用寄存器進(jìn)行譯碼從寄存器組中讀出寄存器,執(zhí)行移位和ALU操作,寄存器被寫回到寄存器組中第18頁(yè)3級(jí)流水線ARM組織第19頁(yè)流水線使用實(shí)例ADDr1r2SUBr3r2CMPr1r3在第一種周期,內(nèi)核從存放器取出指令A(yù)DD;在第二個(gè)周期,內(nèi)核取出指令SUB,同步對(duì)ADD譯碼;在第三個(gè)周期,ADD被執(zhí)行,而SUB被譯碼,同步又取出CMP指令。第20頁(yè)ARM9/E系列第21頁(yè)5級(jí)流水線ARM組織第22頁(yè)ARM95級(jí)流水線InstructionFetchShift+ALUMemoryAccessRegWriteRegReadRegDecodeFETCHDECODEEXECUTEMEMORYWRITEARM9TDMIARMorThumb
InstDecodeRegSelectRegReadShiftALURegWriteThumb?ARM
decompressARMdecodeInstructionFetchFETCHDECODEEXECUTEARM7TDMI第23頁(yè)ARM10E系列第24頁(yè)ARM106級(jí)流水線InstructionFetchShift+ALU
+MultiplyRegWriteRegReadRegDecodeFETCHDECODEEXECUTEMEMORYWRITEARMorThumb
InstDecodeARM10Shift+ALUMemoryAccessRegWriteFETCHDECODEEXECUTEMEMORYWRITERegReadMultiplyMultiplyAddBranchPredictionInstructionFetchISSUEMemoryAccessARMorThumbInstructionDecode第25頁(yè)ARM11系列第26頁(yè)ARM體系構(gòu)造支持?jǐn)?shù)據(jù)類型ARM處理器支持下列數(shù)據(jù)類型字節(jié)8位半字16位(必須分派為占用2個(gè)字節(jié))字32位(必須分派為占用4個(gè)字節(jié))Byteaccess
(bytealigned)Halfwordaccess(halfwordaligned)Wordaccess(wordaligned)3210765402468ace089abcdef48c第27頁(yè)數(shù)據(jù)類型注意事項(xiàng)第28頁(yè)浮點(diǎn)數(shù)據(jù)類型浮點(diǎn)運(yùn)算使用在ARM硬件指令集中未定義數(shù)據(jù)類型ARM公司在協(xié)處理器指令空間定義了一系列浮點(diǎn)指令。一般這些指令所有通過未定義指令異常在軟件中實(shí)現(xiàn)ARM公司還提供了用C語言編寫浮點(diǎn)庫(kù)作為ARM浮點(diǎn)指令集替代辦法第29頁(yè)存放器大/小端從軟件角度看,內(nèi)存相對(duì)于一種大字節(jié)數(shù)組,其中每個(gè)數(shù)組元素(字節(jié))都是可尋址。ARM支持兩種內(nèi)存模式:大端模式(big-endian)/小端模式(little-endian)第30頁(yè)大小端實(shí)例大端模式小端模式第31頁(yè)處理器狀態(tài)ARM7TDMI處理器有兩種操作狀態(tài):ARM狀態(tài):32位,這種狀態(tài)下執(zhí)行是字方式ARM指令;Thumb狀態(tài):16位,這種狀態(tài)下執(zhí)行半字方式Thumb指令。第32頁(yè)處理器狀態(tài)轉(zhuǎn)換使用BX指令將ARM7TDMI內(nèi)核操作狀態(tài)在ARM狀態(tài)和Thumb狀態(tài)之間進(jìn)行切換,程序如下:;從Arm狀態(tài)切換到Thumb狀態(tài)LDRR0,=Lable+1BXR0;從Thumb狀態(tài)切換到ARM狀態(tài)LDRR0,=LableBXR0地址最低位為1,表達(dá)切換到Thumb狀態(tài)地址最低位為0,表達(dá)切換到ARM狀態(tài)跳轉(zhuǎn)地址標(biāo)號(hào)第33頁(yè)ARM處理器模式ARM體系構(gòu)造支持7種處理器模式,分別為:顧客模式、快中斷模式、中斷模式、管理模式、中斷模式、未定義模式和系統(tǒng)模式這樣好處是能夠更加好支持操作系統(tǒng)并提升工作效率。第34頁(yè)ARM處理器模式處理器模式說明備注顧客(usr)正常程序工作模式不能直接切換到其他模式系統(tǒng)(sys)用于支持操作系統(tǒng)特權(quán)任務(wù)等與顧客模式類似,但具有能夠直接切換到其他模式等特權(quán)快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時(shí)進(jìn)入此模式中斷(irq)用于通用中斷處理IRQ異常響應(yīng)時(shí)進(jìn)入此模式管理(svc)操作系統(tǒng)保護(hù)代碼系統(tǒng)復(fù)位和軟件中斷響應(yīng)時(shí)進(jìn)入此模式中斷(abt)用于支持虛擬內(nèi)存和/或存放器保護(hù)在ARM7TDMI沒有大用處未定義(und)支持硬件協(xié)處理器軟件仿真未定義指令異常響應(yīng)時(shí)進(jìn)入此模式第35頁(yè)處理器模式說明備注顧客(usr)正常程序工作模式不能直接切換到其他模式系統(tǒng)(sys)用于支持操作系統(tǒng)特權(quán)任務(wù)等與顧客模式類似,但具有能夠直接切換到其他模式等特權(quán)快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時(shí)進(jìn)入此模式中斷(irq)用于通用中斷處理IRQ異常響應(yīng)時(shí)進(jìn)入此模式管理(svc)操作系統(tǒng)保護(hù)代碼系統(tǒng)復(fù)位和軟件中斷響應(yīng)時(shí)進(jìn)入此模式中斷(abt)用于支持虛擬內(nèi)存和/或存放器保護(hù)在ARM7TDMI沒有大用處未定義(und)支持硬件協(xié)處理器軟件仿真未定義指令異常響應(yīng)時(shí)進(jìn)入此模式特權(quán)模式
除顧客模式外,其他模式均為特權(quán)模式。ARM內(nèi)部寄存器和某些片內(nèi)外設(shè)在硬件設(shè)計(jì)上只允許(或者可選為只允許)特權(quán)模式下訪問。另外,特權(quán)模式能夠自由切換處理器模式,而顧客模式不能直接切換到別模式。未定義(und)中斷(abt)管理(svc)中斷(irq)快中斷(fiq)系統(tǒng)(sys)第36頁(yè)異常模式處理器模式說明備注顧客(usr)正常程序工作模式不能直接切換到其他模式系統(tǒng)(sys)用于支持操作系統(tǒng)特權(quán)任務(wù)等與顧客模式類似,但具有能夠直接切換到其他模式等特權(quán)快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時(shí)進(jìn)入此模式中斷(irq)用于通用中斷處理IRQ異常響應(yīng)時(shí)進(jìn)入此模式管理(svc)操作系統(tǒng)保護(hù)代碼系統(tǒng)復(fù)位和軟件中斷響應(yīng)時(shí)進(jìn)入此模式中斷(abt)用于支持虛擬內(nèi)存和/或存放器保護(hù)在ARM7TDMI沒有大用處未定義(und)支持硬件協(xié)處理器軟件仿真未定義指令異常響應(yīng)時(shí)進(jìn)入此模式未定義(und)中斷(abt)管理(svc)中斷(irq)快中斷(fiq)
這五種模式稱為異常模式。它們除了能夠通過程序切換進(jìn)入外,也能夠由特定異常進(jìn)入。當(dāng)特定異常出現(xiàn)時(shí),處理器進(jìn)入對(duì)應(yīng)模式。每種異常模式都有某些獨(dú)立寄存器,以避免異常退出時(shí)顧客模式狀態(tài)不可靠。第37頁(yè)顧客和系統(tǒng)模式處理器模式說明備注顧客(usr)正常程序工作模式不能直接切換到其他模式系統(tǒng)(sys)用于支持操作系統(tǒng)特權(quán)任務(wù)等與顧客模式類似,但具有能夠直接切換到其他模式等特權(quán)快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時(shí)進(jìn)入此模式中斷(irq)用于通用中斷處理IRQ異常響應(yīng)時(shí)進(jìn)入此模式管理(svc)操作系統(tǒng)保護(hù)代碼系統(tǒng)復(fù)位和軟件中斷響應(yīng)時(shí)進(jìn)入此模式中斷(abt)用于支持虛擬內(nèi)存和/或存放器保護(hù)在ARM7TDMI沒有大用處未定義(und)支持硬件協(xié)處理器軟件仿真未定義指令異常響應(yīng)時(shí)進(jìn)入此模式這兩種模式都不能由異常進(jìn)入,并且它們使用完全相同寄存器組。系統(tǒng)模式是特權(quán)模式,不受顧客模式限制。操作系統(tǒng)在該模式下訪問顧客模式寄存器就比較方便,并且操作系統(tǒng)某些特權(quán)任務(wù)能夠使用這個(gè)模式訪問某些受控資源。系統(tǒng)(sys)顧客(usr)第38頁(yè)ARM內(nèi)部寄存器ARM有37個(gè)32位長(zhǎng)寄存器:1個(gè)用作PC(programcounter)1個(gè)用作CPSR(currentprogramstatusregister)5個(gè)用作SPSR(savedprogramstatusregisters)30個(gè)通用寄存器第39頁(yè)ARM狀態(tài)各模式下寄存器第40頁(yè)ARM狀態(tài)各模式下寄存器SPSR_fiqSPSR_irqSPSR_undSPSR_abtSPSR_svcCPSRR15R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0所有37個(gè)寄存器,提成兩類:31個(gè)通用32位寄存器;6個(gè)狀態(tài)寄存器。第41頁(yè)無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0顧客無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系統(tǒng)SPSR_svcCPSRR15R14_svcR13_svcR12R11R10R9R8R7R6R5R4R3R2R1R0管理SPSR_abtCPSRR15R14_abtR13_abtR12R11R10R9R8R7R6R5R4R3R2R1R0中斷SPSR_undCPSRR15R14_undR13_undR12R11R10R9R8R7R6R5R4R3R2R1R0未定義SPSR_irqCPSRR15R14_irqR13_irqR12R11R10R9R8R7R6R5R4R3R2R1R0中斷SPSR_fiqCPSRR15R14_fiqR13_fiqR12_fiqR11_fiqR10_fiqR9_fiqR8_fiqR7R6R5R4R3R2R1R0快中斷ARM狀態(tài)各模式下能夠訪問寄存器第42頁(yè)一般通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0在匯編語言中寄存器R0~R13為保存數(shù)據(jù)或地址值通用寄存器。它們是完全通用寄存器,不會(huì)被體系構(gòu)造作為特殊用途,并且可用于任何使用通用寄存器指令。第43頁(yè)一般通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0其中R0~R7為未分組寄存器,也就是說對(duì)于任何處理器模式,這些寄存器都對(duì)應(yīng)于相同32位物理寄存器。第44頁(yè)一般通用寄存器R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R14為分組寄存器。它們所對(duì)應(yīng)物理寄存器取決于目前處理器模式,幾乎所有允許使用通用寄存器指令都允許使用分組寄存器第45頁(yè)一般通用寄存器R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R12有兩個(gè)分組物理寄存器。一種用于除FIQ模式之外所有寄存器模式,另一種用于FIQ模式。這樣在發(fā)生FIQ中斷后,能夠加速FIQ處理速度。第46頁(yè)一般通用寄存器寄存器R13、R14分別有6個(gè)分組物理寄存器。一種用于顧客和系統(tǒng)模式,其他5個(gè)分別用于5種異常模式。R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13第47頁(yè)堆棧指針寄存器R13(SP)寄存器R13常作為堆棧指針(SP)。在ARM指令集當(dāng)中,沒有以特殊方式使用R13指令或其他功能,只是習(xí)慣上都這樣使用。在Thumb指令集中存在使用R13指令。第48頁(yè)鏈接寄存器R14(LR)R14為鏈接寄存器(LR),在構(gòu)造上有兩個(gè)特殊功能:在每種模式下,模式本身R14版本用于保存子程序返回地址;當(dāng)發(fā)生異常時(shí),將R14對(duì)應(yīng)異常模式版本設(shè)置為異常返回地址(有些異常有一種小固定偏移量)。第49頁(yè)R14寄存器與子程序調(diào)用Lable程序A程序BR14BLLable地址A???MOVPC,LRR14(地址A)Lable???1.程序A執(zhí)行過程中調(diào)用程序B;2.程序跳轉(zhuǎn)至標(biāo)號(hào)Lable,執(zhí)行程序B。同步硬件將“BLLable”指令下一條指令所在地址存入R14;3.程序B執(zhí)行最后,將R14寄存器內(nèi)容放入PC,返回程序A;第50頁(yè)R14寄存器與異常發(fā)生異常發(fā)生時(shí),程序要跳轉(zhuǎn)至異常服務(wù)程序,對(duì)返回地址處理與子程序調(diào)用類似,都是由硬件完成。區(qū)分在于有些異常有一種小常量偏移。第51頁(yè)R14寄存器注意重點(diǎn)R14R14_irq顧客模式下程序IRQ模式下程序AareturnB...XA地址A地址A1.執(zhí)行顧客模式下程序;2.發(fā)生IRQ中斷,硬件將某個(gè)地址存入IRQ模式下R14_irq寄存器,顧客模式下R14沒有被破壞;3.IRQ服務(wù)程序A執(zhí)行完成,將R14_irq寄存器內(nèi)容減去某個(gè)常量后存入PC,返回之前被中斷程序;未被破壞第52頁(yè)R14寄存器注意重點(diǎn)R14R14_irq顧客模式下程序IRQ模式下程序AaB...XA地址A地址A1.執(zhí)行顧客模式下程序;2.發(fā)生IRQ中斷,硬件將某個(gè)地址存入IRQ模式下R14_irq寄存器,顧客模式下R14沒有被破壞;3.IRQ服務(wù)程序A執(zhí)行完成,將R14_irq寄存器內(nèi)容減去某個(gè)常量后存入PC,返回之前被中斷程序;未被破壞IRQ模式下程序BareturnB...XA地址B地址B4.假如在IRQ處理程序中打開IRQ中斷,并且再次發(fā)生IRQ中斷,或者調(diào)用子程序;5.硬件將返回地址保存在R14_irq寄存器中,本來保存返回地址將被覆蓋,造成錯(cuò)誤;被破壞6.在程序B返回到程序A,然后在返回到顧客模式下被中斷程序時(shí),發(fā)生錯(cuò)誤,將不能正確返回;returnreturn處理措施是確保R14對(duì)應(yīng)版本在發(fā)生中斷嵌套時(shí)不再保存任何故意義值(將R14入棧),或者切換到其他處理器模式下。第53頁(yè)程序計(jì)數(shù)器R15(PC)寄存器R15為程序計(jì)數(shù)器(PC),它指向正在取指地址。能夠以為它是一種通用寄存器,不過對(duì)于它使用有許多與指令有關(guān)限制或特殊情況。假如R15使用方式超出了這些限制,那么成果將是不可預(yù)測(cè)。第54頁(yè)讀R15限制正常操作時(shí),從R15讀取值是處理器正在取指地址,即目前正在執(zhí)行指令地址加上8個(gè)字節(jié)(兩條ARM指令長(zhǎng)度)。由于ARM指令總是以字為單位,因此R15寄存器最低兩位總是為0。LDRR0,PC??????PCPC-4PC-8正在執(zhí)行正在譯碼正在取指流水線狀態(tài)地址程序代碼第55頁(yè)程序狀態(tài)寄存器CPSR寄存器CPSR為程序狀態(tài)寄存器,在異常模式中,另外一種寄存器“程序狀態(tài)保存寄存器(SPSR)”能夠被訪問。每種異常都有自己SPSR,在由于異常事件而進(jìn)入異常時(shí)它保存CPSR目前值,異常退出時(shí)可通過它恢復(fù)CPSR。第56頁(yè)CPSR寄存器CPSR反應(yīng)了目前處理器狀態(tài),其包括:4個(gè)條件代碼標(biāo)志(負(fù)(N)、零(Z)、進(jìn)位(C)和溢出(V));2個(gè)中斷嚴(yán)禁位,分別控制一種類型中斷;5個(gè)對(duì)目前處理器模式進(jìn)行編碼位;1個(gè)用于批示目前執(zhí)行指令(ARM還是Thumb)位。第57頁(yè)CPSR寄存器格式NZCV——IM0M1M2M3M4TF—...313029282726876543210條件代碼標(biāo)志保存控制位溢出標(biāo)志進(jìn)位或借位擴(kuò)展零負(fù)或不大于IRQ嚴(yán)禁FIQ嚴(yán)禁狀態(tài)位模式位NZCVIM0M1M2M3M4TF第58頁(yè)CPSR模式位設(shè)置表第59頁(yè)備份程序狀態(tài)寄存器每一種處理器模式下都有一種專用物理寄存器,成為備份程序狀態(tài)寄存器SPSR(SavedProgramStatusRegister)。當(dāng)特定異常中斷發(fā)生時(shí),這個(gè)物理寄存器負(fù)責(zé)寄存目前程序狀態(tài)寄存器內(nèi)容。當(dāng)異常處理程序返回時(shí),再將其內(nèi)容恢復(fù)到目前程序狀態(tài)寄存器由于顧客模式和系統(tǒng)模式不屬于異常中斷模式,因此它們沒有SPSR。第60頁(yè)異常只要正常程序流被臨時(shí)中斷,處理器就進(jìn)入異常模式。例如響應(yīng)一種來自外設(shè)中斷。在處理異常之前,ARM內(nèi)核保存目前處理器狀態(tài),這樣當(dāng)處理程序結(jié)束時(shí)能夠恢復(fù)執(zhí)行本來程序。假如同步發(fā)生兩個(gè)或更多異常,那么將按照固定次序來處理異常第61頁(yè)ARM異常類型ARM一共有7種類型異常,按優(yōu)先級(jí)從高到低排列如下:復(fù)位異常(Reset)數(shù)據(jù)異常(DataAbort)迅速中斷異常(FIQ)外部中斷異常(IRQ)預(yù)取異常(PrefetchAbort)軟件中斷(SWI)未定義指令異常(Undefinedinstruction)第62頁(yè)復(fù)位異常當(dāng)處理器復(fù)位引腳有效時(shí),系統(tǒng)產(chǎn)生復(fù)位異常中斷,程序跳轉(zhuǎn)到復(fù)位異常中斷處理程序處執(zhí)行。復(fù)位異常中斷一般用在下面兩種情況下:系統(tǒng)上電系統(tǒng)復(fù)位第63頁(yè)數(shù)據(jù)訪問中斷異常數(shù)據(jù)訪問中斷異常是由存放器發(fā)出數(shù)據(jù)中斷信號(hào),它由存放器訪問指令(Load/Store)產(chǎn)生。當(dāng)數(shù)據(jù)訪問指令目標(biāo)地址不存在,或者該地址不允許目前指令訪問,處理器產(chǎn)生該異常。包括兩種類型:數(shù)據(jù)中斷發(fā)生在對(duì)數(shù)據(jù)訪問時(shí)預(yù)取中斷發(fā)生在指令預(yù)取過程中第64頁(yè)數(shù)據(jù)訪問中斷異常數(shù)據(jù)訪問中斷異常是由存放器發(fā)出數(shù)據(jù)中斷信號(hào),它由存放器訪問指令(Load/Store)產(chǎn)生。當(dāng)數(shù)據(jù)訪問指令目標(biāo)地址不存在,或者該地址不允許目前指令訪問,處理器產(chǎn)生數(shù)據(jù)訪問中斷異常。在修復(fù)產(chǎn)生中斷原因后,不論處于哪種處理器操作狀態(tài),處理程序都執(zhí)行下面返回指令:SUBSPC,R14_abt,#8第65頁(yè)預(yù)取指令異常當(dāng)處理器試圖去取一條被標(biāo)識(shí)為預(yù)取無效指令時(shí),發(fā)生預(yù)取異常。假如系統(tǒng)中不包括MMU時(shí),指令預(yù)取異常中斷處理程序只是簡(jiǎn)單地報(bào)告錯(cuò)誤并退出。若包括MMU,引發(fā)異常指令物理地址被存放到內(nèi)存中。在處理中斷原因之后,不論處于哪種處理器操作狀態(tài),處理程序都會(huì)執(zhí)行下面指令恢復(fù)PC和CPSR并重試被中斷指令:SUBSPC,R14_abt,#4第66頁(yè)迅速中斷FIQ當(dāng)處理器外部迅速中斷祈求引腳有效,且CPSR寄存器F控制位被清除時(shí),處理器產(chǎn)生外部中斷祈求FIQ異常。不論異常入口是來自ARM狀態(tài)還是Thumb狀態(tài),F(xiàn)IQ處理程序都會(huì)通過執(zhí)行下面指令從中斷返回: SUBSPC,R14_fiq,#4在一種特權(quán)模式中,能夠通過置位CPSR中F位來嚴(yán)禁FIQ異常。第67頁(yè)外部中斷IRQ當(dāng)處理器外部中斷祈求引腳有效,并且CPSR寄存器I控制位被清除時(shí),處理器產(chǎn)生外部中斷IRQ異常。不論異常入口是來自ARM狀態(tài)還是Thumb狀態(tài),F(xiàn)IQ處理程序都會(huì)通過執(zhí)行下面指令從中斷返回: SUBSPC,R14_fiq,#4第68頁(yè)軟中斷SWI使用軟件中斷(SWI)指令能夠進(jìn)入管理模式,一般用于祈求一種特定管理函數(shù)。SWI處理程序通過執(zhí)行下面指令返回:MOVSPC,R14_svc這個(gè)動(dòng)作恢復(fù)了PC和CPSR并返回到SWI之后指令。SWI處理程序讀取操作碼以提取SWI函數(shù)編號(hào)。第69頁(yè)未定義指令異常當(dāng)處理器遇到一條自己和系統(tǒng)內(nèi)任何協(xié)處理器都無法處理指令時(shí),ARM內(nèi)核執(zhí)行未定義指令陷阱。軟件可使用這一機(jī)制通過模擬未定義協(xié)處理器指令來擴(kuò)展ARM指令集。在模擬處理了失敗指令后,陷阱程序執(zhí)行下面指令:
MOVSPC,R14_svc這個(gè)動(dòng)作恢復(fù)了PC和CPSR并返回到未定義指令之后指令。第70頁(yè)異常入口/出口異常或入口返回指令之前狀態(tài)備注ARMR14_xThumbR14_xBLMOVPC,R14PC+4PC+2此處PC為BL,SWI,為定義指令取指或預(yù)取指中斷指令地址SWIMOVSPC,R14_svcPC+4PC+2未定義指令MOVSPC,R14_undPC+4PC+2預(yù)取指中斷SUBSPC,R14_abt,#4PC+4PC+4快中斷SUBSPC,R14_fiq,#4PC+4PC+4此處PC為由于FIQ或IRQ占先而沒有被執(zhí)行指令地址中斷SUBSPC,R14_irq,#4PC+4PC+4數(shù)據(jù)中斷SUBSPC,R14_abt,#8PC+8PC+8此處PC為產(chǎn)生數(shù)據(jù)中斷裝載或保存指令地址。復(fù)位無——復(fù)位時(shí)保存在R14_svc中值不可預(yù)知。第71頁(yè)異常入口和出口處理假如異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么能夠使用一條多寄存器傳送指令來恢復(fù)顧客寄存器并實(shí)現(xiàn)返回中斷處理代碼開始部分和退出部分:SUBLR,LR,#4 ;計(jì)算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到寄存器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回注意:中斷返回指令寄存器列表(其中必須包括PC)后“^”符號(hào)表達(dá)這是一條特殊形式指令。這條指令在從存放器中裝載P
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 微生物檢驗(yàn)技術(shù)人員的職業(yè)素養(yǎng)與試題及答案
- 童車制造企業(yè)生產(chǎn)調(diào)度與優(yōu)化練習(xí)考核試卷
- 室外拱形廊道施工方案
- 垃圾運(yùn)輸防滲漏施工方案
- 2025年【光氣及光氣化工藝】模擬考試題及答案
- 移動(dòng)通信技術(shù)在智慧工廠行業(yè)的應(yīng)用考核試卷
- 項(xiàng)目材料采購(gòu)的試題及答案
- 2024年花藝師考試的學(xué)習(xí)方法與技巧試題及答案
- 畜牧業(yè)綠色發(fā)展政策建議考核試卷
- 紙張表面裝飾技術(shù)的創(chuàng)新與發(fā)展考核試卷
- DL∕T 5210.4-2018 電力建設(shè)施工質(zhì)量驗(yàn)收規(guī)程 第4部分:熱工儀表及控制裝置
- B江水利樞紐工程畢業(yè)設(shè)計(jì)計(jì)算書
- HG+20231-2014化學(xué)工業(yè)建設(shè)項(xiàng)目試車規(guī)范
- 2024海南中考化學(xué)二輪重點(diǎn)專題突破 專題三 流程圖題(課件)
- 急性冠脈綜合征患者健康教育
- 道德與法治賽課一等獎(jiǎng):《勿忘國(guó)恥》教學(xué)課件(五下)
- 2024年全國(guó)初中數(shù)學(xué)競(jìng)賽試題含答案
- 任務(wù)花式噴泉PLC控制任務(wù)課件
- 手術(shù)室轉(zhuǎn)運(yùn)工人培訓(xùn)
- MOOC 電子線路分析基礎(chǔ)-西安電子科技大學(xué) 中國(guó)大學(xué)慕課答案
- 15j403-1樓梯欄桿標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論