版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第二章ARM體系結(jié)構(gòu)1ARM體系結(jié)構(gòu)簡介2ARM微處理器的寄存器結(jié)構(gòu)3ARM微處理器的異常處理45ARM微處理器結(jié)構(gòu)ARM微處理器指令系統(tǒng)6ARM的存儲(chǔ)器結(jié)構(gòu)第二章ARM體系結(jié)構(gòu)1ARM體系結(jié)構(gòu)簡介2ARM微處理器的寄存器結(jié)構(gòu)3ARM微處理器的異常處理45ARM微處理器結(jié)構(gòu)ARM微處理器指令系統(tǒng)6ARM的存儲(chǔ)器結(jié)構(gòu)2.1ARM體系結(jié)構(gòu)簡介什么是ARM?公司名稱微處理器的通稱ARM技術(shù)成立于1990年11月前身為Acorn計(jì)算機(jī)公司AdvanceRISCMachine(ARM)主要設(shè)計(jì)ARM系列RISC處理器內(nèi)核授權(quán)ARM內(nèi)核給生產(chǎn)和銷售半導(dǎo)體的合作伙伴ARM公司不生產(chǎn)芯片IP(IntelligenceProperty)另外也提供基于ARM架構(gòu)的開發(fā)設(shè)計(jì)技術(shù)軟件工具,評(píng)估板,調(diào)試工具,應(yīng)用軟件,總線架構(gòu),外圍設(shè)備單元,等等2.1.1什么是ARM5ARM授權(quán)費(fèi)IPARM創(chuàng)造和設(shè)計(jì)IPPartner產(chǎn)品,例如:芯片Partner把ARMIP和其他IP集成進(jìn)產(chǎn)品OEMCustomer版權(quán)費(fèi)單價(jià)OEM用來自ARMPartner的芯片設(shè)計(jì)制造最終用戶產(chǎn)品業(yè)務(wù)拓展/市場(chǎng)格局ARM的業(yè)務(wù)模型ARMPartnershipModel有多個(gè)版本,除了一些Unix圖形工作站之外,大多數(shù)ARM核心的處理器都是用在嵌入式領(lǐng)域。ARM既可以認(rèn)為是一個(gè)公司的名字,也可認(rèn)為是對(duì)一類微處理器的通稱,還可以認(rèn)為是一種技術(shù)的名字。2.1.1什么是ARM2.1.2ARM體系結(jié)構(gòu)特點(diǎn)支持Thumb/ARM雙指令集;指令執(zhí)行采用3級(jí)/5級(jí)流水線;帶有指令和數(shù)據(jù)cache,大量使用寄存器,指令執(zhí)行速度更快;支持大端格式和小端格式兩種方法儲(chǔ)字?jǐn)?shù)據(jù);支持字節(jié)、半字和字3種數(shù)據(jù)類型;支持七種處理器模式;嵌入了在線仿真ICE-RT邏輯;具有片上總線AMBA(AdvancedMicrocontrollerBusArchitecture);采用存儲(chǔ)器映像I/O的方式;具有協(xié)處理器接口;采用降低電源電壓;體積小,成本低,性能高。2.1.2ARM體系結(jié)構(gòu)組成32位的ALU37個(gè)32位寄存器組織32*8位乘法器32*32位桶形移位寄存器指令譯碼及控制邏輯指令流水線數(shù)據(jù)/地址寄存器圖2.1.1ARM體系結(jié)構(gòu)方框圖2.1.2ARM體系結(jié)構(gòu)組成第二章ARM體系結(jié)構(gòu)1ARM體系結(jié)構(gòu)簡介2ARM微處理器的寄存器結(jié)構(gòu)3ARM微處理器的異常處理45ARM微處理器結(jié)構(gòu)ARM微處理器指令系統(tǒng)6ARM的存儲(chǔ)器結(jié)構(gòu)2.2ARM微處理器系列
ARM7系列ARM9系列ARM9E系列ARM10E系列SecurCore系列Intel
XscaleCortex系列ARM7TDMI4T1支持Halfword和signedhalfword/byte和Systemmode支持Thumb指令集24ARM9TDMIARM720TARM940T改良的ARM/Thumb交互作用以及CLZ指令5TESaturatedmathsDSPmultiply-accumulateinstructionsXScaleARM1020EARM9E-SARM966E-S3早期的ARMsARM9EJ-S5TEJARM7EJ-SARM926EJ-SJazelle支持Java字節(jié)碼
6ARM11SIMD2.2.1ARM版本ARM處理器架構(gòu)進(jìn)化史ARM處理器核心技術(shù)演進(jìn)路線數(shù)據(jù)源:ARM,三星,DIGITIMES整理,2009/9ARMv5指令集ARM926EJ-SARM1026EJ-SARMv6指令集ARM1136J(F)-SARM11MPCore(1~4核心)ARMv7-Cortex指令集Cortex-A8Cortex-A9MPCore(1~4核心)400MHz600MHz800MHz200MHz20052006200720082009130nm制程90nm制程65nm制程45nm制程1GHzARM公司開發(fā)了很多系列的ARM處理器核,目前最新的系列已經(jīng)是ARM11。ARM7、ARM9、ARM9E和ARM10為4個(gè)通用處理器系列。每個(gè)系列提供一套相對(duì)獨(dú)特的性能來滿足不同應(yīng)用領(lǐng)域的需求。2.2.2ARM處理器系列17命名的含義標(biāo)志含義說明T支持Thumb指令集Thumb指令集版本1:ARMv4TThumb指令集版本2:ARMv5TThumb-2:ARMv6TD片上調(diào)試M支持長乘法32位乘32位得到64位,32位的乘加得到64位IEmbeddedICEEDSP指令增加了DSP算法處理器指令:16位乘加指令,飽和的帶符號(hào)數(shù)的加減法,雙字?jǐn)?shù)據(jù)操作,cache預(yù)取指令JJava加速器Jazelle提高java代碼的運(yùn)行速度S可綜合提供VHDL或Verilog語言設(shè)計(jì)文件ARM7微處理器系列ARM7系列是低功耗的32位RISC處理器,最適合用于對(duì)價(jià)位和功耗要求較高的消費(fèi)類應(yīng)用。ARM7系列有如下特點(diǎn):具有嵌入式ICE-RT邏輯,調(diào)試開發(fā)方便;極低的功耗,適合對(duì)功耗要求較高的應(yīng)用,如便攜式產(chǎn)品;能夠提供0.9MIPS/MHz的三級(jí)流水線結(jié)構(gòu);兼容16位的Thumb指令集,代碼密度高;對(duì)操作系統(tǒng)的支持廣泛,如WindowsCE、Linux、PalmOS等;指令系統(tǒng)與ARM9系列、ARM9E系列和ARM10E系列兼容,便于用戶的產(chǎn)品升級(jí)換代;主頻最高可達(dá)130M,高速的運(yùn)算處理能力能勝任絕大多數(shù)的復(fù)雜應(yīng)用。ARM7微處理器系列主要應(yīng)用領(lǐng)域:工業(yè)控制、Internet設(shè)備、網(wǎng)絡(luò)和調(diào)制解調(diào)器設(shè)備、移動(dòng)電話等多種多媒體等。ARM7系列微處理器包括如下幾種類型的核:ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。其中,ARM7TMDI是目前使用最廣泛的32位嵌入式RISC處理器,屬低端ARM處理器核。TDMI的基本含義為:T:支持16位壓縮指令集Thumb;D:支持片上Debug;M:內(nèi)嵌硬件乘法器(Multiplier)I:嵌入式ICE,支持片上斷點(diǎn)和調(diào)試點(diǎn);ARM7微處理器系列主要應(yīng)用領(lǐng)域:工業(yè)控制、Internet設(shè)備、網(wǎng)絡(luò)和調(diào)制解調(diào)器設(shè)備、移動(dòng)電話等多種多媒體等。ARM7系列微處理器包括如下幾種類型的核:ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。其中,ARM7TMDI是目前使用最廣泛的32位嵌入式RISC處理器,屬低端ARM處理器核。ARM7TDMI-SARM7TDMI的可綜合(synthesizable)版本(軟核),對(duì)應(yīng)用工程師來說其編程模型與ARM7TDMI一致;嵌入式Embedded-ICE,支持片上斷點(diǎn)和調(diào)試點(diǎn);支持64位乘法;支持片上調(diào)試Debug;支持高密度16位的壓縮Thumb指令集ARM7的產(chǎn)品線。ARM7TDMI:同時(shí)具備四個(gè)模塊,當(dāng)然用戶也可選擇其中的幾個(gè)或一個(gè)。ARM7TDMI-S:軟件與ARM7TDMI完全兼容,硬件預(yù)留功能擴(kuò)展口。ARM710T:ARM7TDMI+8KCache+MMU,Cache:片內(nèi)緩存,提高CPU性能,MMU:內(nèi)存管理單元。ARM740T:ARM7TDMI+8KCache+ProtectionUnit。ARM720T:ARM7TDMI+8KCache+WinCESupport。ARM7微處理器系列ARM9微處理器系列
ARM9系列微處理器在高性能和低功耗特性方面提供最佳的表現(xiàn)。具有以下特點(diǎn):5級(jí)流水線,指令執(zhí)行效率更高。提供1.1MIPS/MHz的哈佛結(jié)構(gòu)。支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA總線接口。全性能的MMU,支持WindowsCE、Linux、PalmOS等多種主流嵌入式操作系統(tǒng)。MPU支持實(shí)時(shí)操作系統(tǒng)。支持?jǐn)?shù)據(jù)Cache和指令Cache。ARM9微處理器系列ARM9系列微處理器主要應(yīng)用于無線設(shè)備、儀器儀表、安全系統(tǒng)、機(jī)頂盒、高端打印機(jī)、數(shù)字照相機(jī)和數(shù)字?jǐn)z像機(jī)等。ARM9系列微處理器包含ARM920T、ARM922T和ARM940T三種類型,以適用于不同的應(yīng)用場(chǎng)合。ARM9E微處理器系列ARM9E系列微處理器的主要特點(diǎn)如下:支持DSP指令集,適合于需高速數(shù)字信號(hào)處理的場(chǎng)合。5級(jí)流水線,指令執(zhí)行效率更高。支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA總線接口。支持VFP9浮點(diǎn)處理協(xié)處理器。全性能的MMU,支持眾多主流嵌入式操作系統(tǒng)。支持?jǐn)?shù)據(jù)Cache和指令Cache,具有更高的處理能力。ARM9E微處理器系列ARM9E系列微處理器主要應(yīng)用于下一代無線設(shè)備、數(shù)字消費(fèi)品、成像設(shè)備、工業(yè)控制、存儲(chǔ)設(shè)備和網(wǎng)絡(luò)設(shè)備等領(lǐng)域。ARM9E系列微處理器包含ARM926EJ-S、ARM946E-S和ARM966E-S三種類型,以適用于不同的應(yīng)用場(chǎng)合。ARM10E微處理器系列ARM10E系列微處理器的主要特點(diǎn)如下:支持DSP指令集,適合于需要高速數(shù)字信號(hào)處理的場(chǎng)合。6級(jí)流水線,指令執(zhí)行效率更高。支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA總線接口。支持VFP10浮點(diǎn)處理協(xié)處理器。全性能的MMU,支持眾多主流嵌入式操作系統(tǒng)。支持?jǐn)?shù)據(jù)Cache和指令Cache,具有更高的處理能力主頻最高可達(dá)400M。內(nèi)嵌并行讀/寫操作部件。ARM10E微處理器系列ARM10E系列微處理器主要應(yīng)用于下一代無線設(shè)備、數(shù)字消費(fèi)品、成像設(shè)備、工業(yè)控制、通信和信息系統(tǒng)等領(lǐng)域。ARM10E系列微處理器包含ARM1020E、ARM1022E和ARM1026EJ-S三種類型,以適用于不同的應(yīng)用場(chǎng)合。SecurCore微處理器系列SecurCore系列微處理器除了具有ARM體系結(jié)構(gòu)各種主要特點(diǎn)外,還在系統(tǒng)安全方面具有如下的特點(diǎn):帶有靈活的保護(hù)單元,確保操作系統(tǒng)和應(yīng)用數(shù)據(jù)的安全。采用軟內(nèi)核技術(shù),防止外部對(duì)其進(jìn)行掃描探測(cè)??杉捎脩糇约旱陌踩匦院推渌麉f(xié)處理器。SecurCore微處理器系列SecurCore系列微處理器主要應(yīng)用于一些對(duì)安全性要求較高的應(yīng)用產(chǎn)品及應(yīng)用系統(tǒng),如電子商務(wù)、電子政務(wù)、電子銀行業(yè)務(wù)、網(wǎng)絡(luò)和認(rèn)證系統(tǒng)等領(lǐng)域。SecurCore系列微處理器
SecurCoreSC100、SecurCoreSC110、SecurCoreSC200和SecurCoreSC210四種類型。StrongARM微處理器系列
IntelStrongARM處理器是便攜式通訊產(chǎn)品和消費(fèi)類電子產(chǎn)品的理想選擇,已成功應(yīng)用于多家公司的掌上電腦系列產(chǎn)品。IntelStrongARMSA-1100處理器是采用ARM體系結(jié)構(gòu)高度集成的32位RISC微處理器。它融合了Intel公司的設(shè)計(jì)和處理技術(shù)以及ARM體系結(jié)構(gòu)的電源效率,采用在軟件上兼容ARMv4體系結(jié)構(gòu)、同時(shí)采用具有Intel技術(shù)優(yōu)點(diǎn)的體系結(jié)構(gòu)。Xscale處理器
Xscale處理器是基于ARMv5TE體系結(jié)構(gòu)的解決方案,是一款全性能、高性價(jià)比、低功耗的處理器。它支持16位的Thumb指令和DSP指令集,已使用在數(shù)字移動(dòng)電話、個(gè)人數(shù)字助理和網(wǎng)絡(luò)產(chǎn)品等場(chǎng)合。Cortex微處理器系列ARMCortex發(fā)布于2005年,為各種不同性能需求的應(yīng)用提供了一整套完整的優(yōu)化解決方案,該系列的技術(shù)劃分完全針對(duì)不同的市場(chǎng)應(yīng)用和性能需求。目前ARMCortex定義了三個(gè)系列:“A”系列面向尖端的基于虛擬內(nèi)存的操作系統(tǒng)和用戶應(yīng)用;“R”系列針對(duì)實(shí)時(shí)系統(tǒng);“M”系列對(duì)微控制器和低成本應(yīng)用提供優(yōu)化。Cortex系列Cortex-M系列:
針對(duì)價(jià)格敏感應(yīng)用領(lǐng)域的嵌入式處理器,只支持Thumb-2指令集,強(qiáng)調(diào)操作的確定性,以及性能、功耗和價(jià)格的平衡。是為對(duì)開發(fā)費(fèi)用非常敏感同時(shí)對(duì)性能要求小斷增加的嵌入式應(yīng)用(如微控制器、汽車車身控制系統(tǒng)和各種大型家電)所設(shè)計(jì)的,主要面向單片機(jī)領(lǐng)域,可以說是51單品機(jī)的完美替代品。Cortex系列Cortex-R系列:
針對(duì)實(shí)時(shí)系統(tǒng)的嵌入式處理器。支持ARM、Thumb和Thumb-2指令集,強(qiáng)調(diào)實(shí)時(shí)性,存儲(chǔ)器管理只支持物理地址。主要面向?qū)崟r(shí)控制領(lǐng)域,如汽車剎車控制等,這一領(lǐng)域要求處理器響應(yīng)中斷的實(shí)時(shí)性高,并且要盡可能的節(jié)約成本Cortex系列Cortex-A系列:
針對(duì)復(fù)雜OS和應(yīng)用程序(如多媒體)的應(yīng)用處理器。支持ARM、Thumb和Thumb-2指令集,強(qiáng)調(diào)高性能與合理的功耗,存儲(chǔ)器管理支持虛擬地址。面向尖端的基于虛擬內(nèi)存的操作系統(tǒng)和用戶應(yīng)用,如多媒體,上網(wǎng)本等Cortex處理器技術(shù)特點(diǎn)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%的性能。第二章ARM體系結(jié)構(gòu)1ARM體系結(jié)構(gòu)簡介2ARM微處理器的寄存器結(jié)構(gòu)3ARM微處理器的異常處理45ARM微處理器結(jié)構(gòu)ARM微處理器指令系統(tǒng)6ARM的存儲(chǔ)器結(jié)構(gòu)2.3ARM處理器的寄存器結(jié)構(gòu)處理器的運(yùn)行模式處理器的工作狀態(tài)處理器的寄存器組織處理器模式說明備注
用戶(usr)正常程序執(zhí)行模式不能直接切換到其它模式
系統(tǒng)(sys)運(yùn)行操作系統(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)入此模式2.3.1處理器的運(yùn)行模式處理器7種模式特權(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)2.3.1處理器的運(yù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)入此模式
未定義(und)
中止(abt)
管理(svc)
中斷(irq)
快中斷(fiq)這五種模式稱為異常模式。它們除了可以通過程序切換進(jìn)入外,也可以由特定的異常進(jìn)入。當(dāng)特定的異常出現(xiàn)時(shí),處理器進(jìn)入相應(yīng)的模式。每種異常模式都有一些獨(dú)立的寄存器,以避免異常退出時(shí)用戶模式的狀態(tài)不可靠。2.3.1處理器的運(yùn)行模式用戶和系統(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)2.3.1處理器的運(yùn)行模式用戶模式和特權(quán)模式除了用戶模式之外的其他6種處理器模式稱為特權(quán)模式特權(quán)模式下,程序可以訪問所有的系統(tǒng)資源,也可以任意地進(jìn)行處理器模式的切換。特權(quán)模式中,除系統(tǒng)模式外,其他5種模式又稱為異常模式大多數(shù)的用戶程序運(yùn)行在用戶模式下,此時(shí),應(yīng)用程序不能夠訪問一些受操作系統(tǒng)保護(hù)的系統(tǒng)資源,應(yīng)用程序也不能直接進(jìn)行處理器模式的切換。用戶模式下,當(dāng)需要進(jìn)行處理器模式切換時(shí),應(yīng)用程序可以產(chǎn)生異常處理,在異常處理中進(jìn)行處理器模式的切換。模式切換處理器模式可以通過軟件進(jìn)行切換,也可以通過外部中斷或者異常處理過程進(jìn)行切換。當(dāng)應(yīng)用程序發(fā)生異常中斷時(shí),處理器進(jìn)入相應(yīng)的異常模式。在每一種異常模式下都有一組寄存器,供相應(yīng)的異常處理程序使用,這樣就可以保證在進(jìn)入異常模式時(shí),用戶模式下的寄存器不被破壞。系統(tǒng)模式并不是通過異常進(jìn)入的,它和用戶模式具有完全一樣的寄存器。但是系統(tǒng)模式屬于特權(quán)模式,可以訪問所有的系統(tǒng)資源,也可以直接進(jìn)行處理器模式切換。主要供操作系統(tǒng)任務(wù)使用。通常操作系統(tǒng)的任務(wù)需要訪問所有的系統(tǒng)資源,同時(shí)該任務(wù)仍然使用用戶模式的寄存器組,而不是使用異常模式下相應(yīng)的寄存器組,這樣可以保證當(dāng)異常中斷發(fā)生時(shí)任務(wù)狀態(tài)不被破壞。從編程的角度看,ARM微處理器的工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:
-第一種為ARM狀態(tài),此時(shí)處理器執(zhí)行32位的字對(duì)齊的ARM指令;
-第二種為Thumb狀態(tài),此時(shí)處理器執(zhí)行16位的、半字對(duì)齊的Thumb指令。2.3.2處理器的工作狀態(tài)ARM和Thumb指令簡介ARM處理器是基于精簡指令集計(jì)算機(jī)(RISC)原理設(shè)計(jì)的,指令集和相關(guān)譯碼機(jī)制較為簡單。ARM體系結(jié)構(gòu)在V4版中增加了16位Thumb指令集。ARM指令集效率高,但是代碼密度低;Thumb指令集具有較高的代碼密度,卻仍然保持ARM的大多數(shù)性能上的優(yōu)勢(shì),它是ARM指令集的子集。ARM指令集與Thumb指令集的關(guān)系Thumb指令集具有靈活、小巧的特點(diǎn)ARM指令集支持ARM核所有的特性,具有高效、快速的特點(diǎn)ARM和Thumb指令進(jìn)入Thumb狀態(tài)當(dāng)操作數(shù)寄存器的狀態(tài)位為1時(shí),可以采用執(zhí)行BX指令的方法,使微處理器從ARM狀態(tài)切換到Thumb狀態(tài)。此外,當(dāng)處理器處于Thumb狀態(tài)時(shí)發(fā)生異常(如IRQ、FIQ、Undef等),則異常處理返回時(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)。2.3.2處理器的工作狀態(tài)2.3.3處理器的寄存器組織簡介在ARM處理器內(nèi)部有37個(gè)用戶可見的寄存器。在不同的工作模式和處理器狀態(tài)下,程序員可以訪問的寄存器也不盡相同。寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(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_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM狀態(tài)各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實(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_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM狀態(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)寄存器。寄存器類別寄存器在匯編中的名稱各模式下實(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_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq無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)各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實(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_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqR13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0在匯編語言中寄存器R0~R13為保存數(shù)據(jù)或地址值的通用寄存器。它們是完全通用的寄存器,不會(huì)被體系結(jié)構(gòu)作為特殊用途,并且可用于任何使用通用寄存器的指令。ARM狀態(tài)各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實(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_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqR13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0其中R0~R7為未分組的寄存器,也就是說對(duì)于任何處理器模式,這些寄存器都對(duì)應(yīng)于相同的32位物理寄存器。ARM狀態(tài)各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實(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_svcSPSR_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)前的處理器模式,幾乎所有允許使用通用寄存器的指令都允許使用分組寄存器ARM狀態(tài)各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實(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_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqR12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R12有兩個(gè)分組的物理寄存器。一個(gè)用于除FIQ模式之外的所有寄存器模式,另一個(gè)用于FIQ模式。這樣在發(fā)生FIQ中斷后,可以加速FIQ的處理速度。ARM狀態(tài)各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實(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_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq寄存器R13、R14分別有6個(gè)分組的物理寄存器。一個(gè)用于用戶和系統(tǒng)模式,其余5個(gè)分別用于5種異常模式。R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13ARM狀態(tài)各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實(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_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq寄存器R13常作為堆棧指針(SP)。在ARM指令集當(dāng)中,沒有以特殊方式使用R13的指令或其它功能,只是習(xí)慣上都這樣使用。但是在Thumb指令集中存在使用R13的指令。ARM狀態(tài)各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實(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_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqR14為鏈接寄存器(LR),在結(jié)構(gòu)上有兩個(gè)特殊功能:在每種模式下,模式自身的R14版本用于保存子程序返回地址;當(dāng)發(fā)生異常時(shí),將R14對(duì)應(yīng)的異常模式版本設(shè)置為異常返回地址(有些異常有一個(gè)小的固定偏移量)。ARM狀態(tài)各模式下的寄存器Lable程序A程序BR14R14(LR)寄存器與子程序調(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(LR);3.程序B執(zhí)行最后,將R14寄存器的內(nèi)容放入PC,返回程序A;2.3.3處理器的寄存器組織R14寄存器與異常發(fā)生異常發(fā)生時(shí),程序要跳轉(zhuǎn)至異常服務(wù)程序,對(duì)返回地址的處理與子程序調(diào)用類似,都是由硬件完成的。區(qū)別在于有些異常有一個(gè)小常量的偏移。2.3.3處理器的寄存器組織1.執(zhí)行用戶模式下的程序;2.發(fā)生IRQ中斷,硬件將某個(gè)地址存入IRQ模式下的R14_irq寄存器,用戶模式下的R14沒有被破壞;R14R14_irq用戶模式下的程序IRQ模式下的程序AareturnB...XA地址A地址A3.IRQ服務(wù)程序A執(zhí)行完畢,將R14_irq寄存器的內(nèi)容減去某個(gè)常量后存入PC,返回之前被中斷的程序;未被破壞R14_irq2.3.3處理器的寄存器組織寄存器類別寄存器在匯編中的名稱各模式下實(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),它指向正在取指的地址??梢哉J(rèn)為它是一個(gè)通用寄存器,但是對(duì)于它的使用有許多與指令相關(guān)的限制或特殊情況。如果R15使用的方式超出了這些限制,那么結(jié)果將是不可預(yù)測(cè)的。讀R15的限制正常操作時(shí),從R15讀取的值是處理器正在取指的地址,即當(dāng)前正在執(zhí)行指令的地址加上8個(gè)字節(jié)(兩條ARM指令的長度)。由于ARM指令總是以字為單位,所以R15寄存器的最低兩位總是為0。LDRR0,PC??????PCPC-4PC-8正在執(zhí)行正在譯碼正在取指流水線狀態(tài)地址程序代碼2.3.3處理器的寄存器組織寫R15的限制正常操作時(shí),寫入R15的值被當(dāng)作一個(gè)指令地址,程序從這個(gè)地址處繼續(xù)執(zhí)行(相當(dāng)于執(zhí)行一次無條件跳轉(zhuǎn))。2.3.3處理器的寄存器組織寫R15的限制由于ARM指令以字節(jié)為邊界,因此寫入R15的值最低兩位通常為0b00。具體的規(guī)則取決于內(nèi)核結(jié)構(gòu)的版本:在ARM結(jié)構(gòu)V3版及以下版本中,寫入R15的值的最低兩位被忽略,因此跳轉(zhuǎn)地址由指令的實(shí)際目標(biāo)地址(寫入R15的值)和0xFFFFFFFC相與得到;在ARM結(jié)構(gòu)V4版及以上版本中,寫入R15的值的最低兩位為0,如果不是,結(jié)果將不可預(yù)測(cè)。2.3.3處理器的寄存器組織寄存器類別寄存器在匯編中的名稱各模式下實(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,在進(jìn)入異常時(shí)它保存CPSR的當(dāng)前值,異常退出時(shí)可通過它恢復(fù)CPSR。ARM狀態(tài)各模式下的寄存器ARM內(nèi)核包含1個(gè)CPSR和5個(gè)供異常處理程序使用的SPSR。CPSR反映了當(dāng)前處理器的狀態(tài),其包含:4個(gè)條件代碼標(biāo)志(負(fù)(N)、零(Z)、進(jìn)位(C)和溢出(V));2個(gè)中斷禁止位,分別控制一種類型的中斷;
5個(gè)對(duì)當(dāng)前處理器模式進(jìn)行編碼的位;1個(gè)用于指示當(dāng)前執(zhí)行指令(ARM還是Thumb)的位。2.3.3處理器的寄存器組織每個(gè)異常模式還帶有一個(gè)程序狀態(tài)保存寄存器(SPSR),它用于保存在異常發(fā)生之前的CPSR。CPSR和SPSR通過特殊指令(MRS、MSR)進(jìn)行訪問。注意:如果通過程序修改CPSR寄存器中的模式位進(jìn)入異常模式,那么硬件將不會(huì)把CPSR保存至SPSR中。2.3.3處理器的寄存器組織程序狀態(tài)寄存器的訪問NZCV——IM0M1M2M3M4TF—...313029282726876543210
程序狀態(tài)寄存器條件代碼標(biāo)志保留控制位NZCVIM0M1M2M3M4TFCPSR寄存器的格式2.3.3處理器的寄存器組織程序狀態(tài)寄存器條件代碼標(biāo)志大多數(shù)“數(shù)值處理指令”可以選擇是否影響條件代碼標(biāo)志位。通常如果指令帶S后綴,則該指令的執(zhí)行會(huì)影響條件代碼標(biāo)志;但有一些指令的執(zhí)行總是會(huì)影響條件代碼標(biāo)志。N、Z、C和V位都是條件代碼標(biāo)志。算術(shù)操作、邏輯操作、MSR或者LDM指令可以對(duì)這些位進(jìn)行設(shè)置。所有ARM指令都可按條件來執(zhí)行,而Thumb指令中只有分支指令可按條件執(zhí)行。程序狀態(tài)寄存器條件代碼標(biāo)志N運(yùn)算結(jié)果的最高位反映在該標(biāo)志位。對(duì)于有符號(hào)二進(jìn)制補(bǔ)碼,結(jié)果為負(fù)數(shù)時(shí)N=1,結(jié)果為正數(shù)或零時(shí)N=0;Z指令結(jié)果為0時(shí)Z=1(通常表示比較結(jié)果“相等”),否則Z=0;C當(dāng)進(jìn)行加法運(yùn)算(包括CMN指令),并且最高位產(chǎn)生進(jìn)位時(shí)C=1,否則C=0。當(dāng)進(jìn)行減法運(yùn)算(包括CMP指令),并且最高位產(chǎn)生借位時(shí)C=0,否則C=1。對(duì)于結(jié)合移位操作的非加法/減法指令,C為從最高位最后移出的值,其它指令C通常不變;V當(dāng)進(jìn)行加法/減法運(yùn)算,并且發(fā)生有符號(hào)溢出時(shí)V=1,否則V=0,其它指令V通常不變。程序狀態(tài)寄存器控制位CPSR的最低8位為控制位,當(dāng)發(fā)生異常時(shí),這些位被硬件改變。當(dāng)處理器處于一個(gè)特權(quán)模式時(shí),可用軟件操作這些位。它們分別是:中斷禁止位;T位;模式位。程序狀態(tài)寄存器控制位中斷禁止位包括I和F位:當(dāng)I位置位時(shí),IRQ中斷被禁止;當(dāng)F位置位時(shí),F(xiàn)IQ中斷被禁止。T位反映了正在操作的狀態(tài):當(dāng)T位為1時(shí),處理器正在Thumb狀態(tài)下運(yùn)行;當(dāng)T位清零時(shí),處理器正在ARM狀態(tài)下運(yùn)行。程序狀態(tài)寄存器控制位模式位包括M4、M3、M2、M1和M0,這些位決定處理器的操作模式。注意:不是所有模式位的組合都定義了有效的處理器模式,如果使用了錯(cuò)誤的設(shè)置,將引起一個(gè)無法恢復(fù)的錯(cuò)誤。M[4:0]模式可見的Thumb狀態(tài)寄存器可見的ARM狀態(tài)寄存器10000用戶R0~R7,SP,LR,PC,CPSRR0~R14,PC,CPSR10001快中斷R0~R7,SP_fiq,LR_fiq,PC,CPSR,SPSR_fiqR0~R7,R8_fiq~R14_fiq,PC,CPSR,SPSR_fiq10010中斷R0~R7,SP_irq,LR_irq,PC,CPSR,SPSR_fiqR0~R12,R13_irq,R14_irq,PC,CPSR,SPSR_irq10011管理R0~R7,SP_svc,LR_svc,PC,CPSR,SPSR_svcR0~R12,R13_svc,R14_svc,PC,CPSR,SPSR_svc10111中止R0~R7,SP_abt,LR_abt,PC,CPSR,SPSR_abtR0~R12,R13_abt,R14_abt,PC,CPSR,SPSR_abt11011未定義R0~R7,SP_und,LR_und,PC,CPSR,SPSR_undR0~R12,R13_und,R14_und,PC,CPSR,SPSR_und11111系統(tǒng)R0~R7,SP,LR,PC,CPSRR0~R14,PC,CPSRCPSR模式位設(shè)置表程序狀態(tài)寄存器保留位CPSR中的保留位被保留將來使用。為了提高程序的可移植性,當(dāng)改變CPSR標(biāo)志和控制位時(shí),請(qǐng)不要改變這些保留位。另外,請(qǐng)確保程序的運(yùn)行不受保留位的值影響,因?yàn)閷淼奶幚砥骺赡軙?huì)將這些位設(shè)置為1或者0。2.3.4Thumb狀態(tài)的寄存器集ARM狀態(tài)和Thumb狀態(tài)之間寄存器的關(guān)系Thumb狀態(tài)寄存器與ARM狀態(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)。Thumb狀態(tài)寄存器在Arm狀態(tài)寄存器上的映射R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R0
堆棧指針(R13)
連接寄存器(R14)
程序計(jì)數(shù)器(R15)
低寄存器高寄存器2.3.4Thumb狀態(tài)的寄存器集在Thumb狀態(tài)中訪問高寄存器在Thumb狀態(tài)中,高寄存器(R8~R15)不是標(biāo)準(zhǔn)寄存器集的一部分。匯編語言程序員對(duì)它們的訪問受到限制。可以使用MOV、CMP和ADD指令對(duì)高寄存器操作。2.3.4Thumb狀態(tài)的寄存器集第二章ARM體系結(jié)構(gòu)1ARM體系結(jié)構(gòu)簡介2ARM微處理器的寄存器結(jié)構(gòu)3ARM微處理器的異常處理45ARM微處理器結(jié)構(gòu)ARM微處理器指令系統(tǒng)6ARM的存儲(chǔ)器結(jié)構(gòu)2.4ARM微處理器的異常處理異常:在一個(gè)正常的程序流程執(zhí)行過程中,由內(nèi)部或外部源產(chǎn)生的一個(gè)事件使正常的程序產(chǎn)生的暫時(shí)的停止。例如響應(yīng)一個(gè)來自外設(shè)的中斷。在處理異常之前,ARM7TDMI內(nèi)核自動(dòng)保存當(dāng)前狀態(tài),即返回地址存入寄存器R14,當(dāng)前的處理器狀態(tài)(CPSR->SPSR),這樣當(dāng)處理程序結(jié)束時(shí)可以恢復(fù)執(zhí)行原來的程序(SPSR->CPSR)。如果同時(shí)發(fā)生兩個(gè)或更多異常,那么將按照固定的優(yōu)先級(jí)來處理異常。ARM體系結(jié)構(gòu)中的異常,與8位/16位體系結(jié)構(gòu)的中斷有很大的相似之處,但異常與中斷的概念并不完全等同。
VectorTable2.4.1異常類型不同的異常將導(dǎo)致處理器進(jìn)入不同的工作模式,并執(zhí)行不同特定地址的指令各異常類型具有不同的優(yōu)先級(jí)。復(fù)位——發(fā)生時(shí),處理器立即停止當(dāng)前程序,進(jìn)入禁止中斷的管理模式,并從地址0x00000000處開始執(zhí)行;未定義指令——在ARM處理器或協(xié)處理器認(rèn)為當(dāng)前指令未定義時(shí)發(fā)生;軟件中斷——當(dāng)用戶模式下的程序使用指令SWI時(shí),處理器便產(chǎn)生軟件中斷,進(jìn)入管理模式,以調(diào)用特權(quán)操作。指令預(yù)取中止——當(dāng)處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問,存儲(chǔ)器會(huì)向處理器發(fā)出中止信號(hào);只有當(dāng)預(yù)取的指令被執(zhí)行時(shí),才會(huì)產(chǎn)生指令預(yù)取中止異常。Vectortablecanbeat
0xFFFF0000onARM720T
andonARM9/10familydevicesFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x001665優(yōu)先級(jí)VectorTable不同的異常將導(dǎo)致處理器進(jìn)入不同的工作模式,并執(zhí)行不同特定地址的指令各異常類型具有不同的優(yōu)先級(jí)。數(shù)據(jù)訪問中止——若處理器數(shù)據(jù)訪問指令的地址不存在,或該地址不允許當(dāng)前指令訪問時(shí),產(chǎn)生數(shù)據(jù)中止異常;外部中斷請(qǐng)求——當(dāng)處理器的外部中斷請(qǐng)求引腳有效,而且CPSR中的I位為0時(shí),產(chǎn)生IRQ異常。系統(tǒng)外設(shè)可通過該異常請(qǐng)求中斷服務(wù)??焖僦袛嗾?qǐng)求——處理器的快速中斷請(qǐng)求引腳有效,而且CPSR中的F位為0時(shí),產(chǎn)生FIQ異常。Vectortablecanbeat
0xFFFF0000onARM720T
andonARM9/10familydevicesFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x0016652優(yōu)先級(jí)432.4.1異常類型復(fù)位當(dāng)nRESET信號(hào)被拉低時(shí)(一般外部復(fù)位引腳電平的變化和芯片的其它復(fù)位源會(huì)改變這個(gè)內(nèi)核信號(hào)),處理器放棄正在執(zhí)行的指令。在復(fù)位后,除PC和CPSR之外的所有寄存器的值都不確定。當(dāng)nRESET信號(hào)再次變?yōu)楦唠娖綍r(shí),ARM處理器執(zhí)行下列操作:1.強(qiáng)制CPSR中的M[4:0]變?yōu)閎10011(管理模式);2.置位CPSR中的I和F位;3.清零CPSR中的T位;4.強(qiáng)制PC從地址0x00開始對(duì)下一條指令進(jìn)行取指;5.返回到ARM狀態(tài)并恢復(fù)執(zhí)行。86UndefinedInstruction(未定義指令)當(dāng)ARM處理器或協(xié)處理器遇到不能處理的指令時(shí),會(huì)產(chǎn)生未定義指令異常。采用這種機(jī)制,對(duì)協(xié)處理器進(jìn)行軟件仿真或在軟件仿真時(shí)擴(kuò)展ARM或Thumb指令集。處理器執(zhí)行以下程序返回,無論是在ARM狀態(tài)還是Thumb狀態(tài):
MOVSPC,R14_und以上指令恢復(fù)PC(從R14_und)和CPSR(從SPSR_und)的值,并返回到未定義指令后的下一條指令。87SoftwareInterrupt(軟件中斷)
軟件中斷指令(SWI)用于進(jìn)入管理模式,常用于請(qǐng)求執(zhí)行特定的管理功能。軟件中斷處理程序執(zhí)行以下指令可以從SWI模式返回,無論是在ARM狀態(tài)還是Thumb狀態(tài):
MOVSPC,R14_svc以上指令恢復(fù)PC(從R14_svc)和CPSR(從SPSR_svc) 的值,并返回到SWI的下一條指令。ABORT(中止)
產(chǎn)生中止異常意味著對(duì)存儲(chǔ)器的訪問失敗。ARM微處理器在存儲(chǔ)器訪問周期內(nèi)檢查是否發(fā)生中止異常。中止異常包括兩種類型:指令預(yù)取中止:發(fā)生在指令預(yù)取時(shí)。數(shù)據(jù)中止:發(fā)生在數(shù)據(jù)訪問時(shí)。當(dāng)指令預(yù)取訪問存儲(chǔ)器失敗時(shí),存儲(chǔ)器系統(tǒng)向ARM處理器發(fā)出存儲(chǔ)器中止(Abort)信號(hào),預(yù)取的指令被記為無效,但只有當(dāng)處理器試圖執(zhí)行無效指令時(shí),指令預(yù)取中止異常才會(huì)發(fā)生,如果指令未被執(zhí)行,例如在指令流水線中發(fā)生了跳轉(zhuǎn),則預(yù)取指令中止不會(huì)發(fā)生。若數(shù)據(jù)中止發(fā)生,系統(tǒng)的響應(yīng)與指令的類型有關(guān)。當(dāng)確定了中止的原因后,Abort處理程序均可以執(zhí)行以下指令從中止模式返回,無論是在ARM狀態(tài)還是Thumb狀態(tài):
SUBSPC,R14_abt,#4;指令預(yù)取中止
SUBSPC,R14_abt,#8;數(shù)據(jù)中止IRQ(InterruptRequest)
IRQ異常屬于正常的中斷請(qǐng)求,可通過對(duì)處理器的nIRQ引腳輸入低電平產(chǎn)生,IRQ的優(yōu)先級(jí)低于FIQ,當(dāng)程序執(zhí)行進(jìn)入FIQ異常時(shí),IRQ可能被屏蔽。若將CPSR的I位置為1,則會(huì)禁止IRQ中斷,若將CPSR的I位清零,處理器會(huì)在指令執(zhí)行完之前檢查IRQ的輸入。注意只有在特權(quán)模式下才能改變I位的狀態(tài)。不管是在ARM狀態(tài)還是在Thumb狀態(tài)下進(jìn)入IRQ模式,IRQ處理程序均可以執(zhí)行以下指令從IRQ模式返回:
SUBSPC,R14_irq,#4FIQ(FastInterruptRequest)FIQ異常是為了支持?jǐn)?shù)據(jù)傳輸或者通道處理而設(shè)計(jì)的??焖僦袛嗾?qǐng)求(FIQ)適用于對(duì)一個(gè)突發(fā)事件的快速響應(yīng),這得益于在ARM狀態(tài)中,快中斷模式有8個(gè)專用的寄存器可用來滿足寄存器保護(hù)的需要(這可以加速上下文切換的速度)。若將CPSR的F位置為1,則會(huì)禁止FIQ中斷,若將CPSR的F位清零,處理器會(huì)在指令執(zhí)行時(shí)檢查FIQ的輸入。注意只有在特權(quán)模式下才能改變F位的狀態(tài)。
可由外部通過對(duì)處理器上的nFIQ引腳輸入低電平產(chǎn)生FIQ。不管是在ARM狀態(tài)還是在Thumb狀態(tài)下進(jìn)入FIQ模式,F(xiàn)IQ處理程序均可以執(zhí)行以下指令從FIQ模式返回:
SUBSPC,R14_fiq,#4當(dāng)多個(gè)異常同時(shí)發(fā)生時(shí),一個(gè)固定的優(yōu)先級(jí)系統(tǒng)決定它們被處理的順序:異常優(yōu)先級(jí)異常類型優(yōu)先級(jí)復(fù)位1(最高優(yōu)先級(jí))數(shù)據(jù)中止2FIQ3IRQ4預(yù)取中止5未定義指令6SWI7(最低優(yōu)先級(jí))優(yōu)先級(jí)降低2.4.2異常的響應(yīng)過程進(jìn)入異常在異常發(fā)生后,內(nèi)核會(huì)作以下工作:1.在適當(dāng)?shù)腖R中保存下一條指令的地址,當(dāng)異常入口來自:ARM狀態(tài),那么ARM將當(dāng)前指令地址加4或加8復(fù)制(取決于異常的類型)到LR中;為Thumb狀態(tài),那么ARM將當(dāng)前指令地址加2、4或加8(取決于異常的類型)復(fù)制到LR中;異常處理器程序不必確定狀態(tài)。2.4.2異常的響應(yīng)過程進(jìn)入異常在異常發(fā)生后,內(nèi)核會(huì)作以下工作:2.將CPSR復(fù)制到適當(dāng)?shù)腟PSR中;3.將CPSR模式位強(qiáng)制設(shè)置為與異常類型相對(duì)應(yīng)的值;4.強(qiáng)制PC從相關(guān)的異常向量處取指。內(nèi)核在中斷異常時(shí)置位中斷禁止標(biāo)志,這樣可以防止不受控制的異常嵌套。注:異??偸窃贏RM狀態(tài)中進(jìn)行處理。當(dāng)處理器處于Thumb狀態(tài)時(shí)發(fā)生了異常,在異常向量地址裝入PC時(shí),會(huì)自動(dòng)切換到ARM狀態(tài)。2.4.2異常的響應(yīng)過程進(jìn)入異常異常向量地址異常類型進(jìn)入時(shí)的模式進(jìn)入時(shí)I的狀態(tài)進(jìn)入時(shí)F的狀態(tài)0x00000000復(fù)位管理禁止禁止0x00000004未定義指令未定義IF0x00000008軟件中斷(SWI)管理禁止F0x0000000C預(yù)取中止(指令)中止IF0x00000010數(shù)據(jù)中止中止IF0x00000014保留保留——0x00000018IRQ中斷禁止F0x0000001CFIQ快中斷禁止禁止注:表中的I和F表示不對(duì)該位有影響,保留原來的值。2.4.2異常的響應(yīng)過程進(jìn)入異常程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組圖示進(jìn)入異常過程1.程序在系統(tǒng)模式下運(yùn)行用戶程序,假定當(dāng)前處理器狀態(tài)為Thumb狀態(tài)、允許IRQ中斷;2.用戶程序運(yùn)行時(shí)發(fā)生IRQ中斷,硬件完成以下動(dòng)作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV置位I位(禁止IRQ中斷)清零T位(進(jìn)入ARM狀態(tài))設(shè)置MOD位,切換處理器模式至IRQ模式將下一條指令的地址存入IRQ模式的LR寄存器將CPSR寄存器內(nèi)容存入IRQ模式的SPSR寄存器將跳轉(zhuǎn)地址存入PC,實(shí)現(xiàn)跳轉(zhuǎn)IRQ0?1...????BackAddrJumpAddrJumpSYS1?0...????“?”表示對(duì)該位不關(guān)心當(dāng)異常結(jié)束時(shí),異常處理程序必須:1.將SPSR的值復(fù)制回CPSR;2.若在進(jìn)入異常處理時(shí)設(shè)置了中斷禁止位,要在此清除;3.將LR(R14)中的值減去偏移量后存入PC,偏移量根據(jù)異常的類型而有所不同;注:恢復(fù)CPSR的動(dòng)作會(huì)將T、F和I位自動(dòng)恢復(fù)為異常發(fā)生前的值。退出異常2.4.2異常的響應(yīng)過程在異常處理結(jié)束后,異常處理程序完成以下動(dòng)作:程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組圖示退出異常過程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV將SPSR寄存器的值復(fù)制回CPSR寄存器;將LR寄存的值減去一個(gè)常量后復(fù)制到PC寄存器,跳轉(zhuǎn)到被中斷的用戶程序。IRQ0?1...????BackAddrJumpAddrreturnSYS1?0...????SYS1?0...????BackAddr-4Jump“?”表示對(duì)該位不關(guān)心異常入口/出口匯總異常類型返回指令之前的狀態(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ù)知。
注意:“MOVSPC,R14_svc”是指在管理模式執(zhí)行MOVSPC,R14指令?!癕OVSPC,R14_und”、“SUBSPC,R14_abt,#4”等指令也是類似的。2.4.3應(yīng)用程序中的異常處理異常的入口和出口處理如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用堆棧指令來恢復(fù)用戶寄存器并實(shí)現(xiàn)返回。SUBLR,LR,#4 ;計(jì)算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回中斷處理代碼的開始部分和退出部分SUBLR,LR,#4 ;計(jì)算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回
如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復(fù)用戶寄存器并實(shí)現(xiàn)返回。中斷處理代碼的開始部分和退出部分異常的入口和出口處理注意:中斷返回指令的寄存器列表(其中必須包括PC)后的“^”符號(hào)表示這是一條特
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 收購農(nóng)村房屋合同模板
- 人工造米轉(zhuǎn)讓合同模板
- 全鋼外架合同模板
- 家政跟保姆合同模板
- 農(nóng)村房屋月租合同模板
- 2024年二手裝飾裝修材料買賣合同
- 固體飲料行業(yè)市場(chǎng)機(jī)會(huì)考核試卷
- 2024年辦公樓建筑工程保險(xiǎn)合同
- 2024年光伏發(fā)電項(xiàng)目開發(fā)與合作經(jīng)營合同
- 昌江縣古榕峰水泥用石灰?guī)r礦礦產(chǎn)資源開發(fā)利用與保護(hù)方案
- 核醫(yī)學(xué)主治醫(yī)師考試:核醫(yī)學(xué)專業(yè)知識(shí)真題模擬匯編(共569題)
- HCCDP 云遷移認(rèn)證理論題庫
- 醫(yī)用內(nèi)窺鏡冷光源產(chǎn)品技術(shù)要求深圳邁瑞
- 第二章區(qū)段站布置圖
- 建筑工程概預(yù)算知到章節(jié)答案智慧樹2023年浙江廣廈建設(shè)職業(yè)技術(shù)大學(xué)
- 直擊本質(zhì):洞察事物底層邏輯的思考方法
- 2023年中國電建西北院校園招聘筆試參考題庫附帶答案詳解
- 英語漫談膠東海洋文化知到章節(jié)答案智慧樹2023年威海海洋職業(yè)學(xué)院
- 巴蜀文化智慧樹知到答案章節(jié)測(cè)試2023年四川大學(xué)
- 收費(fèi)站大棚拆除施工方案
評(píng)論
0/150
提交評(píng)論