嵌入式系統(tǒng)原理及應(yīng)用教程_第1頁
嵌入式系統(tǒng)原理及應(yīng)用教程_第2頁
嵌入式系統(tǒng)原理及應(yīng)用教程_第3頁
嵌入式系統(tǒng)原理及應(yīng)用教程_第4頁
嵌入式系統(tǒng)原理及應(yīng)用教程_第5頁
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

嵌入式系統(tǒng)原理及應(yīng)用教程第1頁,共100頁,2023年,2月20日,星期一ARM公司簡(jiǎn)介

ARM是AdvancedRISCMachines的縮寫。1991年ARM公司成立于英國(guó)劍橋,它是一家微處理器行業(yè)的知名企業(yè),該企業(yè)設(shè)計(jì)了大量高性能、廉價(jià)、耗能低的RISC(精簡(jiǎn)指令集)處理器。

公司的特點(diǎn)是只設(shè)計(jì)芯片,而不生產(chǎn)。它將技術(shù)授權(quán)給世界上許多著名的半導(dǎo)體、軟件和OEM廠商,并提供服務(wù)。第2頁,共100頁,2023年,2月20日,星期一ARM公司簡(jiǎn)介將技術(shù)授權(quán)給其它芯片廠商形成各具特色的ARM芯片...第3頁,共100頁,2023年,2月20日,星期一ARM(AdvancedRISCMachines)有3種含義一個(gè)公司的名稱一類微處理器的通稱一種技術(shù)的名稱第4頁,共100頁,2023年,2月20日,星期一采用RISC架構(gòu)的ARM微處理器一般具有如下特點(diǎn):體積小、低功耗、低成本、高性能;支持Thumb(16位)/ARM(32位)雙指令集,能很好的兼容8位/16位器件;大量使用寄存器,指令執(zhí)行速度更快;大多數(shù)數(shù)據(jù)操作都在寄存器中完成;尋址方式靈活簡(jiǎn)單,執(zhí)行效率高;指令長(zhǎng)度固定。第5頁,共100頁,2023年,2月20日,星期一

ARM處理器的產(chǎn)品系列非常廣,包括ARM7、ARM9、ARM9E、ARM10E、ARM11和SecurCore、Cortex等。以及其它廠商基于ARM體系結(jié)構(gòu)的處理器,除了具有ARM體系結(jié)構(gòu)的共同特點(diǎn)以外,每一系列提供一套特定的性能來滿足設(shè)計(jì)者對(duì)功耗、性能、體積的需求。

第6頁,共100頁,2023年,2月20日,星期一ARM公司定義了7種ARM指令集體系結(jié)構(gòu)版本。ARM版本Ⅰ:V1版架構(gòu),在原型機(jī)ARM1出現(xiàn)過,只有26位尋址空間,沒有用于商業(yè)產(chǎn)品。ARM版本Ⅱ:V2版架構(gòu),對(duì)V1版進(jìn)行了擴(kuò)展,例如ARM2和ARM3(V2a)架構(gòu)。包含了對(duì)32位乘法指令和協(xié)處理器指令的支持。ARM版本Ⅲ:V3版架構(gòu),在1990年設(shè)計(jì)ARM6中采用了版本3。具有片上高速緩存、MMU和寫緩沖等功能。尋址空間增至32位(4GB)。目前V1~V3版本目前都已廢棄。第7頁,共100頁,2023年,2月20日,星期一ARM版本Ⅳ:V4版架構(gòu),在V3版上作了進(jìn)一步擴(kuò)充,V4版架構(gòu)是目前應(yīng)用最廣的ARM體系結(jié)構(gòu),ARM7、ARM8、ARM9和StrongARM都采用該架構(gòu)。ARM版本Ⅴ:V5版架構(gòu),是在V4版基礎(chǔ)上增加了一些新的指令,如:轉(zhuǎn)移BLX指令、計(jì)數(shù)前導(dǎo)零CLZ指令、BRK中斷指令,DSP指令集(E增強(qiáng)型)、在ARM10和Xscale都采用該版架構(gòu)。ARM版本Ⅵ:V6版架構(gòu),V6版架構(gòu)是2001年發(fā)布的,首先在2002年春季發(fā)布的ARM11處理器中使用。采用單指令多數(shù)據(jù)SIMD(SingleInstruction,MultipleData)技術(shù),將語音及圖像處理功能提高了4倍。第8頁,共100頁,2023年,2月20日,星期一ARM版本Ⅶ:V7版架構(gòu),ARMv7架構(gòu)是ARMv6架構(gòu)的基礎(chǔ)上誕生的,該架構(gòu)采用了Thumb-2技術(shù)。Thumb-2技術(shù)比純32位代碼少使用31%的內(nèi)存,減小了系統(tǒng)開銷;同時(shí)能夠比已有的基于Thumb技術(shù)的解決方案提高38%的性能。V7版架構(gòu)分為三類:Cortex-A系列,應(yīng)用處理器,目前提供Cortex-A5、Cortex-A8、Cortex-A9、Cortex-A15等產(chǎn)品。Cortex-M系列,嵌入式控制器,目前提供Cortex-M4、Cortex-M3、Cortex-M1FPGA和Cortex-M0處理器。Cortex-R系列,深嵌入式實(shí)時(shí)系統(tǒng),目前,此系列包含Cortex-R4和Cortex-R4F處理器。第9頁,共100頁,2023年,2月20日,星期一ARM命名格式如下:

