




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
UESTCUESTCUESTCUESTCUESTC第2章嵌入式處理器體系結(jié)構(gòu)嵌入式系統(tǒng)設(shè)計(1)處理器設(shè)計的兩種結(jié)構(gòu)形式
CISC與RISC
(2)從計算機系統(tǒng)角度,強調(diào)訪問存儲器的設(shè)計原則
馮·諾依曼結(jié)構(gòu)與哈佛結(jié)構(gòu)
處理器體系結(jié)構(gòu)概述CISC和RISCCISC:復(fù)雜指令集(ComplexInstructionSetComputer)具有大量的指令和尋址方式,指令長度可變8/2原則:80%的程序只使用20%的指令大多數(shù)程序只使用少量的指令就能夠運行RISC:精簡指令集(ReducedInstructionSetComputer)只包含最有用的指令,指令長度固定確保數(shù)據(jù)通道快速執(zhí)行每一條指令使CPU硬件結(jié)構(gòu)設(shè)計變得更為簡單處理器體系結(jié)構(gòu)概述嵌入式微處理器傳統(tǒng)的微處理器采用的馮·諾依曼結(jié)構(gòu)將指令和數(shù)據(jù)存放在同一存儲空間中,統(tǒng)一編址,指令和數(shù)據(jù)通過同一總線訪問。哈佛結(jié)構(gòu)則是不同于馮·諾依曼結(jié)構(gòu)的一種并行體系結(jié)構(gòu),其主要特點是程序和數(shù)據(jù)存儲在不同的存儲空間中,即程序存儲器和數(shù)據(jù)存儲器是兩個相互獨立的存儲器,每個存儲器獨立編制、獨立訪問。與之相對應(yīng)的是系統(tǒng)中設(shè)置的兩條總線(程序總線和數(shù)據(jù)總線),從而使數(shù)據(jù)的吞吐率提高了一倍。處理器體系結(jié)構(gòu)概述馮·諾依曼體系結(jié)構(gòu)指令寄存器控制器數(shù)據(jù)通道輸入輸出中央處理器存儲器程序指令0指令1指令2指令3指令4數(shù)據(jù)數(shù)據(jù)0數(shù)據(jù)1數(shù)據(jù)2處理器體系結(jié)構(gòu)概述哈佛體系結(jié)構(gòu)指令寄存器控制器數(shù)據(jù)通道輸入輸出CPU程序存儲器指令0指令1指令2數(shù)據(jù)存儲器數(shù)據(jù)0數(shù)據(jù)1數(shù)據(jù)2地址指令地址數(shù)據(jù)處理器體系結(jié)構(gòu)概述ARM微處理器的特點固定長度的指令格式,指令歸整、簡單、基本尋址方式有2~3種;2.采用RISC體系結(jié)構(gòu)使用單周期指令,便于流水線操作執(zhí)行;大量使用寄存器,數(shù)據(jù)處理指令只對寄存器進行操作,只有加載/存儲指令可以訪問存儲器,以提高指令的執(zhí)行效率。ARM處理器的特點ARM微處理器的特點31個通用寄存器,包括程序計數(shù)器(PC指針),均為32位的寄存器;3.大量使用寄存器6個狀態(tài)寄存器,用以標識CPU的工作狀態(tài)及程序的運行狀態(tài),均為32位。ARM處理器的特點ARM微處理器的特點ARM微處理器支持兩種指令集:ARM指令集和Thumb指令集。4.高效的指令系統(tǒng)ARM指令為32位的長度,Thumb指令為16位長度。Thumb指令集為ARM指令集的功能子集,但與等價的ARM代碼相比較,可節(jié)省30%~40%以上的存儲空間,同時具備32位代碼的所有優(yōu)點。ARM處理器的特點
同樣為26位尋址空間,現(xiàn)在已經(jīng)廢棄不再使用,它相對V1版本有以下改進:具有乘法和乘加指令;支持協(xié)處理器;快速中斷模式中的兩個以上的分組寄存器;具有原子性加載/存儲指令SWP和SWPB。ARM體系結(jié)構(gòu)的發(fā)展ARM體系結(jié)構(gòu)版本——V2尋址范圍擴展到32位(目前已廢棄),具有獨立的程序:具有乘法和乘加指令;支持協(xié)處理器;快速中斷模式中具有的兩個以上的分組寄存器;具有原子性加載/存儲指令SWP和SWPB。ARM體系結(jié)構(gòu)版本——V3ARM體系結(jié)構(gòu)的發(fā)展
不在為了與以前的版本兼容而支持26位體系結(jié)構(gòu),并明確了哪些指令會引起未定義指令異常發(fā)生,它相對V3版本作了以下的改進:半字加載/存儲指令;字節(jié)和半字的加載和符號擴展指令;具有可以轉(zhuǎn)換到Thumb狀態(tài)的指令(BX);增加了用戶模式寄存器的新的特權(quán)處理器模式。ARM體系結(jié)構(gòu)的發(fā)展ARM體系結(jié)構(gòu)版本——V42001年推出ARMv6,它在許多方面做了改進如內(nèi)存系統(tǒng)、異常處理和較好地支持多處理器。SIMD擴展使得廣大的軟件應(yīng)用如Video和Audiocodec的性能提高了4倍。Thumb-2和TrustZone技術(shù)也用于ARMv6中。ARMv6第一個實現(xiàn)是2002年春推出的ARM1136J(F)-STM處理器,2003年又推出了
ARM1156T2(F)-S
和ARM1176JZ(F)-S處理器。ARM體系結(jié)構(gòu)的發(fā)展ARM體系結(jié)構(gòu)版本——V6ARMv7定義了3種不同的處理器配置(processorprofiles):ProfileA是面向復(fù)雜、基于虛擬內(nèi)存的OS和應(yīng)用的ProfileR是針對實時系統(tǒng)的ProfileM是針對低成本應(yīng)用的優(yōu)化的微控制器的所有ARMv7profiles實現(xiàn)Thumb-2技術(shù),同時還包括了NEON?技術(shù)的擴展提高DSP和多媒體處理吞吐量400%
,并提供浮點支持以滿足下一代3D圖形和游戲以及傳統(tǒng)嵌入式控制應(yīng)用的需要。ARM體系結(jié)構(gòu)版本——V7ARM體系結(jié)構(gòu)的發(fā)展ARMFamilyARM7?FamilyARM9?FamilyARM10?FamilyARM11?Family150DMIPS300DMIPS500DMIPS1000DMIPSARMCortex?FamilyARM720TARM1136JARM1176JZARM1026EARM920T/ARM922TARM926EJCortexAApplicationProcessorARM7TDMIARM1156T2ARM1026EARM946ECortexREmbeddedRTControllerARM7TDMIARM966EARM968ECortexMMicro-controllerARMArchitectureARM體系結(jié)構(gòu)的發(fā)展系列相應(yīng)產(chǎn)品性能特點ARM11系列ARM11MPCore,ARM1136J(F)-S,ARM1156T2(F)-S,ARM1176JZ(F)-S
8級流水線(9級ARM1156T2(F)-S),獨立的load-store和arithmetic流水線,支持分支預(yù)測和返回棧(ReturnStack)。強大的ARMv6指令集,支持DSP,SIMD(SingleInstructionMultipleData)擴展,支持ARMTrustZone、Thumb-2核心技術(shù)。740Dhrystone2.1MIPS,低功耗0.6mW/MHz(0.13μm,1.2V)Cortex系列Cortex-A8,Cortex-M3,Cortex-R4Cortex-A系列:面向用于復(fù)雜OS和應(yīng)用的應(yīng)用處理器(applicationsprocessors),支持ARM,ThumbandThumb-2指令集。Cortex-R系列:面向嵌入式實時領(lǐng)域的嵌入式處理器,支持ARM,Thumb,和Thumb-2指令集。Cortex-M系列:面向深嵌入式價格敏感的嵌入式處理器,只支持Thumb-2指令集SecurCore系列SecurCoreSC100,SecurCoreSC200用于SmartCard和SecureIC的32-bit解決方案。支持ARM和Thumb
指令集,軟核。具有安全特征和低成本安全存儲保護單元
ARM7微處理器系列
ARM7系列是為低功耗的32位RISC處理器,最適合用于對價位和功耗要求較高的消費類應(yīng)用。ARM7系列有如下特點:具有嵌入式ICE-RT邏輯,調(diào)試開發(fā)方便;極低的功耗,適合對功耗要求較高的應(yīng)用,如便攜式產(chǎn)品;能夠提供0.9MIPS/MHz的三級流水線結(jié)構(gòu);代碼密度高,并兼容16位的Thumb指令集;對操作系統(tǒng)的支持廣泛,如WindowsCE、Linux、PalmOS等;指令系統(tǒng)與ARM9系列、ARM9E系列和ARM10E系列兼容,便于用戶的產(chǎn)品升級換代;主頻最高可達130M,高速的運算處理能力能勝任絕大多數(shù)的復(fù)雜應(yīng)用。ARM處理器系列ARM7微處理器系列主要應(yīng)用領(lǐng)域:工業(yè)控制、Internet設(shè)備、網(wǎng)絡(luò)和調(diào)制解調(diào)器設(shè)備、移動電話等多種多媒體和嵌入式應(yīng)用。ARM7系列微處理器包括如下幾種類型的核:ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。其中,ARM7TMDI是目前使用最廣泛的32位嵌入式RISC處理器,屬低端ARM處理器核。TDMI的基本含義為:T:支持16為壓縮指令集Thumb;D:支持片上Debug;M:內(nèi)嵌硬件乘法器(Multiplier)I:嵌入式ICE,支持片上斷點和調(diào)試點;ARM處理器系列ARM9微處理器系列ARM9系列微處理器主要應(yīng)用于無線設(shè)備、儀器儀表、安全系統(tǒng)、機頂盒、高端打印機、數(shù)字照相機和數(shù)字攝像機等。ARM處理器系列ARM9E微處理器系列
ARM9E系列微處理器的主要特點如下:支持DSP指令集,適合于需要高速數(shù)字信號處理的場合。5級整數(shù)流水線,指令執(zhí)行效率更高。支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA總線接口。支持VFP9浮點處理協(xié)處理器。全性能的MMU,支持眾多主流嵌入式操作系統(tǒng)。支持數(shù)據(jù)Cache和指令Cache,具有更高的處理能力。主頻最高可達300M。ARM處理器系列ARM10E微處理器系列ARM10E系列微處理器主要應(yīng)用于下一代無線設(shè)備、數(shù)字消費品、成像設(shè)備、工業(yè)控制、通信和信息系統(tǒng)等領(lǐng)域。ARM10E系列微處理器包含ARM1020E、ARM1022E和ARM1026EJ-S三種類型,以適用于不同的應(yīng)用場合。ARM處理器系列SecurCore微處理器系列
SecurCore系列微處理器除了具有ARM體系結(jié)構(gòu)各種主要特點外,還在系統(tǒng)安全方面具有如下的特點:帶有靈活的保護單元,確保操作系統(tǒng)和應(yīng)用數(shù)據(jù)的安全。采用軟內(nèi)核技術(shù),防止外部對其進行掃描探測。可集成用戶自己的安全特性和其他協(xié)處理器。ARM處理器系列SecurCore微處理器系列SecurCore系列微處理器主要應(yīng)用于一些對安全性要求較高的應(yīng)用產(chǎn)品及應(yīng)用系統(tǒng),如電子商務(wù)、電子政務(wù)、電子銀行業(yè)務(wù)、網(wǎng)絡(luò)和認證系統(tǒng)等領(lǐng)域。SecurCore系列微處理器包含SecurCoreSC100、SecurCoreSC110、SecurCoreSC200和SecurCoreSC210四種類型,以適用于不同的應(yīng)用場合。ARM處理器系列ARM處理器(核)命名規(guī)則ARM{x}{y}{z}{T}{D}{M}{I}{E}{J}{F}{-S}x——系列號y——存儲管理/保護單元z——CacheT——Thumb指令集D——JTAG調(diào)試器M——快速乘法器I——嵌入式跟蹤宏單元E——增強DSP指令J——Jazelle技術(shù)F——向量浮點單元S——可綜合的內(nèi)核2:帶MMU4:帶MPU6:無MMU和MPU0:標準cache2:小cache6:可變cacheARM7TDMIARM926EJ-SARM966ESARM1022EARM處理器系列ARM處理器的先進技術(shù)(1)流水線技術(shù)
流水線(Pipeline)技術(shù):幾個指令可以并行執(zhí)行提高了CPU的運行效率內(nèi)部信息流要求通暢流動譯碼取指執(zhí)行add譯碼取指執(zhí)行sub譯碼取指執(zhí)行cmp時間AddSubCmp最簡單的3級流水線低功耗嵌入式領(lǐng)域的經(jīng)典產(chǎn)品ARM7就是采用這種3級流水線結(jié)構(gòu)。ARM處理器的先進技術(shù)史上最經(jīng)典的5級流水線早期的MIPS、ARM9等處理器使用這種流水線,以后的處理器也都能看到它的影子,包括x86處理器等。ARM處理器的先進技術(shù)ARM處理器的先進技術(shù)(2)超標量執(zhí)行
超標量(Superscalar)執(zhí)行:超標量CPU采用多條流水線結(jié)構(gòu)
執(zhí)行1取指指令譯碼2譯碼1執(zhí)行2執(zhí)行1取指譯碼2譯碼1執(zhí)行2流水線1流水線2數(shù)據(jù)回寫ARM處理器的先進技術(shù)ARM處理器的先進技術(shù)超標量處理器
指令并行Superscalar超標量VLIW超長指令字ARM處理器的先進技術(shù)處理器的并行設(shè)計ARM處理器的先進技術(shù)并行總結(jié)ARM處理器的先進技術(shù)ARM處理器的先進技術(shù)(3)高速緩存(CACHE)ARM處理器的先進技術(shù)Cache的工作原理ARM處理器的先進技術(shù)ARM處理器的先進技術(shù)四級存儲結(jié)構(gòu)寄存器+Cache+主存+輔存CPU內(nèi)部高速電子線路(如觸發(fā)器)一級:在CPU內(nèi)部二級:在CPU外部一般為靜態(tài)隨機存儲器SRAM。一般為半導(dǎo)體存儲器,也稱為短期存儲器;解決讀寫速度問題;包括磁盤(中期存儲器)、磁帶、光盤(長期存儲)等;解決存儲容量問題;其中:cache-主存結(jié)構(gòu)解決高速度與低成本的矛盾;主存-輔存結(jié)構(gòu)利用虛擬存儲器解決大容量與低成本的矛盾;ARM處理器的先進技術(shù)ARM處理器的先進技術(shù)(4)總線和總線橋總線是CPU與存儲器和設(shè)備通信的機制,是計算機各部件之間傳送數(shù)據(jù)、地址和控制信息的公共通道。片內(nèi)總線或內(nèi)部總線:連接CPU內(nèi)部各主要功能部件片外總線:CPU與存儲器(RAM和ROM)和I/O接口之間進行信息交換的通道數(shù)據(jù)總線Dbus地址總線Abus控制總線Cbus按相對于CPU位置劃分按功能和信號類型總線分類總線寬度總線頻率總線帶寬總線帶寬(單位:MB/s)=(總線寬度/8)×總線頻率如:總線寬度32位,頻率66MHZ,則總線帶寬=(32/8)*66MHz=264MB/s總線的主要參數(shù)又稱總線位寬,指的是總線能同時傳送數(shù)據(jù)的位數(shù)。如16位總線就是具有16位數(shù)據(jù)傳送能力。總線工作速度的一個重要參數(shù),工作頻率越高,速度越快。通常用MHz表示。又稱總線的數(shù)據(jù)傳送率,是指在一定時間內(nèi)總線上可傳送的數(shù)據(jù)總量,用每秒最大傳送數(shù)據(jù)量來衡量。總線帶寬越寬,傳輸率越高。ARM處理器的先進技術(shù)總線和總線橋ARM處理器的先進技術(shù)ARM處理器的先進技術(shù)ARM處理器的先進技術(shù)ARM處理器的先進技術(shù)總線和總線橋原因:數(shù)據(jù)寬度:高速總線通常提供較寬的數(shù)據(jù)連接。成本:高速總線通常采用更昂貴的電路和連接器。橋允許總線獨立操作,這樣在I/O操作中可提供某些并行性。一個微處理器系統(tǒng)可能含有多條總線高速總線低速總線高速設(shè)備低速設(shè)備橋總線互聯(lián)的電路ARM處理器的先進技術(shù)總線和總線橋存儲器高速設(shè)備CPU低速設(shè)備低速設(shè)備橋高速總線低速總線多總線系統(tǒng)ARM處理器的先進技術(shù)北橋南橋前端總線FrontSideBusARM處理器的先進技術(shù)ARM處理器的先進技術(shù)ARM處理器的先進技術(shù)AMBA總線AMBA(AdvancedMicrocontrollerBusArchitecture)是ARM公司研發(fā)的一種總線規(guī)范,目前主要版本為2.0版本。AHB(AdvancedHigh-performanceBus):用于高性能系統(tǒng)模塊的連接,支持突發(fā)模式數(shù)據(jù)傳輸和事務(wù)分割;可以有效地連接處理器、片上和片外存儲器,支持流水線操作。APB(AdvancedPeripheralBus):用于較低性能外設(shè)的簡單連接,一般是接在AHB系統(tǒng)總線上的第二級總線。ARM處理器的先進技術(shù)測試接口ARMCPUSDRAMControlSRAMLCDControl橋并行接口串行接口TimerUART基于AMBA總線的典型系統(tǒng)AHB系統(tǒng)總線APB外部總線AMBA總線ARM微處理器的工作狀態(tài)
從編程的角度看,ARM微處理器的工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:ARM狀態(tài)
此時處理器執(zhí)行32位的字對齊的ARM指令Thumb狀態(tài)
此時處理器執(zhí)行16位的、半字對齊的Thumb指令
ARM處理器的工作狀態(tài)ARM與THUMBTHUMB指令是ARM指令的子集可以相互調(diào)用,只要遵循一定的調(diào)用規(guī)則Thumb指令與ARM指令的時間效率和空間效率關(guān)系為:存儲空間約為ARM代碼的60%~70%指令數(shù)比ARM代碼多約30%~40%存儲器為32位時ARM代碼比Thumb代碼快約40%存儲器為16位時Thumb比ARM代碼快約40~50%使用Thumb代碼,存儲器的功耗會降低約30%ARM處理器的工作狀態(tài)ARM處理器的工作狀態(tài)Thumb指令集具有靈活、小巧的特點ARM指令集支持ARM核所有的特性,具有高效、快速的特點狀態(tài)切換方法
ARM指令集和Thumb指令集均有切換處理器狀態(tài)的指令,并可在兩種工作狀態(tài)之間切換,在開始執(zhí)行代碼時,應(yīng)該處于ARM狀態(tài)。ARM處理器的工作狀態(tài)注意:兩個狀態(tài)之間的切換并不影響處理器模式或寄存器內(nèi)容。切換到Thumb狀態(tài)當操作數(shù)寄存器的狀態(tài)位(位0)為1時,可以采用執(zhí)行BX指令的方法,使微處理器從ARM狀態(tài)切換到Thumb狀態(tài)。當處理器處于Thumb狀態(tài)時發(fā)生異常(如IRQ、FIQ、Undef、Abort、SWI等),則異常處理返回時,自動切換到Thumb狀態(tài)。ARM處理器的工作狀態(tài);從Arm狀態(tài)切換到Thumb狀態(tài)
LDRR0,=Lable+1BXR0地址最低位為1,表示切換到Thumb狀態(tài)跳轉(zhuǎn)地址標號切換到ARM狀態(tài)當操作數(shù)寄存器的狀態(tài)位為0時,執(zhí)行BX指令時可以使微處理器從Thumb狀態(tài)切換到ARM狀態(tài)。在處理器進行異常處理時,把PC指針放入異常模式鏈接寄存器中,并從異常向量地址開始執(zhí)行程序,也可以使處理器切換到ARM狀態(tài)。ARM處理器的工作狀態(tài);從Thumb狀態(tài)切換到ARM狀態(tài)
LDRR0,=LableBXR0地址最低位為0,表示切換到ARM狀態(tài)跳轉(zhuǎn)地址標號
ARM體系結(jié)構(gòu)直接支持的數(shù)據(jù)類型字節(jié)8位半字16位(必須分配為占用兩個字節(jié))字32位(必須分配為占用4個字節(jié))1112342ARM直接支持的數(shù)據(jù)類型ARM微處理器的存儲器格式
ARM體系結(jié)構(gòu)所支持的最大尋址空間為4GB(232字節(jié))ARM體系結(jié)構(gòu)將存儲器看作是從0地址開始的字節(jié)的線性組合。從0字節(jié)到3字節(jié)放置第一個存儲的字數(shù)據(jù),從第4個字節(jié)到第7個字節(jié)放置第二個存儲的字數(shù)據(jù),依次排列。ARM體系結(jié)構(gòu)可以用兩種方法存儲字數(shù)據(jù),稱之為大端格式和小端格式。可以通過硬件的方式設(shè)置(沒有提供軟件的方式)端模式ARM處理器的存儲器組織大端格式
在這種格式中,字數(shù)據(jù)的高字節(jié)存儲在低地址中,而字數(shù)據(jù)的低字節(jié)則存放在高地址中ARM處理器的存儲器組織大端的數(shù)據(jù)存放格式低地址高地址地址A地址A+1地址A+2地址A+3最高有效字節(jié)的地址就是該word的地址最高有效字節(jié)位于最低地址worda=0xf6
73
4b
cdf6734bcd小端格式
低地址中存放的是字數(shù)據(jù)的低字節(jié),高地址存放的是字數(shù)據(jù)的高字節(jié)ARM處理器的存儲器組織小端的數(shù)據(jù)格式
低地址高地址地址A地址A+1地址A+2地址A+3最低有效字節(jié)的地址就是該word的地址最低有效字節(jié)位于最低地址worda=0xf6
73
4b
cdf6734bcd數(shù)據(jù)信息狀態(tài)信息控制信息數(shù)字量模擬量開關(guān)量連續(xù)幾位二進制形式表示的數(shù)或字符。如鍵盤輸入的信息以及打印機、顯示器輸出的信息等時間上連續(xù)變化的量,如溫度、壓力、流量等只有兩個狀態(tài)的量,如閥門的合與斷、電路的開與關(guān)等CPU與I/O設(shè)備之間的接口信息反映外設(shè)當前工作狀態(tài)的信息READY信號:輸入設(shè)備是否準備好BUSY信號:輸出設(shè)備是否忙……CPU向外部設(shè)備發(fā)送的控制命令信息讀寫控制信號時序控制信號中斷信號片選信號其它操作信號ARM處理器的I/O編址方式I/O端口的編址方式I/O端口的編址方法,即I/O端口的地址安排方式存儲器映射編址I/O映射編址I/O端口的地址與內(nèi)存地址統(tǒng)一編址,即I/O單元與內(nèi)存單元在同一地址空間I/O端口與內(nèi)存單元分開編址,即I/O單元與內(nèi)存單元都有自己獨立的地址空間ARM處理器的I/O編址方式存儲器映射編址I/O映射方式優(yōu)點可采用豐富的內(nèi)存操作指令訪問I/O單元無需單獨的I/O地址譯碼電路無需專用的I/O指令I(lǐng)/O單元不占用內(nèi)存空間I/O程序易讀缺點外設(shè)占用內(nèi)存空間I/O程序不易讀I/O操作指令僅有單一的傳送指令,I/O接口需有地址譯碼電路舉例ARM中,I/O端口與內(nèi)存單元統(tǒng)一編址Intel80X86系列,I/O端口與內(nèi)存單元分開編址,I/O端口有自己獨立的地址空間,其大小為64KBARM處理器的I/O編址方式ARM微處理器I/O編址方式ARM的I/O端口都是內(nèi)存映射的方式,即對I/O端口的訪問與內(nèi)存的訪問的方式完全一樣。通常將I/O所映射的存儲系統(tǒng)標識為非高速緩存(uncachable)和非緩沖(unbufferable)。ARM處理器的I/O編址方式七中處理器工作模式ARM處理器的工作模式處理器模式說明備注
用戶(usr)正常程序執(zhí)行模式不能直接切換到其它模式
系統(tǒng)(sys)運行操作系統(tǒng)的特權(quán)任務(wù)與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)
快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時進入此模式
中斷(irq)用于通用中斷處理IRQ異常響應(yīng)時進入此模式
管理(svc)操作系統(tǒng)保護模式系統(tǒng)復(fù)位和軟件中斷響應(yīng)時進入此模式
中止(abt)用于支持虛擬內(nèi)存和/或存儲器保護在ARM7TDMI沒有大用處
未定義(und)支持硬件協(xié)處理器的軟件仿真未定義指令異常響應(yīng)時進入此模式ARM微處理器:CPU模式User模式程序不能訪問有些受保護的資源只能通過異常的形式來改變CPU的當前運行模式特權(quán)模式可以存取系統(tǒng)中的任何資源System模式與User模式的運行環(huán)境一樣但是它可以不受任何限制的訪問任何資源該模式主要用于運行系統(tǒng)中的一些特權(quán)任務(wù)FIQ模式IRQ模式Supervisor模式Abort模式Undefined模式異常模式:主要是在外部中斷或者程序執(zhí)行非法操作時會觸發(fā)ARM處理器的工作模式用戶模式和特權(quán)模式除了用戶模式之外的其他6種處理器模式稱為特權(quán)模式特權(quán)模式下,程序可以訪問所有的系統(tǒng)資源,也可以任意地進行處理器模式的切換。特權(quán)模式中,除系統(tǒng)模式外,其他5種模式又稱為異常模式大多數(shù)的用戶程序運行在用戶模式下,此時,應(yīng)用程序不能夠訪問一些受操作系統(tǒng)保護的系統(tǒng)資源,應(yīng)用程序也不能直接進行處理器模式的切換。用戶模式下,當需要進行處理器模式切換時,應(yīng)用程序可以產(chǎn)生異常處理,在異常處理中進行處理器模式的切換。ARM處理器的工作模式ARM處理器的工作模式特權(quán)模式處理器模式說明備注
用戶(usr)正常程序工作模式不能直接切換到其它模式
系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務(wù)等與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)
快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時進入此模式
中斷(irq)用于通用中斷處理IRQ異常響應(yīng)時進入此模式
管理(svc)操作系統(tǒng)保護代碼系統(tǒng)復(fù)位和軟件中斷響應(yīng)時進入此模式
中止(abt)用于支持虛擬內(nèi)存和/或存儲器保護在ARM7TDMI沒有大用處
未定義(und)支持硬件協(xié)處理器的軟件仿真未定義指令異常響應(yīng)時進入此模式
除用戶模式外,其它模式均為特權(quán)模式。ARM內(nèi)部寄存器和一些片內(nèi)外設(shè)在硬件設(shè)計上只允許(或者可選為只允許)特權(quán)模式下訪問。此外,特權(quán)模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。
未定義(und)
中止(abt)
管理(svc)
中斷(irq)
快中斷(fiq)
系統(tǒng)(sys)ARM處理器的工作模式異常模式處理器模式說明備注
用戶(usr)正常程序工作模式不能直接切換到其它模式
系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務(wù)等與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)
快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時進入此模式
中斷(irq)用于通用中斷處理IRQ異常響應(yīng)時進入此模式
管理(svc)操作系統(tǒng)保護代碼系統(tǒng)復(fù)位和軟件中斷響應(yīng)時進入此模式
中止(abt)用于支持虛擬內(nèi)存和/或存儲器保護在ARM7TDMI沒有大用處
未定義(und)支持硬件協(xié)處理器的軟件仿真未定義指令異常響應(yīng)時進入此模式
未定義(und)
中止(abt)
管理(svc)
中斷(irq)
快中斷(fiq)
這五種模式稱為異常模式。它們除了可以通過程序切換進入外,也可以由特定的異常進入。當特定的異常出現(xiàn)時,處理器進入相應(yīng)的模式。每種異常模式都有一些獨立的寄存器,以避免異常退出時用戶模式的狀態(tài)不可靠。ARM處理器的工作模式用戶和系統(tǒng)模式處理器模式說明備注
用戶(usr)正常程序工作模式不能直接切換到其它模式
系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務(wù)等與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)
快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時進入此模式
中斷(irq)用于通用中斷處理IRQ異常響應(yīng)時進入此模式
管理(svc)操作系統(tǒng)保護代碼系統(tǒng)復(fù)位和軟件中斷響應(yīng)時進入此模式
中止(abt)用于支持虛擬內(nèi)存和/或存儲器保護在ARM7TDMI沒有大用處
未定義(und)支持硬件協(xié)處理器的軟件仿真未定義指令異常響應(yīng)時進入此模式
這兩種模式都不能由異常進入,而且它們使用完全相同的寄存器組。系統(tǒng)模式是特權(quán)模式,不受用戶模式的限制。操作系統(tǒng)在該模式下訪問用戶模式的寄存器就比較方便,而且操作系統(tǒng)的一些特權(quán)任務(wù)可以使用這個模式訪問一些受控的資源。
系統(tǒng)(sys)
用戶(usr)寄存器組織
ARM微處理器共有37個32位寄存器,其中31個為通用寄存器,6個為狀態(tài)寄存器。但是這些寄存器不能被同時訪問,具體哪些寄存器是可編程訪問的,取決微處理器的工作狀態(tài)及具體的運行模式。但在任何時候,通用寄存器R14~R0、程序計數(shù)器PC、一個或兩個狀態(tài)寄存器都是可訪問的。
ARM處理器的寄存器組織ARM狀態(tài)下的寄存器組織
未分組寄存器R0~R7分組寄存器R8~R14程序計數(shù)器PC(R15)ARM處理器的寄存器組織當前程序狀態(tài)寄存器CPSR(R16)未分組寄存器R0~R7在所有的運行模式下,未分組寄存器都指向同一個物理寄存器,他們未被系統(tǒng)用作特殊的用途,因此,在中斷或異常處理進行運行模式轉(zhuǎn)換時,由于不同的處理器運行模式均使用相同的物理寄存器,可能會造成寄存器中數(shù)據(jù)的破壞,這一點在進行程序設(shè)計時應(yīng)引起注意。ARM處理器的寄存器組織分組寄存器R8~R12每次所訪問的物理寄存器與處理器當前的運行模式有關(guān)R8~R12:每個寄存器對應(yīng)兩個不同的物理寄存器當使用fiq模式時,訪問寄存器R8_fiq~R12_fiq;當使用除fiq模式以外的其他模式時,訪問寄存器R8_usr~R12_usr。ARM處理器的寄存器組織分組寄存器R13~R14R13、R14:每個寄存器對應(yīng)6個不同的物理寄存器其中的一個是用戶模式與系統(tǒng)模式共用,另外5個物理寄存器對應(yīng)于其他5種不同的運行模式采用以下的記號來區(qū)分不同的物理寄存器:R13_<mode>R14_<mode>mode為以下幾種之一:usr、fiq、irq、svc、abt、und。ARM處理器的寄存器組織堆棧指針—R13R13在ARM指令中常用作堆棧指針,但這只是一種習(xí)慣用法,用戶也可使用其他的寄存器作為堆棧指針。在Thumb指令集中,某些指令強制性的要求使用R13作為堆棧指針。由于處理器的每種運行模式均有自己獨立的物理寄存器R13,在初始化部分,都要初始化每種模式下的R13,這樣,當程序的運行進入異常模式時,可以將需要保護的寄存器放入R13所指向的堆棧,而當程序從異常模式返回時,則從對應(yīng)的堆棧中恢復(fù)。ARM處理器的寄存器組織子程序連接寄存器—R14R14也稱作子程序連接寄存器或連接寄存器LR。當執(zhí)行BL子程序調(diào)用指令時,可以從R14中得到R15(程序計數(shù)器PC)的備份。其他情況下,R14用作通用寄存器。在每一種運行模式下,都可用R14保存子程序的返回地址,當用BL或BLX指令調(diào)用子程序時,將PC的當前值拷貝給R14,執(zhí)行完子程序后,又將R14的值拷貝回PC,即可完成子程序的調(diào)用返回。ARM處理器的寄存器組織程序計數(shù)器PC(R15)ARM狀態(tài)下,位[1:0]為0,位[31:2]用于保存PC;Thumb狀態(tài)下,位[0]為0,位[31:1]用于保存PC;R15雖然也可用作通用寄存器,但一般不這么使用,因為對R15的使用有一些特殊的限制,當違反了這些限制時,程序的執(zhí)行結(jié)果是未知的。由于ARM體系結(jié)構(gòu)采用了多級流水線技術(shù),對于ARM指令集而言,PC總是指向當前指令的下兩條指令的地址,即PC的值為當前指令的地址值加8個字節(jié)。ARM處理器的寄存器組織程序狀態(tài)寄存器(CPSR/SPSR)每一種運行模式下又都有一個專用的物理狀態(tài)寄存器,稱為SPSR(備份的程序狀態(tài)寄存器),異常發(fā)生時,SPSR用于保存CPSR的值,從異常退出時則可由SPSR來恢復(fù)CPSR。由于用戶模式和系統(tǒng)模式不屬于異常模式,他們沒有SPSR,當在這兩種模式下訪問SPSR,結(jié)果是未知的。ARM處理器的寄存器組織寄存器R16用作CPSR(當前程序狀態(tài)寄存器),CPSR可在任何運行模式下被訪問,它包括條件標志位、中斷禁止位、當前處理器模式標志位,以及其他一些相關(guān)的控制和狀態(tài)位。ARM狀態(tài)下的寄存器組織寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiq*R9(SB,v6)R9R9_fiq*R10(SL,v7)R10R10_fiq*R11(FP,v8)R11R11_fiq*R12(IP)R12R12_fiq*R13(SP)R13R13_svc*R13_abt*R13_und*R13_irq*R13_fiq*R14(LR)R14R14_svc*R14_abt*R14_und*R14_irq*R14_fiq*R15(PC)R15狀態(tài)寄存器R16(CPSR)CPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM狀態(tài)各模式下的寄存器SPSR_fiqSPSR_irqSPSR_undSPSR_abtSPSR_abtCPSRR15R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0所有的37個寄存器,分成兩大類:31個通用32位寄存器;6個狀態(tài)寄存器。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0用戶無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系統(tǒng)SPSR_abtCPSRR15R14_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)各模式下可以訪問的寄存器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0
在匯編語言中寄存器R0~R13為保存數(shù)據(jù)或地址值的通用寄存器。它們是完全通用的寄存器,不會被體系結(jié)構(gòu)作為特殊用途,并且可用于任何使用通用寄存器的指令。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0
其中R0~R7為未分組的寄存器,也就是說對于任何處理器模式,這些寄存器都對應(yīng)于相同的32位物理寄存器。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8
寄存器R8~R14為分組寄存器。它們所對應(yīng)的物理寄存器取決于當前的處理器模式,幾乎所有允許使用通用寄存器的指令都允許使用分組寄存器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8
寄存器R8~R12有兩個分組的物理寄存器。一個用于除FIQ模式之外的所有寄存器模式,另一個用于FIQ模式。這樣在發(fā)生FIQ中斷后,可以加速FIQ的處理速度。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器
寄存器R13、R14分別有6個分組的物理寄存器。一個用于用戶和系統(tǒng)模式,其余5個分別用于5種異常模式。R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq堆棧指針寄存器R13(SP)
寄存器R13常作為堆棧指針(SP)。在ARM指令集當中,沒有以特殊方式使用R13的指令或其它功能,只是習(xí)慣上都這樣使用。但是在Thumb指令集中存在使用R13的指令。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq鏈接寄存器R14(LR)R14為鏈接寄存器(LR),在結(jié)構(gòu)上有兩個特殊功能:在每種模式下,模式自身的R14版本用于保存子程序返回地址;當發(fā)生異常時,將R14對應(yīng)的異常模式版本設(shè)置為異常返回地址(有些異常有一個小的固定偏移量)。Lable程序A程序BR14R14(LR)寄存器與子程序調(diào)用BLLable地址A???MOVPC,LRR14(地址A)Lable???1.程序A執(zhí)行過程中調(diào)用程序B;操作流程2.程序跳轉(zhuǎn)至標號Lable,執(zhí)行程序B。同時硬件將“BLLable”指令的下一條指令所在地址存入R14(LR);3.程序B執(zhí)行最后,將R14寄存器的內(nèi)容放入PC,返回程序A;鏈接寄存器R14(LR)ARM處理器的寄存器組織寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序計數(shù)器R15(PC)
寄存器R15為程序計數(shù)器(PC),它指向正在取指的地址??梢哉J為它是一個通用寄存器,但是對于它的使用有許多與指令相關(guān)的限制或特殊情況。如果R15使用的方式超出了這些限制,那么結(jié)果將是不可預(yù)測的。讀R15的限制
正常操作時,從R15讀取的值是處理器正在取指的地址,即當前正在執(zhí)行指令的地址加上8個字節(jié)(兩條ARM指令的長度)。由于ARM指令總是以字為單位,所以R15寄存器的最低兩位總是為0。LDRR0,PC??????PCPC-4PC-8正在執(zhí)行正在譯碼正在取指流水線狀態(tài)地址程序代碼程序計數(shù)器R15(PC)ARM處理器的寄存器組織
當使用STR或STM指令保存R15時,會有一個例外。這些指令可能將當前指令地址加8字節(jié)或加12字節(jié)保存(將來可能還有其它數(shù)字)。偏移量是8還是12取決于具體的ARM芯片,但是對于一個確定的芯片,這個值是一個常量。所以最好避免使用STR和STM指令來保存R15,如果很難做到,那么應(yīng)當在程序中計算出該芯片的偏移量。讀R15的限制程序計數(shù)器R15(PC)ARM處理器的寄存器組織計算偏移量(PC值和當前指令地址的差)程序代碼:SUB R1,PC,#4 ;R1=下面STR指令的地址STR PC,[R0] ;保存STR指令地址+偏移量LDR R0,[R0] ;然后重裝SUB R0,R0,R1 ;計算偏移量04812ARM狀態(tài)程序計數(shù)器R15(PC)讀R15的限制ARM處理器的寄存器組織寫R15的限制
正常操作時,寫入R15的值被當作一個指令地址,程序從這個地址處繼續(xù)執(zhí)行(相當于執(zhí)行一次無條件跳轉(zhuǎn))。
程序計數(shù)器R15(PC)ARM處理器的寄存器組織寫R15的限制
由于ARM指令以字節(jié)為邊界,因此寫入R15的值最低兩位通常為0b00。具體的規(guī)則取決于內(nèi)核結(jié)構(gòu)的版本:在ARM結(jié)構(gòu)V3版及以下版本中,寫入R15的值的最低兩位被忽略,因此跳轉(zhuǎn)地址由指令的實際目標地址(寫入R15的值)和0xFFFFFFFC相與得到;在ARM結(jié)構(gòu)V4版及以上版本中,寫入R15的值的最低兩位為0,如果不是,結(jié)果將不可預(yù)測。程序計數(shù)器R15(PC)ARM處理器的寄存器組織寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq當前程序狀態(tài)寄存器CPSR
寄存器CPSR為當前程序狀態(tài)寄存器,在異常模式中,另外一個寄存器“程序狀態(tài)保存寄存器(SPSR)”可以被訪問。每種異常都有自己的SPSR,在進入異常時它保存CPSR的當前值,異常退出時可通過它恢復(fù)CPSR。Thumb狀態(tài)下的寄存器組織
程序可以直接訪問8個通用寄存器(R0~R7)、程序計數(shù)器(PC)、堆棧指針(SP)、連接寄存器(LR)和CPSR。同樣,每一種特權(quán)模式下都有一組SP、LR和SPSR。
ARM處理器的寄存器組織Thumb狀態(tài)下的寄存器集是ARM狀態(tài)下寄存器集的一個子集Thumb狀態(tài)下的寄存器組織圖ARM處理器的寄存器組織Thumb狀態(tài)下的寄存器與ARM狀態(tài)下的寄存器關(guān)系圖ARM處理器的寄存器組織R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R0
堆棧指針(R13)
連接寄存器(R14)
程序計數(shù)器(R15)
低寄存器高寄存器在Thumb狀態(tài)中訪問高寄存器
在Thumb狀態(tài)中,高寄存器(R8~R15)不是標準寄存器集的一部分。匯編語言程序員對它們的訪問受到限制??梢允褂肕OV、CMP和ADD指令對高寄存器操作。ARM處理器的寄存器組織當前程序狀態(tài)寄存器
ARM體系結(jié)構(gòu)包含一個當前程序狀態(tài)寄存器(CPSR)和五個備份的程序狀態(tài)寄存器(SPSRs)。備份的程序狀態(tài)寄存器用來進行異常處理,其功能包括:保存ALU中的當前操作信息控制允許和禁止中斷設(shè)置處理器的運行模式ARM處理器的寄存器組織程序狀態(tài)寄存器的每一位的安排
ARM處理器的寄存器組織NZCV——IM0M1M2M3M4TF...313029282726876543210條件代碼標志保留控制位溢出標志oVerflow進位或借位擴展Carry零Zero負或小于NegativeIRQ禁止InterruptFIQ禁止Fast狀態(tài)位Thumb模式位ModeNZCVIM0M1M2M3M4TFCPSR寄存器的格式程序狀態(tài)寄存器的條件碼標志
在ARM狀態(tài)下,絕大多數(shù)的指令都是有條件執(zhí)行的。在Thumb狀態(tài)下,僅有分支指令是有條件執(zhí)行的。
ARM處理器的寄存器組織N、Z、C、V均為條件碼標志位。它們的內(nèi)容可被算術(shù)或邏輯運算的結(jié)果所改變,并且可以決定某條指令是否被執(zhí)行程序狀態(tài)寄存器的控制位
狀態(tài)寄存器的低8位(I、F、T和M[4:0])稱為控制位,發(fā)生異常時這些位可以被改變。如果處理器運行特權(quán)模式,這些位也可以由程序修改。T標志位:該位反映處理器的運行狀態(tài)ARM體系結(jié)構(gòu)v5及以上的版本的T系列處理器,當該位為1時,程序運行于Thumb狀態(tài),否則運行于ARM狀態(tài)。ARM體系結(jié)構(gòu)v5及以上的版本的非T系列處理器,當該位為1時,執(zhí)行下一條指令以引起為定義的指令異常;當該位為0時,表示運行于ARM狀態(tài)。運行模式位M[4:0]是模式位,決定處理器的運行模式
ARM處理器的寄存器組織中斷禁止位I、F:I=1禁止IRQ中斷;F=1禁止FIQ中斷。異常(Exceptions)
ARM體系結(jié)構(gòu)中的異常,與8位/16位體系結(jié)構(gòu)的中斷有很大的相似之處,但異常與中斷的概念并不完全等同。
ARM處理器的異常當正常的程序執(zhí)行流程發(fā)生暫時的停止時,稱之為異常,例如處理一個外部的中斷請求。在處理異常之前,當前處理器的狀態(tài)必須保留,這樣當異常處理完成之后,當前程序可以繼續(xù)執(zhí)行。處理器允許多個異常同時發(fā)生,它們將會按固定的優(yōu)先級進行處理。ARM體系結(jié)構(gòu)所支持的異常類型
異常類型具體含義復(fù)位復(fù)位電平有效時,產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位處理程序處執(zhí)行。未定義指令遇到不能處理的指令時,產(chǎn)生未定義指令異常。軟件中斷執(zhí)行SWI指令產(chǎn)生,用于用戶模式下的程序調(diào)用特權(quán)操作指令。指令預(yù)取中止處理器預(yù)取指令的地址不存在,或該地址不允許當前指令訪問,產(chǎn)生指令預(yù)取中止異常。數(shù)據(jù)中止處理器數(shù)據(jù)訪問指令的地址不存在,或該地址不允許當前指令訪問時,產(chǎn)生數(shù)據(jù)中止異常。IRQ外部中斷請求有效,且CPSR中的I位為0時,產(chǎn)生IRQ異常。FIQ快速中斷請求引腳有效,且CPSR中的F位為0時,產(chǎn)生FIQ異常。ARM處理器的異常對異常的響應(yīng)
當一個異常出現(xiàn)以后,ARM微處理器會執(zhí)行以下幾步操作將下一條指令的地址存入相應(yīng)連接寄存器LR,以便程序在處理異常返回時能從正確的位置重新開始執(zhí)行。將CPSR復(fù)制到相應(yīng)的SPSR中。根據(jù)異常類型,強制設(shè)置CPSR的運行模式位。強制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處。
ARM處理器的異常注:異常總是在ARM狀態(tài)中進行處理。當處理器處于Thumb狀態(tài)時發(fā)生了異常,在異常向量地址裝入PC時,會自動切換到ARM狀態(tài)。置位中斷禁止標志,這樣可以防止不受控制的異常嵌套。從異常返回異常處理完畢之后,ARM微處理器會執(zhí)行以下幾步操作從異常返回:將連接寄存器LR的值減去相應(yīng)的偏移量后送到PC中。將SPSR復(fù)制回CPSR中。若在進入異常處理時設(shè)置了中斷禁止位,要在此清除。ARM處理器的異常注:恢復(fù)CPSR的動作會將T、F和I位自動恢復(fù)為異常發(fā)生前的值。程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組進入異常過程
程序在系統(tǒng)模式下運行用戶程序,假定當前處理器狀態(tài)為Thumb狀態(tài),用戶程序運行時發(fā)生IRQ中斷,硬件完成以下動作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV置位I位(禁止IRQ中斷)清零T位(進入ARM狀態(tài))設(shè)置MOD位,切換處理器模式至IRQ模式將下一條指令的地址存入IRQ模式的LR寄存器將CPSR寄存器內(nèi)容存入IRQ模式的SPSR寄存器將跳轉(zhuǎn)地址存入PC,實現(xiàn)跳轉(zhuǎn)IRQ0?1...????BackAddrJumpAddrJumpSYS1?0...????“?”表示對該位不關(guān)心ARM處理器的異常在異常處理結(jié)束后,異常處理程序完成以下動作:程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組退出異常過程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV將SPSR寄存器的值復(fù)制回CPSR寄存器;將LR寄存的值減去一個常量后復(fù)制到PC寄存器,跳轉(zhuǎn)到被中斷的用戶程序。IRQ0?1...????BackAddrJumpAddrreturnSYS1?0...????SYS1?0...????BackAddr-偏移量Jump“?”表示對該位不關(guān)心ARM處理器的異常FIQ(FastInterruptRequest)若將CPSR的F位置為1,則會禁止FIQ中斷,若將CPSR的F位清零,處理器會在指令執(zhí)行時檢查FIQ的輸入。注意只有在特權(quán)模式下才能改變F位的狀態(tài)。
可由外部通過對處理器上的nFIQ引腳輸入低電平產(chǎn)生FIQ。不管是在ARM狀態(tài)還是在Thumb狀態(tài)下進入FIQ模式,F(xiàn)IQ處理程序均可以執(zhí)行以下指令從FIQ模式返回:
SUBSPC,R14_fiq,#4ARM處理器的異常FIQ異常是為了支持數(shù)據(jù)傳輸或者通道處理而設(shè)計的。IRQ(InterruptRequest)
若將CPSR的I位置為1,則會禁止IRQ中斷,若將CPSR的I位清零,處理器會在指令執(zhí)行完之前檢查IRQ的輸入。注意只有在特權(quán)模式下才能改變I位的狀態(tài)。不管是在ARM狀態(tài)還是在Thumb狀態(tài)下進入IRQ模式,IRQ處理程序均可以執(zhí)行以下指令從IRQ模式返回:
SUBSPC,R14_irq,#4ARM處理器的異常IRQ異常屬于正常的中斷請求,可通過對處理器的nIRQ引腳輸入低電平產(chǎn)生,IRQ的優(yōu)先級低于FIQ,當程序執(zhí)行進入FIQ異常時,IRQ可能被屏蔽。ABORT(中止)
中止異常包括兩種類型:指令預(yù)取中止:發(fā)生在指令預(yù)取時。數(shù)據(jù)中止:發(fā)生在數(shù)據(jù)訪問時。當指令預(yù)取訪問存儲器
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 社區(qū)醫(yī)學(xué)課題申報書范文
- 寫勞務(wù)合同合同范本
- 議政調(diào)研課題申報書
- 課題申報書課題名稱字體
- 市課題申報書
- 2024用電信息采集終端
- 廚房用油供貨合同范本
- 壓濾機合同范本
- 合同范本文書
- 勞動合同范例錯
- 行人過街調(diào)查表
- 弟子規(guī)全文及解釋精簡打印版
- 《畜牧獸醫(yī)行政法規(guī)》教案
- 《祖父的園子》PPT課件【精美版】
- 新概念英語第一冊期末測試試卷附答案
- GB/T 1689-1998硫化橡膠耐磨性能的測定(用阿克隆磨耗機)
- FZ/T 74001-2020紡織品針織運動護具
- 強制執(zhí)行申請書表格
- 二年級看圖寫話春天來了(課堂PPT)
- 房建市政項目全過程工程咨詢招標文件范本
- 2023年南充臨江東方發(fā)展實業(yè)集團有限公司招聘筆試題庫及答案解析
評論
0/150
提交評論