ARM{x}{y}{z}{T}{D}{M}{I}{E}{J}{F}{-S}x:系列號(hào),例如ARM7中的“7”、ARM9中的“9”;y:內(nèi)部存儲(chǔ)管理/保護(hù)單元,例如ARM72中的“2”、ARM94中的“4”;z:內(nèi)含有高速緩存Cache;T:支持16位的Thumb指令集;D:支持JTAG片上調(diào)試;M:支持長(zhǎng)乘法操作(64位結(jié)果)的ARM指令,包含快速乘法器;I:帶有嵌入式追蹤宏單元ETM(EmbeddedTraceMacro),用來設(shè)置斷點(diǎn)和觀察點(diǎn);第10頁,共100頁,2023年,2月20日,星期一E:增強(qiáng)型DSP指令(基于TDMI);J:含有Java加速器Jazelle,與Java虛擬機(jī)相比,Java加速器Jazelle使Java代碼運(yùn)行速度提高了8倍,功耗降低到原來的80%;F:向量浮點(diǎn)運(yùn)算單元;S:可綜合版本,意味著處理器內(nèi)核是以源代碼形式提供的。版本V7用字符串ARMCortex開頭,隨后附加-A、-R、-M表示處理器的市場(chǎng)定位方向,其后跟有數(shù)字,表示該方向產(chǎn)品的序列號(hào)。第11頁,共100頁,2023年,2月20日,星期一第12頁,共100頁,2023年,2月20日,星期一第13頁,共100頁,2023年,2月20日,星期一版本版本變種系列號(hào)處理器核V1V1ARM1ARM1V2V2ARM2ARM2V2aARM2aSARM3ARM3V3V3ARM6ARM6、ARM600、ARM610ARM7ARM7、ARM700、ARM710V4V4TARM7TDMI、ARM710T、ARM720T、ARM740TV4ARM8StrongARM、ARM8、ARM810V4TARM9ARM9TDMI、ARM920T、ARM940TV5V5TEARM9EARM10ARM10TDMI、ARM10EV6V6ARM11ARM11、ARM11562-S、ARM1156T2F-S、ARM11JZF-SV7V7-ACotex-AARMCotex-A8、ARMCotex-A9、ARMCotex-A5、ARMCotex-A15、V7-RCotex-RARMCotex-R4、V7-MCotex-MARMCotex-M3、ARMCotex-M0、ARMCotex-M1第14頁,共100頁,2023年,2月20日,星期一2.2.1RISC體系結(jié)構(gòu)1.嵌入式CISC微處理器傳統(tǒng)的CISC(ComplexInstructionSetComputer,復(fù)雜指令集計(jì)算機(jī))結(jié)構(gòu)有其固有的缺點(diǎn),即隨著計(jì)算機(jī)技術(shù)的發(fā)展而不斷引入新的復(fù)雜的指令集,為支持這些新增的指令,計(jì)算機(jī)的體系結(jié)構(gòu)會(huì)越來越復(fù)雜,然而,在CISC指令集的各種指令中,其使用頻率卻相差懸殊,大約有20%的指令會(huì)被反復(fù)使用,占整個(gè)程序代碼的80%。而余下的80%的指令卻不經(jīng)常使用,在程序設(shè)計(jì)中只占20%,顯然,這種結(jié)構(gòu)是不太合理的。第15頁,共100頁,2023年,2月20日,星期一2.嵌入式RISC微處理器

基于以上的不合理性,1979年美國(guó)加州大學(xué)伯克利分校提出了RISC(ReducedInstructionSetComputer,精簡(jiǎn)指令集計(jì)算機(jī))的概念, RISC是精簡(jiǎn)指令集計(jì)算機(jī),但RISC并非只是簡(jiǎn)單地去減少指令,而是把著眼點(diǎn)放在了如何使計(jì)算機(jī)的結(jié)構(gòu)更加簡(jiǎn)單合理地提高運(yùn)算速度上。RISC結(jié)構(gòu)優(yōu)先選取使用頻最高的簡(jiǎn)單指令,拋棄復(fù)雜指令,固定指令長(zhǎng)度,減少指令格式和尋址方式,以控制邏輯為主,不用或少用微碼控制等措施來達(dá)到上述目的。第16頁,共100頁,2023年,2月20日,星期一RISC體系結(jié)構(gòu)應(yīng)具有如下特點(diǎn):采用固定長(zhǎng)度的指令格式,指令歸整、簡(jiǎn)單、基本尋址方式有2~3種。使用單周期指令,便于流水線操作執(zhí)行。大量使用寄存器,數(shù)據(jù)處理指令只對(duì)寄存器進(jìn)行操作,只有加載/存儲(chǔ)指令可以訪問存儲(chǔ)器,以提高指令的執(zhí)行效率。除此以外,ARM體系結(jié)構(gòu)還采用了一些特別的技術(shù),在保證高性能的前提下盡量縮小芯片的面積,并降低功耗.第17頁,共100頁,2023年,2月20日,星期一RISC體系結(jié)構(gòu)應(yīng)具有如下特點(diǎn):所有的指令都可根據(jù)前面的執(zhí)行結(jié)果決定是否被執(zhí)行,從而提高指令的執(zhí)行效率??捎眉虞d/存儲(chǔ)指令批量傳輸數(shù)據(jù),以提高數(shù)據(jù)的傳輸效率。可在一條數(shù)據(jù)處理指令中同時(shí)完成邏輯處理和移位處理。在循環(huán)處理中使用地址的自動(dòng)增減來提高運(yùn)行效率。第18頁,共100頁,2023年,2月20日,星期一RISC和CISC之間的主要區(qū)別:指

標(biāo)RISCCISC指令集一個(gè)周期執(zhí)行一條指令,通過簡(jiǎn)單指令的組合實(shí)理復(fù)雜操作;指令長(zhǎng)度固定。指令長(zhǎng)度不固定,執(zhí)行需要多個(gè)周期。流水線流水線每周期前進(jìn)一步。指令的執(zhí)行需要調(diào)用微代碼的一個(gè)微程序。寄存器更多通用寄存器。用于特定目的的專用寄存器。Load/Store結(jié)構(gòu)獨(dú)立的Load和Store指令完成數(shù)據(jù)在寄存器和外部存儲(chǔ)器之間的傳輸。處理器能夠直接處理存儲(chǔ)器中的數(shù)據(jù)。第19頁,共100頁,2023年,2月20日,星期一2.2.2流水線技術(shù)CPU中的流水線技術(shù)是一種將指令分解為多步,并讓不同指令的各步操作重疊執(zhí)行,從而實(shí)現(xiàn)幾條指令并行處理,以加速程序運(yùn)行過程的技術(shù)。ARM7采用三級(jí)流水線、ARM9采用五級(jí)流水線,ARM10采用六級(jí)流水線、ARM11采用八級(jí)流水線。

第20頁,共100頁,2023年,2月20日,星期一2.2.2流水線技術(shù)以ARM7三級(jí)流水線為例,由三個(gè)獨(dú)立的部件分別執(zhí)行:取指,從存儲(chǔ)器中裝載一條指令到CPU中;解碼,識(shí)別并解釋將要被執(zhí)行的指令;執(zhí)行,將解碼識(shí)別的指令進(jìn)行計(jì)算處理并將結(jié)果寫回寄存器。第21頁,共100頁,2023年,2月20日,星期一第22頁,共100頁,2023年,2月20日,星期一第23頁,共100頁,2023年,2月20日,星期一哈佛結(jié)構(gòu)是一種將程序中指令和數(shù)據(jù)分開存儲(chǔ)的存儲(chǔ)器結(jié)構(gòu)。它是一種并行存儲(chǔ)體系結(jié)構(gòu),程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器采用不同的總線,從而提供了較大的存儲(chǔ)器帶寬。馮·諾伊曼結(jié)構(gòu)也稱普林斯頓結(jié)構(gòu),是一種將程序指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器合并在一起的存儲(chǔ)器結(jié)構(gòu)。程序指令存儲(chǔ)地址和數(shù)據(jù)存儲(chǔ)地址指向同一個(gè)存儲(chǔ)器的不同物理位置。ARM7采用了普林斯頓結(jié)構(gòu),在隨后的ARM9、ARM10、ARM11、ARMCortex等處理器采用了哈佛結(jié)構(gòu),第24頁,共100頁,2023年,2月20日,星期一馮·諾依曼體系結(jié)構(gòu)模型第25頁,共100頁,2023年,2月20日,星期一哈佛體系結(jié)構(gòu)模型第26頁,共100頁,2023年,2月20日,星期一AMBA(AdvancedMicrocontrollerBusArchitec-ture)總線規(guī)范:是ARM公司設(shè)計(jì)的一種用于高性能嵌入式系統(tǒng)的總線標(biāo)準(zhǔn)。AMBA2.0規(guī)范中定義了三種可以組合使用的不同類型的總線:AHB(AdvancedHigh-performanceBus)、ASB(AdvancedSystemBus)和APB(AdvancedPerpheralBus)。AHB總線適用于連接高性能和高時(shí)鐘頻率的系統(tǒng)模塊;ASB總線適用于連接高性能的系統(tǒng)模塊。它的讀/寫數(shù)據(jù)總線采用的是同一條雙向數(shù)據(jù)總線;APB總線適用于連接低功耗的外部設(shè)備模塊;第27頁,共100頁,2023年,2月20日,星期一第28頁,共100頁,2023年,2月20日,星期一ARM處理器共有37個(gè)寄存器,被分為若干個(gè)組(BANK),這些寄存器包括:31個(gè)通用寄存器,包括程序計(jì)數(shù)器(PC指針),均為32位的寄存器。6個(gè)狀態(tài)寄存器,用以標(biāo)識(shí)CPU的工作狀態(tài)及程序的運(yùn)行狀態(tài),均為32位,目前只使用了其中的一部分。第29頁,共100頁,2023年,2月20日,星期一寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(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第30頁,共100頁,2023年,2月20日,星期一ARM處理器又有7種不同的處理器模式,在每一種處理器模式下均有一組相應(yīng)的寄存器與之對(duì)應(yīng)。即在任意一種處理器模式下,可訪問的寄存器包括15個(gè)通用寄存器(R0~R14)、1~2個(gè)狀態(tài)寄存器和程序計(jì)數(shù)器。在所有的寄存器中,有些是在7種處理器模式下共用的同一個(gè)物理寄存器,而有些寄存器則是在不同的處理器模式下有不同的物理寄存器。第31頁,共100頁,2023年,2月20日,星期一第32頁,共100頁,2023年,2月20日,星期一第33頁,共100頁,2023年,2月20日,星期一ARM微處理器在較新的體系結(jié)構(gòu)中支持兩種指令集:ARM指令集和Thumb指令集。ARM指令為32位的長(zhǎng)度Thumb指令為16位長(zhǎng)度Thumb指令集為ARM指令集的功能子集,但與等價(jià)的ARM代碼相比較,可節(jié)省30%~40%以上的存儲(chǔ)空間,同時(shí)具備32位代碼的所有優(yōu)點(diǎn)。第34頁,共100頁,2023年,2月20日,星期一

從應(yīng)用的角度出發(fā),對(duì)在選擇ARM微處理器時(shí)所應(yīng)考慮的主要問題:ARM微處理器內(nèi)核的選擇 從前面所介紹的內(nèi)容可知,ARM微處理器包含一系列的內(nèi)核結(jié)構(gòu),以適應(yīng)不同的應(yīng)用領(lǐng)域,用戶如果希望使用WinCE或標(biāo)準(zhǔn)Linux等操作系統(tǒng)以減少軟件開發(fā)時(shí)間,就需要選擇ARM720T以上帶有MMU(MemoryManagementUnit)功能的ARM芯片,ARM720T、ARM920T、ARM922T、ARM946T、Strong-ARM都帶有MMU功能。 而ARM7TDMI則沒有MMU,不支持WindowsCE和標(biāo)準(zhǔn)Linux,但目前有uCLinux等不需要MMU支持的操作系統(tǒng)可運(yùn)行于ARM7TDMI硬件平臺(tái)之上。事實(shí)上,uCLinux已經(jīng)成功移植到多種不帶MMU的微處理器平臺(tái)上,并在穩(wěn)定性和其他方面都有上佳表現(xiàn)。第35頁,共100頁,2023年,2月20日,星期一系統(tǒng)的工作頻率 系統(tǒng)的工作頻率在很大程度上決定了ARM微處理器的處理能力。ARM7系列微處理器的典型處理速度為0.9MIPS/MHz,常見的ARM7芯片系統(tǒng)主時(shí)鐘為20MHz-133MHz。ARM9系列微處理器的典型處理速度為1.1MIPS/MHz,常見的ARM9的系統(tǒng)主時(shí)鐘頻率為100MHz-233MHz。ARM10最高可以達(dá)到700MHz。 不同芯片對(duì)時(shí)鐘的處理不同,有的芯片只需要一個(gè)主時(shí)鐘頻率,有的芯片內(nèi)部時(shí)鐘控制器可以分別為ARM核和USB、UART、DSP、音頻等功能部件提供不同頻率的時(shí)鐘。第36頁,共100頁,2023年,2月20日,星期一芯片內(nèi)存儲(chǔ)器的容量

大多數(shù)的ARM微處理器片內(nèi)存儲(chǔ)器的容量都不太大,需要用戶在設(shè)計(jì)系統(tǒng)時(shí)外擴(kuò)存儲(chǔ)器. 但也有部分芯片具有相對(duì)較大的片內(nèi)存儲(chǔ)空間,如ATMEL的AT91F40162就具有高達(dá)2MB的片內(nèi)程序存儲(chǔ)空間,用戶在設(shè)計(jì)時(shí)可考慮選用這種類型,以簡(jiǎn)化系統(tǒng)的設(shè)計(jì)。第37頁,共100頁,2023年,2月20日,星期一片內(nèi)外圍電路的選擇 幾乎所有的ARM芯片均根據(jù)各自不同的應(yīng)用領(lǐng)域,擴(kuò)展了相關(guān)功能模塊,并集成在芯片之中,稱之為片內(nèi)外圍電路. 如USB接口、IIS接口、LCD控制器、鍵盤接口、RTC、ADC和DAC、DSP協(xié)處理器等,設(shè)計(jì)者應(yīng)分析系統(tǒng)的需求,盡可能采用片內(nèi)外圍電路完成所需的功能,這樣既可簡(jiǎn)化系統(tǒng)的設(shè)計(jì),同時(shí)提高系統(tǒng)的可靠性。第38頁,共100頁,2023年,2月20日,星期一ARM微處理器的工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:ARM狀態(tài),此時(shí)處理器執(zhí)行32位的字對(duì)齊的ARM指令;Thumb狀態(tài),此時(shí)處理器執(zhí)行16位的、半字對(duì)齊的Thumb指令。ARM指令集和Thumb指令集均有切換處理器狀態(tài)的指令,并可在兩種工作狀態(tài)之間切換,但ARM微處理器在開始執(zhí)行代碼時(shí),應(yīng)該處于ARM狀態(tài)。第39頁,共100頁,2023年,2月20日,星期一進(jìn)入Thumb狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位(位0)為1時(shí),可以采用執(zhí)行BX指令的方法,使微處理器從ARM狀態(tài)切換到Thumb狀態(tài)。此外,當(dāng)處理器處于Thumb狀態(tài)時(shí)發(fā)生異常(如IRQ、FIQ、Undef、Abort、SWI等),則異常處理返回時(shí),自動(dòng)切換到Thumb狀態(tài)。進(jìn)入ARM狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位為0時(shí),執(zhí)行BX指令時(shí)可以使微處理器從Thumb狀態(tài)切換到ARM狀態(tài)。此外,在處理器進(jìn)行異常處理時(shí),把PC指針放入異常模式鏈接寄存器中,并從異常向量地址開始執(zhí)行程序,也可以使處理器切換到ARM狀態(tài)。第40頁,共100頁,2023年,2月20日,星期一狀態(tài)切換的一個(gè)例子地址最低位為0,表示切換到ARM狀態(tài)

使用BX指令將ARM內(nèi)核的操作狀態(tài)在ARM狀態(tài)和Thumb狀態(tài)之間進(jìn)行切換。ARM指令集Thumb指令集

CODE32 LDR R0,=Lable+1 BX R0 CODE16Lable MOV R1,#12

CODE16 LDR R0,=Lable BX R0 CODE32Lable MOV R1,#10地址最低位為1,表示切換到Thumb狀態(tài)跳轉(zhuǎn)地址標(biāo)號(hào)執(zhí)行完BX指令,處理器切換到Thumb狀態(tài),開始執(zhí)行Thumb指令程序代碼指令集關(guān)系

從ARM狀態(tài)切換到Thumb狀態(tài)的程序代碼如下:從Thumb狀態(tài)切換到ARM狀態(tài)的程序代碼如下:執(zhí)行完BX指令,處理器切換到ARM狀態(tài),開始執(zhí)行ARM指令第41頁,共100頁,2023年,2月20日,星期一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(232字節(jié))。ARM體系結(jié)構(gòu)可以用兩種方法存儲(chǔ)字?jǐn)?shù)據(jù),稱之為大端格式小端格式第42頁,共100頁,2023年,2月20日,星期一大端格式 在這種格式中,字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中,而字?jǐn)?shù)據(jù)的低字節(jié)則存放在高地址中,如圖所示。3124231615870字地址84089101145670123低地址高地址第43頁,共100頁,2023年,2月20日,星期一小端格式 在這種格式中,字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在高地址中,而字?jǐn)?shù)據(jù)的低字節(jié)則存放在低地址中,如圖所示。低地址高地址3124231615870字地址8401110987654321·0第44頁,共100頁,2023年,2月20日,星期一ARM微處理器的指令長(zhǎng)度可以是32位(在ARM狀態(tài)下)16位(在Thumb狀態(tài)下)ARM微處理器中支持字節(jié)(8位)、半字(16位)、字(32位)三種數(shù)據(jù)類型.其中,字需要4字節(jié)對(duì)齊(地址的低兩位為0)、半字需要2字節(jié)對(duì)齊(地址的最低位為0)。第45頁,共100頁,2023年,2月20日,星期一

在復(fù)雜的嵌入式系統(tǒng)設(shè)計(jì)時(shí),越來越多的會(huì)選用帶有存儲(chǔ)管理單元(MMU)的微處理器芯片。 MMU完成的主要功能有:將主存地址從虛擬存儲(chǔ)空間映射到物理存儲(chǔ)空間。存儲(chǔ)器訪問權(quán)限控制。設(shè)置虛擬存儲(chǔ)空間的緩沖特性等。第46頁,共100頁,2023年,2月20日,星期一虛擬地址存儲(chǔ)系統(tǒng)示意圖邏輯地址對(duì)換主存輔助存儲(chǔ)器物理地址MMU微處理器第47頁,共100頁,2023年,2月20日,星期一

ARM920T微處理器核的MMU采用了分頁虛擬存儲(chǔ)管理方式。它把虛擬存儲(chǔ)空間分成一個(gè)個(gè)固定大小的頁,把物理主存儲(chǔ)的空間也分成同樣大小的一個(gè)個(gè)頁。 通過查詢存放在主存中的頁表,來實(shí)現(xiàn)虛擬地址到物理地址的轉(zhuǎn)換。但由于頁表存儲(chǔ)在主存儲(chǔ)中,查詢頁表所花的代價(jià)很大,因此,通常又采用快表技術(shù)(TLBtranslationlookasidebuffer)來提高地址變換效率。第48頁,共100頁,2023年,2月20日,星期一

TLB技術(shù)中,將當(dāng)前需要訪問的地址變換條目存儲(chǔ)在一個(gè)容量較?。ㄍǔ?~16個(gè)字)、訪問速度更快(與微處理器中通用寄存器速度相當(dāng))的存儲(chǔ)器件中。當(dāng)微處理器訪問主存時(shí),先在TLB中查找需要的地址變換條目,如果該條目不存在,再?gòu)拇鎯?chǔ)在主存中的頁表中查詢,并添加到TLB中。 這樣,當(dāng)微處理器下一次又需要該地址變換條目時(shí),可以從TLB中直接得到,從而提高了地址變換速度。第49頁,共100頁,2023年,2月20日,星期一

使能MMU時(shí),其控制存儲(chǔ)訪問的過程是: 首先在TLB中查找虛擬地址,如果該虛擬地址對(duì)應(yīng)的地址變換條目不在TLB中,則到頁表中查詢對(duì)應(yīng)的地址變換條目,并把查詢到的結(jié)果添加到TLB中。如果TLB已滿,還需根據(jù)一定的淘汰算法進(jìn)行替換。得到地址變換條目后,進(jìn)行一下步驟的操作。第50頁,共100頁,2023年,2月20日,星期一ARM微處理器支持7種運(yùn)行模式,分別為:用戶模式(usr):ARM處理器正常的程序執(zhí)行狀態(tài)。快速中斷模式(fiq):用于高速數(shù)據(jù)傳輸或通道處理。外部中斷模式(irq):用于通用的中斷處理。管理模式(svc):操作系統(tǒng)使用的保護(hù)模式。數(shù)據(jù)訪問終止模式(abt):當(dāng)數(shù)據(jù)或指令預(yù)取終止時(shí)進(jìn)入該模式,可用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)。系統(tǒng)模式(sys):運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。未定義指令中止模式(und):當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持硬件協(xié)處理器的軟件仿真。第51頁,共100頁,2023年,2月20日,星期一特權(quán)模式處理器模式說明備注用戶(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)存和/或存儲(chǔ)器保護(hù)在ARM7TDMI沒有大用處未定義(und)支持硬件協(xié)處理器的軟件仿真未定義指令異常響應(yīng)時(shí)進(jìn)入此模式除用戶模式外,其它模式均為特權(quán)模式。ARM內(nèi)部寄存器和一些片內(nèi)外設(shè)在硬件設(shè)計(jì)上只允許(或者可選為只允許)特權(quán)模式下訪問。此外,特權(quán)模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。

未定義(und)

中止(abt)

管理(svc)

中斷(irq)

快中斷(fiq)

系統(tǒng)(sys)第52頁,共100頁,2023年,2月20日,星期一異常模式處理器模式說明備注用戶(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)存和/或存儲(chǔ)器保護(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)入相應(yīng)的模式。每種異常模式都有一些獨(dú)立的寄存器,以避免異常退出時(shí)用戶模式的狀態(tài)不可靠。第53頁,共100頁,2023年,2月20日,星期一用戶和系統(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)存和/或存儲(chǔ)器保護(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)第54頁,共100頁,2023年,2月20日,星期一處理器啟動(dòng)時(shí)的模式轉(zhuǎn)換圖管理模式SVC(Supervisor)多種特權(quán)模式變化用戶程序的運(yùn)行模式

復(fù)位后缺省模式主要完成各模式的堆棧設(shè)置,注意不要進(jìn)入用戶模式一般為用戶模式User2.5處理器模式第55頁,共100頁,2023年,2月20日,星期一ARM微處理器中的寄存器不能被同時(shí)訪問,具體哪些寄存器是可編程訪問的,取決微處理器的工作狀態(tài)及具體的運(yùn)行模式。但在任何時(shí)候,通用寄存器R14~R0、程序計(jì)數(shù)器PC、一個(gè)或兩個(gè)狀態(tài)寄存器都是可訪問的。第56頁,共100頁,2023年,2月20日,星期一寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(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第57頁,共100頁,2023年,2月20日,星期一寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(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_fiqR15R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0R15R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0SPSR_fiqSPSR_irqSPSR_undSPSR_abtSPSR_abtCPSR所有的37個(gè)寄存器,分成兩大類:31個(gè)通用32位寄存器;6個(gè)狀態(tài)寄存器。第58頁,共100頁,2023年,2月20日,星期一寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(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快中斷第59頁,共100頁,2023年,2月20日,星期一1.通用寄存器通用寄存器包括R0~R15,可以分為三類:未分組寄存器R0~R7;分組寄存器R8~R14;程序計(jì)數(shù)器PC(R15)。第60頁,共100頁,2023年,2月20日,星期一寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(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_fiqR13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0在匯編語言中寄存器R0~R13為保存數(shù)據(jù)或地址值的通用寄存器。它們是完全通用的寄存器,不會(huì)被體系結(jié)構(gòu)作為特殊用途,并且可用于任何使用通用寄存器的指令。第61頁,共100頁,2023年,2月20日,星期一2.未分組寄存器R0~R7 在所有的運(yùn)行模式下,未分組寄存器都指向同一個(gè)物理寄存器,他們未被系統(tǒng)用作特殊的用途,因此,在中斷或異常處理進(jìn)行運(yùn)行模式轉(zhuǎn)換時(shí),由于不同的處理器運(yùn)行模式均使用相同的物理寄存器,可能會(huì)造成寄存器中數(shù)據(jù)的破壞,這一點(diǎn)在進(jìn)行程序設(shè)計(jì)時(shí)應(yīng)引起注意。第62頁,共100頁,2023年,2月20日,星期一寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(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_fiqR13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0其中R0~R7為未分組的寄存器,也就是說對(duì)于任何處理器模式,這些寄存器都對(duì)應(yīng)于相同的32位物理寄存器。第63頁,共100頁,2023年,2月20日,星期一3.分組寄存器R8~R14 對(duì)于分組寄存器,他們每一次所訪問的物理寄存器與處理器當(dāng)前的運(yùn)行模式有關(guān)。 對(duì)于R8~R12來說,每個(gè)寄存器對(duì)應(yīng)兩個(gè)不同的物理寄存器,當(dāng)使用fiq模式時(shí),訪問寄存器R8_fiq~R12_fiq;當(dāng)使用除fiq模式以外的其他模式時(shí),訪問寄存器R8_usr~R12_usr。 對(duì)于R13、R14來說,每個(gè)寄存器對(duì)應(yīng)6個(gè)不同的物理寄存器,其中的一個(gè)是用戶模式與系統(tǒng)模式共用,另外5個(gè)物理寄存器對(duì)應(yīng)于其他5種不同的運(yùn)行模式。第64頁,共100頁,2023年,2月20日,星期一采用以下的記號(hào)來區(qū)分不同的物理寄存器:

R13_<mode> R14_<mode>其中,mode為以下幾種模式之一:usr、fiq、irq、svc、abt、und。第65頁,共100頁,2023年,2月20日,星期一寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(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_fiqR14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R14為分組寄存器。它們所對(duì)應(yīng)的物理寄存器取決于當(dāng)前的處理器模式,幾乎所有允許使用通用寄存器的指令都允許使用分組寄存器第66頁,共100頁,2023年,2月20日,星期一寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(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_fiqR12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R12有兩個(gè)分組的物理寄存器。一個(gè)用于除FIQ模式之外的所有寄存器模式,另一個(gè)用于FIQ模式。這樣在發(fā)生FIQ中斷后,可以加速FIQ的處理速度。第67頁,共100頁,2023年,2月20日,星期一寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(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個(gè)分組的物理寄存器。一個(gè)用于用戶和系統(tǒng)模式,其余5個(gè)分別用于5種異常模式。R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13第68頁,共100頁,2023年,2月20日,星期一寄存器R13在ARM指令中常用作堆棧指針,但這只是一種習(xí)慣用法,用戶也可使用其他的寄存器作為堆棧指針。而在Thumb指令集中,某些指令強(qiáng)制性的要求使用R13作為堆棧指針。第69頁,共100頁,2023年,2月20日,星期一寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(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指令集當(dāng)中,沒有以特殊方式使用R13的指令或其它功能,只是習(xí)慣上都這樣使用。但是在Thumb指令集中存在使用R13的指令。第70頁,共100頁,2023年,2月20日,星期一R14也稱作子程序鏈接寄存器(SubroutineLinkRegister)或鏈接寄存器LR。當(dāng)執(zhí)行BL子程序調(diào)用指令時(shí),R14中得到R15(程序計(jì)數(shù)器PC)的備份。其他情況下,R14用作通用寄存器。與之類似,當(dāng)發(fā)生中斷或異常時(shí),對(duì)應(yīng)的分組寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用來保存R15的返回值。第71頁,共100頁,2023年,2月20日,星期一寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(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)上有兩個(gè)特殊功能:在每種模式下,模式自身的R14版本用于保存子程序返回地址;當(dāng)發(fā)生異常時(shí),將R14對(duì)應(yīng)的異常模式版本設(shè)置為異常返回地址(有些異常有一個(gè)小的固定偏移量)。第72頁,共100頁,2023年,2月20日,星期一寄存器R14常用在如下的情況: 在每一種運(yùn)行模式下,都可用R14保存子程序的返回地址,當(dāng)用BL或BLX指令調(diào)用子程序時(shí),將PC的當(dāng)前值拷貝給R14,執(zhí)行完子程序后,又將R14的值拷貝回PC,即可完成子程序的調(diào)用返回。

第73頁,共100頁,2023年,2月20日,星期一Lable程序A程序BR14R14寄存器與子程序調(diào)用BLLable地址A???MOVPC,LRR14(地址A)Lable???1.程序A執(zhí)行過程中調(diào)用程序B;操作流程2.程序跳轉(zhuǎn)至標(biāo)號(hào)Lable,執(zhí)行程序B。同時(shí)硬件將“BLLable”指令的下一條指令所在地址存入R14;3.程序B執(zhí)行最后,將R14寄存器的內(nèi)容放入PC,返回程序A;第74頁,共100頁,2023年,2月20日,星期一R14寄存器與異常發(fā)生

異常發(fā)生時(shí),程序要跳轉(zhuǎn)至異常服務(wù)程序,對(duì)返回地址的處理與子程序調(diào)用類似,都是由硬件完成的。區(qū)別在于有些異常有一個(gè)小常量的偏移。第75頁,共100頁,2023年,2月20日,星期一4.程序計(jì)數(shù)器PC 寄存器R15用作程序計(jì)數(shù)器(PC)。在ARM狀態(tài)下,位[1:0]為0,位[31:2]用于保存PC;在Thumb狀態(tài)下,位[0]為0,位[31:1]用于保存PC;由于ARM體系結(jié)構(gòu)采用了多級(jí)流水線技術(shù),對(duì)于ARM指令集而言,PC總是指向當(dāng)前指令的下兩條指令的地址,即PC的值為當(dāng)前指令的地址值加8個(gè)字節(jié)。

第76頁,共100頁,2023年,2月20日,星期一寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(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程序計(jì)數(shù)器R15(PC)寄存器R15常作為程序計(jì)數(shù)器(PC)。R15雖然也可用作通用寄存器,但一般不這么使用,因?yàn)閷?duì)R15的使用有一些特殊的限制,當(dāng)違反了這些限制時(shí),程序的執(zhí)行結(jié)果是未知的。

第77頁,共100頁,2023年,2月20日,星期一寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(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

寄存器CPSR為程序狀態(tài)寄存器,在異常模式中,另外一個(gè)寄存器“程序狀態(tài)保存寄存器(SPSR)”可以被訪問。每種異常都有自己的SPSR,在因?yàn)楫惓J录M(jìn)入異常時(shí)它保存CPSR的當(dāng)前值,異常退出時(shí)可通過它恢復(fù)CPSR。程序計(jì)數(shù)器R15(PC)第78頁,共100頁,2023年,2月20日,星期一Thumb狀態(tài)寄存器集是ARM狀態(tài)集的子集,程序員可以直接訪問的寄存器為:8個(gè)通用寄存器R0~R7;程序計(jì)數(shù)器(PC);堆棧指針(SP);鏈接寄存器(LR);有條件訪問程序狀態(tài)寄存器(CPSR)。第79頁,共100頁,2023年,2月20日,星期一CPSRCPSR狀態(tài)寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序計(jì)數(shù)器快中斷中斷未定義中止管理系統(tǒng)用戶各模式下實(shí)際訪問的寄存器寄存器在匯編中的名稱寄存器類別注意:括號(hào)內(nèi)為ATPCS中寄存器的命名,可以使用RN匯編偽指令將寄存器定義多個(gè)名字。其中ADS1.2的匯編程序直接支持這些名稱,但注意a1~a4,v1~v4必須用小寫。第80頁,共100頁,2023年,2月20日,星期一CPSRCPSR狀態(tài)寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序計(jì)數(shù)器快中斷中斷未定義中止管理系統(tǒng)用戶各模式下實(shí)際訪問的寄存器寄存器在匯編中的名稱寄存器類別R7R6R5R4R3R2R1R0在匯編語言中寄存器R0~R7為保存數(shù)據(jù)或地址值的通用寄存器。對(duì)于任何處理器模式,它們中的每一個(gè)都對(duì)應(yīng)于相同的32為物理寄存器。它們是完全通用的寄存器,不會(huì)被體系結(jié)構(gòu)作為特殊的用途,并且可用于任何使用通用寄存器的指令。第81頁,共100頁,2023年,2月20日,星期一Thumb狀態(tài)下的堆棧指針寄存器(SP)CPSRCPSR狀態(tài)寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序計(jì)數(shù)器快中斷中斷未定義中止管理系統(tǒng)用戶各模式下實(shí)際訪問的寄存器寄存器在匯編中的名稱寄存器類別堆棧指針SP對(duì)應(yīng)ARM狀態(tài)的寄存器R13。每個(gè)異常模式都有其自身的SP分組版本,SP通常指向各異常模式所專用的堆棧。注意:在發(fā)生異常時(shí),處理器自動(dòng)進(jìn)入ARM狀態(tài)。R13_fiqR13_irqR13_undR13_abtR13_svcR13第82頁,共100頁,2023年,2月20日,星期一Thumb狀態(tài)下的鏈接寄存器R14(LR)CPSRCPSR狀態(tài)寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序計(jì)數(shù)器快中斷中斷未定義中止管理系統(tǒng)用戶各模式下實(shí)際訪問的寄存器寄存器在匯編中的名稱寄存器類別鏈接寄存器LR對(duì)應(yīng)ARM狀態(tài)寄存器R14,在結(jié)構(gòu)上有兩個(gè)特殊功能,詳見“ARM狀態(tài)下的鏈接寄存器LR”。注意:在發(fā)生異常時(shí),處理器自動(dòng)進(jìn)入ARM狀態(tài)。R14_fiqR14_irqR14_undR14_abtR14_svcR14第83頁,共100頁,2023年,2月20日,星期一在Thumb狀態(tài)中訪問高寄存器

在Thumb狀態(tài)中,高寄存器(R8~R15)不是標(biāo)準(zhǔn)寄存器集的一部分。匯編語言程序員對(duì)它們的訪問受到限制,但可以將它們用于快速暫存??梢允褂肕OV、CMP和ADD指令對(duì)高寄存器操作。第84頁,共100頁,2023年,2月20日,星期一ARM狀態(tài)和Thumb狀態(tài)之間寄存器的關(guān)系Thumb狀態(tài)R0~R7與ARM狀態(tài)R0~R7相同;Thumb狀態(tài)CPSR和SPSR與ARM狀態(tài)CPSR和SPSR相同;Thumb狀態(tài)SP映射到ARM狀態(tài)R13;Thumb狀態(tài)LR映射到ARM狀態(tài)R14;Thumb狀態(tài)PC映射到ARM狀態(tài)PC(R15)。第85頁,共100頁,2023年,2月20日,星期一Thumb狀態(tài)寄存器在ARM狀態(tài)寄存器上的映射R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R0

堆棧指針(R13)

連接寄存器(R14)

程序計(jì)數(shù)器(R15)

低寄存器高寄存器第86頁,共100頁,2023年,2月20日,星期一程序狀態(tài)寄存器—CPSR(1)+SPSR(5)CPSR反映了當(dāng)前處理器的狀態(tài):4個(gè)條件代碼標(biāo)志;2個(gè)中斷控制位;5個(gè)對(duì)當(dāng)前處理器模式進(jìn)行編碼的位;1個(gè)指示當(dāng)前執(zhí)行指令的工作狀態(tài)位;保留位。SPSR:備份程序狀態(tài)字,保存異常事件發(fā)生之前的CPSR.

每個(gè)異常模式帶有一個(gè)備份程序狀態(tài)寄存器,用于保存在異常事件發(fā)生之前的CPSR;CPSR和SPSR通過特殊指令進(jìn)行訪問。第87頁,共100頁,2023年,2月20日,星期一NZCV——IM0M1M2M3M4TF—...313029282726876543210條件代碼標(biāo)志保留控制位溢出標(biāo)志進(jìn)位或借位擴(kuò)展零負(fù)或小于IRQ禁止FIQ禁止?fàn)顟B(tài)位模式位NZCVITFCPSR寄存器的格式

大多數(shù)“數(shù)值處理指令”可以選擇是否影響條件代碼標(biāo)志位(指令帶S后綴);但有些指令執(zhí)行總是影響條件代碼標(biāo)志。所有ARM指令都可按條件來執(zhí)行,而Thumb指令中只有分支指令可按條件執(zhí)行。

運(yùn)算結(jié)果的最高位反映在該標(biāo)志位。對(duì)于有符號(hào)二進(jìn)制補(bǔ)碼,結(jié)果為負(fù)數(shù)時(shí)N=1,結(jié)果為正數(shù)或零時(shí)N=0;

指令結(jié)果為0時(shí)Z=1(表示比較結(jié)果“相等”),否則Z=0;

當(dāng)進(jìn)行加法運(yùn)算,并且最高位產(chǎn)生進(jìn)位時(shí)C=1,否則C=0。當(dāng)進(jìn)行減法運(yùn)算,并且最高位產(chǎn)生借位時(shí)C=0,否則C=1。對(duì)于移位操作指令,C為從最高位最后移出的值,其它指令C通常不變;當(dāng)進(jìn)行加法/減法運(yùn)算,并且發(fā)生有符號(hào)溢出時(shí)V=1,否則V=0,其它指令V通常不變。

保留位被保留將來使用。為了提高程序的可移植性,當(dāng)改變CPSR標(biāo)志和控制位時(shí),請(qǐng)不要改變這些保留位。另外,請(qǐng)確保您程序的運(yùn)行不受保留位的值影響,因?yàn)閷淼奶幚砥骺赡軙?huì)將這些位設(shè)置為1或者0。

第88頁,共100頁,2023年,2月20日,星期一CPSR模式位設(shè)置表M[4:0]模式M[4:0]模式10000用戶10111中止10001快中斷11011未定義10010中斷11111系統(tǒng)10011管理注意:不是所有模式位的組合都定義了有效的處理器模式,如果使用了錯(cuò)誤的設(shè)置,將引起

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論