第2章ARM體系結(jié)構(gòu)_第1頁
第2章ARM體系結(jié)構(gòu)_第2頁
第2章ARM體系結(jié)構(gòu)_第3頁
第2章ARM體系結(jié)構(gòu)_第4頁
第2章ARM體系結(jié)構(gòu)_第5頁
已閱讀5頁,還剩115頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第2章章 ARM體系結(jié)構(gòu)體系結(jié)構(gòu)2.1 ARM體系結(jié)構(gòu)簡介體系結(jié)構(gòu)簡介nARM(Advanced RISC Machines)公司1991年成立于英國劍橋,是專門從事基于RISC技術(shù)芯片設(shè)計開發(fā)的公司,主要出售芯片設(shè)計技術(shù)的授權(quán),作為知識產(chǎn)權(quán)供應(yīng)商,本身不直接從事芯片生產(chǎn),靠轉(zhuǎn)讓設(shè)計許可由合作公司生產(chǎn)各具特色的芯片,半導(dǎo)體生產(chǎn)商從ARM公司購買其設(shè)計的ARM微處理器核,根據(jù)各自不同的應(yīng)用領(lǐng)域,加入適當(dāng)?shù)耐鈬娐?,從而形成自己的ARM微處理器芯片進(jìn)入市場。目前,全世界有幾十家大的半導(dǎo)體公司都使用ARM公司的授權(quán),使得ARM技術(shù)獲得了更多的第三方工具、制造、軟件的支持,又使整個系統(tǒng)成本降低,使產(chǎn)

2、品更容易進(jìn)入市場,更具有競爭力。目前,ARM微處理器幾乎已經(jīng)深入到工業(yè)控制、無線通訊、網(wǎng)絡(luò)應(yīng)用、消費(fèi)類電子產(chǎn)品、成像和安全產(chǎn)品各個領(lǐng)域n采用RISC架構(gòu)的ARM微處理器一般具有如下特點(diǎn):n 支持Thumb(16位)/ARM(32位)雙指令集,能很好的兼容8位/16位器件。Thumb指令集比通常的8位和16位CISC/RISC處理 器具有更好的代碼密度;n 指令執(zhí)行采用3級流水線/5級流水線技術(shù);n 帶有指令Cache和數(shù)據(jù)Cache,大量使用寄存器,指令執(zhí)行速度更快。大多數(shù)數(shù)據(jù)操作都在寄存器中完成。尋址方式靈活簡單,執(zhí)行效率高。指令長度固定(在ARM狀態(tài)下是32位,在Thumb狀態(tài)下是16位)

3、;n 支持大端格式和小端格式兩種方法存儲字?jǐn)?shù)據(jù);n 支持Byte(字節(jié),8位)、Halfword(半字,16位)和Word(字,32位)三種數(shù)據(jù)類型。n 支持用戶、快中斷、中斷、管理、中止、系統(tǒng)和未定義等7種處理器模式,除了用戶模式外,其余的均為特權(quán)模式;n 處理器芯片上都嵌入了在線仿真ICE-RT邏輯,便于通過JTAG來仿真調(diào)試ARM體系結(jié)構(gòu)芯片,可以避免使用昂貴的在線仿真器。另外,在處理器核中還可以嵌入跟蹤宏單元ETM,用于監(jiān)控內(nèi)部總線,實(shí)時跟蹤指令和數(shù)據(jù)的執(zhí)行;n 具有片上總線AMBA(Advanced Micro-controller Bus Architecture)。 nAMBA定

4、義了3組總線:先進(jìn)高性能總線AHB(Advanced High performance Bus);先進(jìn)系統(tǒng)總線ASB(Advanced System Bus);先進(jìn)外圍總線APB(Advanced Peripheral Bus)。通過AMBA可以方便地擴(kuò)充各種處理器及I/O,可以把DSP、其他處理器和I/O(如UART、定時器和接口等)都集成在一塊芯片中;n 采用存儲器映像I/O的方式,即把I/O端口地址作為特殊的存儲器地址;n 具有協(xié)處理器接口。ARM允許接16個協(xié)處理器,如CP15用于系統(tǒng)控制,CP14用于調(diào)試控制器;n 采用了降低電源電壓,可工作在3.0V以下;減少門的翻轉(zhuǎn)次數(shù),當(dāng)某個功

5、能電路不需要時禁止門翻轉(zhuǎn);減少門的數(shù)目,即降低芯片的集成度;降低時鐘頻率等一些措施降低功耗;n 體積小、低成本、高性能。nARM微處理器包括ARM7、ARM9、ARM9E、ARM10E、SecurCore、以及Intel的StrongARM、XScale和其它廠商基于ARM體系結(jié)構(gòu)的 處理器,除了具有ARM體系結(jié)構(gòu)的共同特點(diǎn)以外,每一個系列的ARM微處理器都有各自的特點(diǎn)和應(yīng)用領(lǐng)域。 n一個典型的ARM體系結(jié)構(gòu)方框圖如圖2.1.1所示,包含有32位ALU、31個32位通用寄存器及6位狀態(tài)寄存器、328位乘法器3232位桶形移位寄存器、指令譯碼及控制邏輯、指令流水線和數(shù)據(jù)地址寄存器等。圖2.1.1

6、 ARM體系結(jié)構(gòu)方框圖n1ALUnARM體系結(jié)構(gòu)的ALU與常用的ALU邏輯結(jié)構(gòu)基本相同,由兩個操作數(shù)鎖存器、加法器、邏輯功能、結(jié)果及零檢測邏輯構(gòu)成。ALU的最小數(shù)據(jù)通路周期包含寄存器讀時間、移位器延遲、ALU延遲、寄存器寫建立時間、雙相時鐘間非重疊時間等幾部分。n2桶形移位寄存器桶形移位寄存器nARM采用了3232位桶形移位寄存器,左移右移n位、環(huán)移n位和算術(shù)右移n位等都可以一次完成,可以有效的減少移位的延遲時間。在桶形移位寄存器中,所有的輸入端通過交叉開關(guān)(Crossbar)與所有的輸出端相連。交叉開關(guān)采用NMOS晶體管來實(shí)現(xiàn)。n3高速乘法器高速乘法器nARM為了提高運(yùn)算速度,采用兩位乘法的

7、方法,2位乘法可根據(jù)乘數(shù)的2位來實(shí)現(xiàn)“加移位”運(yùn)算。ARM的高速乘法器采用328位的結(jié)構(gòu),完成322位乘法也只需5個時鐘周期。n4浮點(diǎn)部件浮點(diǎn)部件n在ARM體系結(jié)構(gòu)中,浮點(diǎn)部件作為選件可根據(jù)需要選用,F(xiàn)PA10浮點(diǎn)加速器以協(xié)處理器方式與ARM相連,并通過協(xié)處理器指令的解釋來執(zhí)行。n浮點(diǎn)的Load/Store指令使用頻度要達(dá)到67,故FPA10內(nèi)部也采用Load/Store結(jié)構(gòu),有8個80位浮點(diǎn)寄存器組,指令執(zhí)行也采用流水線結(jié)構(gòu)。n5控制器控制器nARM的控制器采用硬接線的可編程邏輯陣列PLA,其輸入端有14根、輸出端有40根,分散控制Load/Store多路、乘法器、協(xié)處理器以及地址、寄存器A

8、LU和移位器。n6寄存器寄存器nARM內(nèi)含37個寄存器,包括31個通用32位寄存器和6個狀態(tài)寄存器。2.2 ARM微處理器結(jié)構(gòu)微處理器結(jié)構(gòu)n2.2.1 ARM7微處理器 nARM7系列微處理器包括ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ幾種類型。其中,ARM7TMDI是目前使用最廣泛的32位嵌入式RISC處理器,主頻最高可達(dá)130MIPS,采用能夠提供0.9MIPS/MHz的三級流水線結(jié)構(gòu),內(nèi)嵌硬件乘法器(Multiplier),支持16為壓縮指令集Thumb,嵌入式ICE,支持片上Debug,支持片上斷點(diǎn)和調(diào)試點(diǎn)。指令系統(tǒng)與ARM9系列、ARM9E系列和ARM10

9、E系列兼容,支持Windows CE、Linux、Palm OS等操作系統(tǒng)。典型產(chǎn)品如Samsung公司的S3C4510B。n1ARM7TDMI處理器內(nèi)核處理器內(nèi)核nARM7TDMI處理器的內(nèi)核如圖2.2.1所示。圖2.2.1 ARM7TDMI內(nèi)核結(jié)構(gòu) nARM7TDMI還提供了存儲器接口、MMU接口、協(xié)處理器接口和調(diào)試接口,以及時鐘與總線等控制信號,如圖2.2.2所示。n存儲器接口包括了32位地址A31:0、雙向32位數(shù)據(jù)總線D31:0、單向32位數(shù)據(jù)總線DIN31:0與DOUT31:0、以及存儲器訪問請求MREQ、地址順序SEQ、存儲器訪問控制MAS1:0和數(shù)據(jù)鎖存控制BL3:0等控制信號

10、。nARM7TDMI處理器內(nèi)核也可以ARM7TDMI-S軟核(Softcore)形式向用戶提供。同時,提供多種組合選擇,例如可以省去嵌入式ICE單元等。圖2.2.2 ARM7TDMI的接口n2ARM720T/ARM740T處理器內(nèi)核處理器內(nèi)核nARM720T處理器內(nèi)核是在ARM7TDMI處理器內(nèi)核基礎(chǔ)上,增加8KB的數(shù)據(jù)與指令Cache,支持段式和頁式存儲的MMU(Memory Management Unit)、寫緩沖器及AMBA(Advanced Microcontroller Bus Architecture)接口而構(gòu)成,如圖2.2.3所示。nARM740T處理器內(nèi)核與ARM720T處理器

11、內(nèi)核相比,結(jié)構(gòu)基本相同,ARM740T處理器核沒有存儲器管理單元MMU,不支持虛擬存儲器尋址,而是用存儲器保護(hù)單元來提供基本保護(hù)和Cache的控制。合適低價格低功耗的嵌入式應(yīng)用。圖2.2.3 ARM720T內(nèi)核結(jié)構(gòu) n2.2.2 ARM9微處理器 nARM9系列微處理器包含ARM920T、ARM922T和ARM940T幾種類型,可以在高性能和低功耗特性方面提供最佳的性能。采用5級整數(shù)流水線,指令執(zhí)行效率更高。提供1.1MIPS/MHz的哈佛結(jié)構(gòu)。支持?jǐn)?shù)據(jù)Cache和指令Cache,具有更高的指令和數(shù)據(jù)處理能力。 支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA總線接口。

12、全性能的MMU,支持Windows CE、Linux、Palm OS等多種主流嵌入式操作系統(tǒng)。MPU支持實(shí)時操作系統(tǒng)。nARM920T處理器核在ARM9TDMI處理器內(nèi)核基礎(chǔ)上,增加了分離式的指令Cache和數(shù)據(jù)Cache,并帶有相應(yīng)的存儲器管理單元I-MMU和D-MMU、寫緩沖器及AMBA接口等,如圖2.2.4所示。圖2.2.4 ARM920T內(nèi)核結(jié)構(gòu)nARM940T處理器核采用了ARM9TDMI處理器內(nèi)核,是ARM920T處理器核的簡化版本,沒有存儲器管理單元MMU,不支持虛擬存儲器尋址,而是用存儲器保護(hù)單元來提供存儲保護(hù)和Cache控制。nARM9系列微處理器主要應(yīng)用于無線通信設(shè)備、儀器

13、儀表、安全系統(tǒng)、機(jī)頂盒、高端打印機(jī)、數(shù)字照相機(jī)和數(shù)字?jǐn)z像機(jī)等。典型產(chǎn)品如Samsung公司的S3C2410A。n2.2.3 ARM9E微處理器 nARM9E系列微處理器包含ARM926EJ-S、ARM946E-S和ARM966E-S幾種類型,使用單一的處理器內(nèi)核提供了微控制器、DSP、Java應(yīng)用系統(tǒng)的解決方案。ARM9E系列微處理器提供了增強(qiáng)的DSP處理能力,很適合于那些需要同時使用DSP和微控制器的應(yīng)用場合。nARM9E系列微處理器支持DSP指令集,適合于需要高速數(shù)字信號處理的場合。ARM9E系列微處理器采用5級整數(shù)流水線,支持32位ARM指令集和16位Thumb指令集,支持32位的高速A

14、MBA總線接口,支持VFP9浮點(diǎn)處理協(xié)處理器,MMU支持Windows CE、Linux、Palm OS等多種主流嵌入式操作系統(tǒng),MPU支持實(shí)時操作系統(tǒng),支持?jǐn)?shù)據(jù)Cache和指令Cache,主頻最高可達(dá)300MIPS。nARM9系列微處理器主要應(yīng)用于下一代無線設(shè)備、數(shù)字消費(fèi)品、成像設(shè)備、工業(yè)控制、存儲設(shè)備和網(wǎng)絡(luò)設(shè)備等領(lǐng)域。 n2.2.4 ARM10E微處理器 nARM10E系列微處理器包含ARM1020E、ARM1022E和ARM1026EJ-S幾種類型,由于采用了新的體系結(jié)構(gòu),與同等的ARM9器件相比較,在同樣的時鐘頻率下,性能提高了近50。同時采用了兩種先進(jìn)的節(jié)能方式,使其功耗極低。 nA

15、RM10E系列微處理器支持DSP指令集,適合于需要高速數(shù)字信號處理的場合。 采用6級整數(shù)流水線,支持32位ARM指令集和16位Thumb指令集,支持32位的高速AMBA總線接口,支持VFP10浮點(diǎn)處理協(xié)處理器,MMU支持Windows CE、Linux、Palm OS等多種主流嵌入式操作系統(tǒng),支持?jǐn)?shù)據(jù)Cache和指令Cache,內(nèi)嵌并行讀/寫操作部件,主頻最高可達(dá)400MIPS。 nARM10E系列微處理器主要應(yīng)用于下一代無線設(shè)備、數(shù)字消費(fèi)品、成像設(shè)備、工業(yè)控制、通信和信息系統(tǒng)等領(lǐng)域。n2.2.5 SecurCore微處理器 nSecurCore系列微處理器包含SecurCore SC100、

16、SecurCore SC110、SecurCore SC200和SecurCore SC210幾種類型,提供了完善的32位RISC技術(shù)的安全解決方案。nSecurCore系列微處理器除了具有ARM體系結(jié)構(gòu)各種主要特點(diǎn)外,在系統(tǒng)安全方面: 帶有靈活的保護(hù)單元,以確保操作系統(tǒng)和應(yīng)用數(shù)據(jù)的安全;采用軟內(nèi)核技術(shù),防止外部對其進(jìn)行掃描探測;可集成用戶自己的安全特性和其他協(xié)處理器。 nSecurCore系列微處理器主要應(yīng)用于如電子商務(wù)、電子政務(wù)、電子銀行業(yè)務(wù)、網(wǎng)絡(luò)和認(rèn)證系統(tǒng)等一些對安全性要求較高的應(yīng)用產(chǎn)品及應(yīng)用系統(tǒng)。n2.2.6 StrongARM微處理器 nIntel StrongARM處理器是采用AR

17、M體系結(jié)構(gòu)高度集成的32位RISC微處理器,采用在軟件上兼容ARMv4體系結(jié)構(gòu)、同時采用具有Intel技術(shù)優(yōu)點(diǎn)的體系結(jié)構(gòu)。典型產(chǎn)品如SA110 處理器、SA1100、SA1110PDA系統(tǒng)芯片和SA1500多媒體處理器芯片等。例如其中的Intel StrongARM SA-1110 微處理器是一款集成了32位StrongARM RISC處理器核、系統(tǒng)支持邏輯、多通信通道、LCD控制器、存儲器和PCMCIA控制器以及通用I/O口的高集成度通信控制器。該處理器最高可在206 MHz下運(yùn)行。SA-1110有一個大的指令Cache 和數(shù)據(jù)Cache、內(nèi)存管理單元(MMU)和讀/寫緩存。存儲器總線可以和

18、包括SDRAM、SMROM 和類似SRAM的許多器件相接。軟件與ARM V4結(jié)構(gòu)處理器家族相兼容。nIntel StrongARM處理器是便攜式通訊產(chǎn)品和消費(fèi)類電子產(chǎn)品的理想選擇。n2.2.7 XScale微處理器 nIntel XScale微體系結(jié)構(gòu)提供了一種全新的、高性價比、低功耗且基于ARMv5TE體系結(jié)構(gòu)的解決方案,支持16位Thumb指令和DSP擴(kuò)充。基于XScale技術(shù)開發(fā)的微處理器,可用于手機(jī)、便攜式終端(PDA)、網(wǎng)絡(luò)存儲設(shè)備、骨干網(wǎng)(BackBone)路由器等。nIntel XScale處理器的處理速度是Intel StrongARM處理速度的兩倍,數(shù)據(jù)Cache的容量從8K

19、B增加到32KB,指令Cache的容量從16KB增加到32KB,微小數(shù)據(jù)Cache的容量從512B增加到2KB;為了提高指令的執(zhí)行速度,超級流水線結(jié)構(gòu)由5級增至7級;新增乘/加法器MAC和特定的DSP型協(xié)處理器,以提高對多媒體技術(shù)的支持;動態(tài)電源管理,使XScale處理器的時鐘可達(dá)1GHz、功耗1.6W,并能達(dá)到1200MIPS。nXScale微處理器架構(gòu)經(jīng)過專門設(shè)計,核心采用了英特爾先進(jìn)的0.18m工藝技術(shù)制造;具備低功耗特性,適用范圍從0.1mW1.6W。同時,它的時鐘工作頻率將接近1GHz。XScale與nStrongARM相比,可大幅降低工作電壓并且獲得更高的性能。具體來講,在目前的S

20、trongARM中,在1.55V下可以獲得133MHz的工作頻率,在2.0V下可以獲得206MHz的工作頻率;而采用XScale后,在0.75V時工作頻率達(dá)到150MHz,在1.0V時工作頻率可以達(dá)到400MHz,在1.65V下工作頻率則可高達(dá)800MHz。超低功率與高性能的組合使Intel XScale適用于廣泛的互聯(lián)網(wǎng)接入設(shè)備,在因特網(wǎng)的各個環(huán)節(jié)中,從手持互聯(lián)網(wǎng)設(shè)備到互聯(lián)網(wǎng)基礎(chǔ)設(shè)施產(chǎn)品,Intel XScale都表現(xiàn)出了令人滿意的處理性能。nIntel采用XScale架構(gòu)的嵌入式處理器典型產(chǎn)品有PXA25x、PXA26x和PXA27x系列。2.3 ARM微處理器的寄存器結(jié)構(gòu)nARM處理器共

21、有37個寄存器,被分為若干個組(BANK),這些寄器包括:n 31個通用寄存器,包括程序計數(shù)器(PC指針),均為32位的寄存器。 n 6個狀態(tài)寄存器,用以標(biāo)識CPU的工作狀態(tài)及程序的運(yùn)行狀態(tài),均為32位,目前只使用了其中的一部分。n2.3.1 處理器運(yùn)行模式nARM微處理器支持7種運(yùn)行模式,分別為: n usr(用戶模式):ARM處理器正常程序執(zhí)行模式。n fiq(快速中斷模式):用于高速數(shù)據(jù)傳輸或通道處理 n irq(外部中斷模式):用于通用的中斷處理 n svc(管理模式):操作系統(tǒng)使用的保護(hù)模式 n abt (數(shù)據(jù)訪問終止模式): 當(dāng)數(shù)據(jù)或指令預(yù)取終止時進(jìn)入該模式,可用于虛擬存儲及存儲保

22、護(hù)。 n sys(系統(tǒng)模式): 運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。 n und(未定義指令中止模式):當(dāng)未定義的指令執(zhí)行時進(jìn)入該模式,可用于支持硬件協(xié)處理器的軟件仿真。 nARM微處理器的運(yùn)行模式可以通過軟件改變,也可以通過外部中斷或異常處理改變。n大多數(shù)的應(yīng)用程序運(yùn)行在用戶模式下,當(dāng)處理器運(yùn)行在用戶模式下時,某些被保護(hù)的系統(tǒng)資源是不能被訪問的。 n除用戶模式以外,其余的所有6種模式稱之為非用戶模式,或特權(quán)模式(Privileged Modes);其中除去用戶模式和系統(tǒng)模式以外的5種又稱為異常模式(Exception Modes),常用于處理中斷或異常,以及需要訪問受保護(hù)的系統(tǒng)資源等情況。nARM處

23、理器在每一種處理器模式下均有一組相應(yīng)的寄存器與之對應(yīng)。即在任意一種處理器模式下,可訪問的寄存器包括15個通用寄存器(R0R14)、一至二個狀態(tài)寄存器和程序計數(shù)器。在所有的寄存器中,有些是在7種處理器模式下共用的同一個物理寄存器,而有些寄存器則是在不同的處理器模式下有不同的物理寄存器。n2.3.2 處理器工作狀態(tài)nARM處理器有32位ARM和16位Thumb兩種工作狀態(tài)。在32位ARM狀態(tài)下執(zhí)行字對齊的ARM指令,在16位Thumb狀態(tài)下執(zhí)行半字對齊的Thumb指令。n在Thumb狀態(tài)下,程序計數(shù)器PC(Program Counter)使用位1選擇另一個半字。nARM處理器在兩種工作狀態(tài)之間可以

24、切換,切換不影響處理器的模式或寄存器的內(nèi)容。n(1)當(dāng)操作數(shù)寄存器的狀態(tài)位(位0)為1時,執(zhí)行BX指令進(jìn)入Thumb狀態(tài)。如果處理器在Thumb狀態(tài)進(jìn)入異常,則當(dāng)異常處理(IRQ、FIQ、Undef、Abort和SWI)返回時,自動轉(zhuǎn)換到Thumb狀態(tài)。n(2)當(dāng)操作數(shù)寄存器的狀態(tài)位(位0)為0時,執(zhí)行BX指令進(jìn)入ARM狀態(tài),處理器進(jìn)行異常處理(IRQ、FIQ、Reset、Undef、Abort和SWI)。在此情況下,把PC放入異常模式鏈接寄存器中。從異常向量地址開始執(zhí)行也可以進(jìn)入ARM狀態(tài)。n2.3.3 ARM處理器的寄存器組織nARM處理器的37個寄存器被安排成部分重疊的組,不能在任何模式

25、都可以使用,寄存器的使用與處理器狀態(tài)和工作模式有關(guān)。如圖2.3.1所示,每種處理器模式使用不同的寄存器組。其中15個通用寄存器(R0R14)、1或2個狀態(tài)寄存器和程序計數(shù)器是通用的。n1通用寄存器通用寄存器n通用寄存器(R0R15)可分成不分組寄存器R0R7、分組寄存器R8R14和程序計數(shù)器R15 三類。n(1)不分組寄存器R0R7n不分組寄存器R0R7是真正的通用寄存器,可以工作在所有的處理器模式下,沒有隱含的特殊用途。n(2)分組寄存器R8R14n分組寄存器R8R14取決于當(dāng)前的處理器模式,每種模式有專用的分組寄存器用于快速異常處理。n寄存器R8Rl2可分為兩組物理寄存器。一組用于FIQ模

26、式,另一組國用于除FIQ以外的其他模式。第1組訪問R8_fiqR12_fiq,允許快速中斷處理。第二組訪問R8_usrR12_usr,寄存器R8R12沒有任何指定的特殊用途。 表明用戶或系統(tǒng)模式使用的一般寄存器己被異常模式特定的另一寄存器所替代。n圖2.3.1 寄存器組織結(jié)構(gòu)圖n寄存器R13R14可分為6個分組的物理寄存器。1個用于用戶模式和系統(tǒng)模式,而其他5個分別用于svc、abt、und、irq和fiq五種異常模式。訪問時需要指定它們的模式,如:R13_mode,R14_mode;其中:mode可以從usr、svc、abt、und、irq和fiq六種模式中選取一個。n寄存器R13通常用作堆

27、棧指針,稱作SP。每種異常模式都有自己的分組R13。通常R13應(yīng)當(dāng)被初始化成指向異常模式分配的堆棧。在入口處,異常處理程序?qū)⒂玫降钠渌拇嫫鞯闹当4娴蕉褩V校环祷貢r,重新將這些值加載到寄存器。這種異常處理方法保證了異常出現(xiàn)后不會導(dǎo)致執(zhí)行程序的狀態(tài)不可靠。n寄存器R14用作子程序鏈接寄存器,也稱為鏈接寄存器LK (Link Register)。當(dāng)執(zhí)行帶鏈接分支(BL)指令時,得到R15的備份。 n在其他情況下,將R14當(dāng)做通用寄存器。類似地,當(dāng)中斷或異常 出現(xiàn)時,或當(dāng)中斷或異常程序執(zhí)行BL指令時,相應(yīng)的分組寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用來保

28、存R15的返回值。nFIQ模式有7個分組的寄存器R8R14,映射為R8_fiqR14_fiq。在ARM狀態(tài)下,許多FIQ處理沒必要保存任何寄存器。User、IRQ、Supervisor、Abort和Undefined模式每一種都包含兩個分組的寄存器R13和R14的映射,允許每種模式都有自己的堆棧和鏈接寄存器。n(3)程序計數(shù)器R15n寄存器R15用作程序計數(shù)器(PC)。在ARM狀態(tài),位1:0為0,位31:2保存PC。n在Thumb狀態(tài),位0為0,位31:1保存PC。R15雖然也可用作通用寄存器,但一般不這么使用,因?yàn)閷15的使用有一些特殊的限制,當(dāng)違反了這些限制時,程序的執(zhí)行結(jié)果是未知的。n

29、 讀程序計數(shù)器。指令讀出的R15的值是指令地址加上8字節(jié)。由于ARM指令始終是字對齊的,所以讀出結(jié)果值的位1:0總是 0(在Thumb狀態(tài)下,情況有所變化)。讀PC主要用于快速地對臨近的指令和數(shù)據(jù)進(jìn)行位置無關(guān)尋址,包括程序中的位置無關(guān)轉(zhuǎn)移。n 寫程序計數(shù)器。寫R15的通常結(jié)果是將寫到R15中的值作為指令地址,并以此地址發(fā)生轉(zhuǎn)移。由于ARM指令要求字對齊,通常希望寫到R15中值的位1:0=0b00。n由于ARM體系結(jié)構(gòu)采用了多級流水線技術(shù),對于ARM指令集而言,PC總是指向當(dāng)前指令的下兩條指令的地址,即PC的值為當(dāng)前指令的地址值加8個字節(jié)。n2程序狀態(tài)寄存器程序狀態(tài)寄存器n寄存器R16用作程序狀

30、態(tài)寄存器CPSR(Current Program Status Register,當(dāng)前程序狀態(tài)寄存器)。在所有處理器模式下都可以訪問CPSR。CPSR包含條件碼標(biāo)志、中斷禁止位、當(dāng)前處理器模式以及其他狀態(tài)和控制信息。每種異常模式都有一個程序狀態(tài)保存寄存器SPSR(Saved Program Status Register)。當(dāng)異常出現(xiàn) SPSR用于保留CPSR的狀態(tài)。nCPSR和SPSR的格式如下:n(1)條件碼標(biāo)志nN、Z、C、V(Negative、Zero、Carry、oVerflow)均為條件碼標(biāo)志位(Condition Code Flags),它們的內(nèi)容可被算術(shù)或邏輯運(yùn)算的結(jié)果所改變,

31、并且可以決定某條指令是否被執(zhí)行。CPSR中的條件碼標(biāo)志可由大多數(shù)指令檢測以決定指令是否執(zhí)行。在ARM狀態(tài)下,絕大多數(shù)的指令都是有條件執(zhí)行的。在Thumb狀態(tài)下,僅有分支指令是有條件執(zhí)行的。n通常條件碼標(biāo)志通過執(zhí)行比較指令(CMN、CMP、TEQ、TST)、一些算術(shù)運(yùn)算、邏輯運(yùn)算和傳送指令進(jìn)行修改。n條件碼標(biāo)志的通常含義如下:n N:如果結(jié)果是帶符號二進(jìn)制補(bǔ)碼,那么,若結(jié)果為負(fù)數(shù),則N=1;若結(jié)果為正數(shù)或0,則N0。n Z:若指令的結(jié)果為0,則置1(通常表示比較的結(jié)果為“相等”),否則置0。n C:可用如下4種方法之一設(shè)置: 一加法(包括比較指令CMN)。若加法產(chǎn)生進(jìn)位(即無符號溢出),則C置1

32、;否則置0。 一減法(包括比較指令CMP)。若減法產(chǎn)生借位(即無符號溢出),則C置0;否則置1。 一對于結(jié)合移位操作的非加法減法指令,C置為移出值的最后1位。 一對于其他非加法減法指令,C通常不改變。n V:可用如下兩種方法設(shè)置,即 一對于加法或減法指令,當(dāng)發(fā)生帶符號溢出時,V置1,認(rèn)為操作數(shù)和結(jié)果是補(bǔ)碼形式的帶符號整數(shù)。 一對于非加法減法指令,V通常不改變。 (3)控制位 程序狀態(tài)寄存器PSR(Program Status Register)的最低8位I、F、T和M4:0用作控制位。當(dāng)異常出現(xiàn)時改變控制位。處理器在特 權(quán)模式下時也可由軟件改變。na中斷禁止位 I:置1,則禁止IRQ中斷; F

33、:置1,則禁止FIQ中斷。nbT位 T=0 指示ARM執(zhí)行; T=1 指示Thumb執(zhí)行。nc模式控制位 M4、M3、M2、Ml和M0(M4:0)是模式位,決定處理器的工作模式,如表2.3.1所列。M4:0 處理器工作模式可訪問的寄存器10000 用戶模式PC,CPSR,R14R0 10001 FIQ模式PC,R7R0,CPSR, SPSR_fiq,R14_fiqR8_fiq 10010 IRQ模式PC,R12R0,CPSR, SPSR_irq,R14_irq,R13_irq10011 管理模式PC,R12R0, CPSR, SPSR_svc,R14_svc,R13_svc10111 中止模式

34、PC,R12R0, CPSR, SPSR_abt,R14_abt,R13_abt11011 未定義模式PC,R12R0, CPSR, SPSR_und,R14_und,R13_und11111 系統(tǒng)模式PC,R14R0,CPSR(ARM v4及以上版本)表2.3.1 M4:0模式控制位 并非所有的模式位組合都能定義一種有效的處理器模式。其他組合的結(jié)果不可預(yù)知。n(4)其他位 程序狀態(tài)寄存器的其他位保留,用做以后的擴(kuò)展。n2.3.4 Thumb狀態(tài)的寄存器集nThumb狀態(tài)下的寄存器集如圖2.3.2所示,是ARM狀態(tài)下的寄存器集的子集。程序員可以直接訪問8個通用寄存器(R0R7)、PC、SP、L

35、R和CPSR。每一種特權(quán)模式都有一組SP、LR和SPSR。n Thumb狀態(tài)R0R7與ARM狀態(tài)R0R7是一致的。n Thumb狀態(tài)CPSR和SPSR與ARM的狀態(tài)CPSR和SPSR是一致的。n Thumb狀態(tài)SP映射到ARM狀態(tài)R13。n Thumb狀態(tài)LR映射到ARM狀態(tài)R14。n Thumb狀態(tài)PC映射到ARM狀態(tài)PC(R15)。圖2.3.2 Thumb狀態(tài)下寄存器組織nThumb狀態(tài)與ARM狀態(tài)的寄存器關(guān)系如圖2.3.3所示。圖2.3.3 Thumb狀態(tài)與ARM狀態(tài)的寄存器關(guān)系n在Thumb狀態(tài)下,寄存器R8R15(高寄存器)并不是標(biāo)準(zhǔn)寄存器集的一部分。匯編語言編程者訪問它雖有限制,但

36、可以將其用做快速暫存存儲器,將R0R7(Lo-registers,低寄存器)中的值傳送到R8R15(Hi-registers,高寄存器)。2.4 ARM微處理器的異常處理微處理器的異常處理n在一個正常的程序流程執(zhí)行過程中,由內(nèi)部或外部源產(chǎn)生的一個事件使正常的程序產(chǎn)生暫時的停止時,稱之為異常。異常是由內(nèi)部或外部源產(chǎn)生并引起處理器處理一個事件,例如一個外部的中斷請求。在處理異常之前,當(dāng)前處理器的狀態(tài)必須保留,當(dāng)異常處理完成之后,恢復(fù)保留的當(dāng)前處理器狀態(tài),繼續(xù)執(zhí)行當(dāng)前程序。多個異常同時發(fā)生時,處理器將會按固定的優(yōu)先級進(jìn)行處理。nARM體系結(jié)構(gòu)中的異常,與單片機(jī)的中斷有相似之處,但異常與中斷的概念并不

37、完全等同,例如外部中斷或試圖執(zhí)行未定義指令都會引起異常。n2.4.1 ARM體系結(jié)構(gòu)的異常類型nARM體系結(jié)構(gòu)支持7種類型的異常,異常類型、異常處理模式和優(yōu)先級如表2.4.1所示。異常出現(xiàn)后,強(qiáng)制從異常類型對應(yīng)的固定存儲器地址開始執(zhí)行程序。這些固定的地址稱為異常向量(Exception Vectors)。異常類型異常進(jìn)入模式地址(異常向量)優(yōu)先級復(fù)位復(fù)位管理模式0 x0000,00001(最高)未定義指令未定義指令未定義模式0 x0000,00046(最低)軟件中斷軟件中斷管理模式0 x0000,00086(最低)指令預(yù)取中止中止(預(yù)取指令)中止模式0 x0000,000C5數(shù)據(jù)中止中止(數(shù)據(jù)

38、)中止模式0 x0000,00102IRQ(外部中斷請求)IRQIRQ0 x0000,00184FIQ(快速中斷請求)FIQFIQ0 x0000,001C3表2.4.1 ARM體系結(jié)構(gòu)的異常類型和異常處理模式n2.4.2 異常類型的含義n(1)復(fù)位n當(dāng)處理器的復(fù)位電平有效時,產(chǎn)生復(fù)位異常,ARM處理器立刻停止執(zhí)行當(dāng)前指令。復(fù)位后,ARM處理器在禁止中斷的管理模式下,程序跳轉(zhuǎn)到復(fù)位異常處理程序處執(zhí)行(從地址0 x00000000或0 xFFFF0000開始執(zhí)行指令)。n(2)未定義指令異常n當(dāng)ARM處理器或協(xié)處理器遇到不能處理的指令時,產(chǎn)生未定義指令異常。當(dāng)ARM處理器執(zhí)行協(xié)處理器指令時,它必須

39、等待任一外部協(xié)處理器應(yīng)答后,才能真正執(zhí)行這條指令。若協(xié)處理器沒有響應(yīng),就會出現(xiàn)未定義指令異常。若試圖執(zhí)行未定義的指令,也會出現(xiàn)未定義指令異常。未定義指令異??捎糜谠跊]有物理協(xié)處理器(硬件)的系統(tǒng)上,對協(xié)處理器進(jìn)行軟件仿真,或在軟件仿真時進(jìn)行指令擴(kuò)展。n(3)軟件中斷異常(SoftWare Interrupt,SWI)n軟件中斷異常由執(zhí)行SWI指令產(chǎn)生,可使用該異常機(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用,用于用戶模式下的程序調(diào)用特權(quán)操作指令,以請求特定的管理(操作系統(tǒng))函數(shù)。n(4)指令預(yù)取中止n若處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問,存儲器會向處理器發(fā)出存儲器中止(Abort)信號,但當(dāng)預(yù)取的

40、指令被執(zhí)行時,才會產(chǎn)生指令預(yù)取中止異常。n(5)數(shù)據(jù)中止(數(shù)據(jù)訪問存儲器中止)n若處理器數(shù)據(jù)訪問指令的地址不存在,或該地址不允許當(dāng)前指令訪問時,產(chǎn)生數(shù)據(jù)中止異常。存儲器系統(tǒng)發(fā)出存儲器中止信號。響應(yīng)數(shù)據(jù)訪問(加載或存儲)激活中止,標(biāo)記數(shù)據(jù)為無效。在后面的任何指令或異常改變CPU狀態(tài)之前,數(shù)據(jù)中止異常發(fā)生。n(6)外部中斷請求(IRQ)異常n當(dāng)處理器的外部中斷請求引腳有效,且CPSR中的I位為0時,產(chǎn)生IRQ異常。系統(tǒng)的外設(shè)可通過該異常請求中斷服務(wù)。IRQ異常的優(yōu)先級比FIQ異常的低。當(dāng)進(jìn)入FIQ處理時,會屏蔽掉IRQ異常。n(7)快速中斷請求(FIQ)異常n當(dāng)處理器的快速中斷請求引腳有效,且CP

41、SR中的F位為0時,產(chǎn)生FIQ異常。FIQ支持?jǐn)?shù)據(jù)傳送和通道處理,并有足夠的私有寄存器。n2.4.3 異常的響應(yīng)過程n當(dāng)一個異常出現(xiàn)以后,ARM微處理器會執(zhí)行以下幾步操作:n 將下一條指令的地址存入相應(yīng)連接寄存器LR,以便程序在處理異常返回時能從正確的位置重新開始執(zhí)行。若異常是從ARM狀態(tài)進(jìn)入,LR寄存器中保存的是下一條指令的地址(當(dāng)前PC4或PC8,與異常的類型有關(guān));若異常是從Thumb狀態(tài)進(jìn)入,則在LR寄存器中保存當(dāng)前PC的偏移量。n 將CPSR狀態(tài)傳送到相應(yīng)的SPSR中。n 根據(jù)異常類型,強(qiáng)制設(shè)置CPSR的運(yùn)行模式位。n 強(qiáng)制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,跳轉(zhuǎn)到相應(yīng)的異常處

42、理程序。還可以設(shè)置中斷禁止位,以禁止中斷發(fā)生。n如果異常發(fā)生時,處理器處于Thumb狀態(tài),則當(dāng)異常向量地址加載入PC時,處理器自動切換到ARM狀態(tài)。n異常處理完畢之后,ARM微處理器會執(zhí)行以下幾步操作從異常返回:n 將連接寄存器LR的值減去相應(yīng)的偏移量后送到PC中。n 將SPSR內(nèi)容送回CPSR中。 n 若在進(jìn)入異常處理時設(shè)置了中斷禁止位,要在此清除。n可以認(rèn)為應(yīng)用程序總是從復(fù)位異常處理程序開始執(zhí)行的,因此復(fù)位異常處理程序不需要返回。n2.4.4 應(yīng)用程序中的異常處理 n在應(yīng)用程序的設(shè)計中,異常處理采用的方式是在異常向量表中的特定位置放置一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到異常處理程序。當(dāng)ARM處理器發(fā)生異常

43、時,程序計數(shù)器PC會被強(qiáng)制設(shè)置為對應(yīng)的異常向量,從而跳轉(zhuǎn)到異常處理程序,當(dāng)異常處理完成以后,返回到主程序繼續(xù)執(zhí)行。2.5 ARM的存儲器結(jié)構(gòu)nARM體系結(jié)構(gòu)允許使用現(xiàn)有的存儲器和I/O器件進(jìn)行各種各樣的存儲器系統(tǒng)設(shè)計。n1地址空間地址空間nARM體系結(jié)構(gòu)使用232個字節(jié)的單一、線性地址空間。將字節(jié)地址做為無符號數(shù)看待,范圍為02321。n2存儲器格式存儲器格式n對于字對齊的地址A,地址空間規(guī)則要求如下:n 地址位于A的字由地址為A、A1、A2和A3的字節(jié)組成;n 地址位于A的半字由地址為A和A1的字節(jié)組成;n 地址位于A2的半字由地址為A2和A3的字節(jié)組成;n 地址位于A的字由地址為A和A2的

44、半字組成。nARM存儲系統(tǒng)可以使用小端存儲或者大端存儲兩種方法,大端存儲和小端存儲格式如圖2.5.1所示。nARM體系結(jié)構(gòu)通常希望所有的存儲器訪問能適當(dāng)?shù)貙R。特別是用于字訪問的地址通常應(yīng)當(dāng)字對齊,用于半字訪問的地址通常應(yīng)當(dāng)半字對齊。未按這種方式對齊的存儲器訪問稱作非對齊的存儲器訪問。圖2.5.1 大端存儲和小端存儲格式n若在ARM態(tài)執(zhí)行期間,將沒有字對齊的地址寫到R15中,那么結(jié)果通常是不可預(yù)知或者地址的位1:0被忽略。若在Thumb態(tài)執(zhí)行期間,將沒有半字對齊的地址寫到R15中,則地址的位0通常忽略。 n3ARM存儲器結(jié)構(gòu)存儲器結(jié)構(gòu)nARM處理器有的帶有指令Cache和數(shù)據(jù)Cache,但不帶

45、有片內(nèi)RAM和片內(nèi)ROM。系統(tǒng)所需的RAM和ROM(包括Flash)都通過總線外接。由于系統(tǒng)的地址范圍較大(2324GB),有的片內(nèi)還帶有存儲器管理單元MMU(Memory Management Unit)。ARM架構(gòu)處理器還允許外接PCMCIA。n4存儲器映射存儲器映射I/OnARM系統(tǒng)使用存儲器映射I/O。I/O口使用特定的存儲器地址,當(dāng)從這些地址加載(用于輸入)或向這些地址存儲(用于輸出)時,完成I/O功能。加載和存儲也可用于執(zhí)行控制功能,代替或者附加到正常的輸入或輸出功能。n然而,存儲器映射I/O位置的行為通常不同于對一個正常存儲器位置所期望的行為。例如,從一個正常存儲器位置兩次連續(xù)的

46、加載,每次返回的值相同。而對于存儲器映射I/O位置,第2次加載的返回值可以不同于第1次加載的返回值。2.6 ARM微處理器指令系統(tǒng)n2.6.1 基本尋址方式n尋址方式是根據(jù)指令中給出的地址碼字段來實(shí)現(xiàn)尋找真實(shí)操作數(shù)地址的方式,ARM處理器有9 種基本尋址方式。n1寄存器尋址寄存器尋址n操作數(shù)的值在寄存器中,指令中的地址碼字段給出的是寄存器編號,寄存器的內(nèi)容是操作數(shù),指令執(zhí)行時直接取出寄存器值操作。n例如指令:nMOV R1,R2 ;R1R2 nSUB R0,R1,R2 ;R0R1- R2n2立即尋址立即尋址n在立即尋址指令中數(shù)據(jù)就包含在指令當(dāng)中,立即尋址指令的操作碼字段后面的地址碼部分就是操作

47、數(shù)本身,取出指令也就取出了可以立即使用的操作數(shù)(也稱為立即數(shù))。立即數(shù)要以“”為前綴,表示16進(jìn)制數(shù)值時以“0 x”表示。n例如指令:nADD R0,R0,#1 ;R0R0 + 1nMOV R0,#0 xff00 ;R00 xff00n3寄存器移位尋址寄存器移位尋址n寄存器移位尋址是ARM指令集特有的尋址方式。第2個寄存器操作數(shù)在與第1個操作數(shù)結(jié)合之前,先進(jìn)行移位操作。n例如指令:nMOV R0,R2,LSL #3 ;R2的值左移3位,結(jié)果放入R0,即R0=R2 * 8nANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相與操作,結(jié)果放入R1n可采用的移位操作如下:nL

48、SL:邏輯左移(Logical Shift Left),寄存器中字的低端空出的位補(bǔ)0。nLSR:邏輯右移(Logical Shift Right),寄存器中字的高端空出的位補(bǔ)0。nASR:算術(shù)右移(Arithmetic Shift Right),移位過程中保持符號位不變,即如果源操作數(shù)為正數(shù),則字的高端空出的位補(bǔ)0,否則補(bǔ)1nROR:循環(huán)右移(Rotate Right),由字的低端移出的位填入字的高端空出的位nRRX:帶擴(kuò)展的循環(huán)右移(Rotate Right extended by 1 place),操作數(shù)右移一位,高端空出的位用原C 標(biāo)志值填充。n各移位操作過程如圖2.6.1所示。圖2.6

49、.1 移位操作過程n4寄存器間接尋址寄存器間接尋址n指令中的地址碼給出的是一個通用寄存器編號,所需要的操作數(shù)保存在寄存器指定地址的存儲單元中,即寄存器為操作數(shù)的地址指針,操作數(shù)存放在存儲器中。n例如指令 :nLDR R0,R1 ;R0R1(將R1中的數(shù)值作為地址,取出此地址中的數(shù)據(jù)保存在R0中)nSTR R0,R1 ;R1 R0n5變址尋址變址尋址n變址尋址是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址,變址尋址用于訪問基址附近的存儲單元,常用于查表,數(shù)組操作,功能部件寄存器訪問等。n例如指令:nLDR R2,R3,#4 ;R2R3 + 4(將R3中的數(shù)值加4作為地 址,取

50、出此地址的數(shù)值保存在R2 中)nSTR R1,R0,#-2 ;R0-2 R1(將R0中的數(shù)值減2 作為地址,把R1中的內(nèi)容保存到此地址位置)n6多寄存器尋址多寄存器尋址n采用多寄存器尋址方式,一條指令可以完成多個寄存器值的傳送,這種尋址方式用一條指令最多可以完成16個寄存器值的傳送。 例如指令: LDMIA R0,R1,R2,R3,R5 ;R1R0 ;R2R0 + 4 ;R3R3 + 8 ;R4R3 + 12 n7堆棧尋址堆棧尋址n堆棧是一種數(shù)據(jù)結(jié)構(gòu),堆棧是特定順序進(jìn)行存取的存儲區(qū),操作n順序分為“后進(jìn)先出”和“先進(jìn)后出”,堆棧尋址時隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區(qū)域(

51、堆棧),指針?biāo)赶虻拇鎯卧褪嵌褩5臈m敗4鎯ζ魃L堆??煞譃閮煞N:n 向上生長:向高地址方向生長,稱為遞增堆棧(Ascending Stack)。n 向下生長:向低地址方向生長,稱為遞減堆棧(Decending Stack)。n堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項(xiàng),稱為滿堆棧(Full Stack);堆棧指針指向下一個要放入的空位置,稱為空堆棧(Empty Stack)。n這樣就有四種類型的堆棧工作方式,ARM微處理器支持這四種類型的堆棧工作方式,即:n 滿遞增堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生成。如指令LDMFA,STMFA 等。n 滿遞減堆棧:堆棧指針指向最后壓入

52、的數(shù)據(jù),且由高地址向低地址生成。如指令LDMFD,STMFD 等。n 空遞增堆棧:堆棧指針指向下一個將要放入數(shù)據(jù)的空位置,且由低地址向高地址生成。如指令LDMEA,STMEA 等。n 空遞減堆棧:堆棧指針指向下一個將要放入數(shù)據(jù)的空位置,且由高地址向低地址生成。如指令LDMED,STMED 等。n8塊復(fù)制尋址塊復(fù)制尋址n塊復(fù)制尋址用于把一塊從存儲器的某一位置復(fù)制到另一位置,是一個多寄存器傳送指令。n例如指令:nSTMIA R0!,R1-R7 ;將R1R7的數(shù)據(jù)保存到存儲器中,存儲器指針在保存第一個值之后增加,增長方向?yàn)橄蛏显鲩L。nSTMDA R0!,R1-R7 ;將R1R7的數(shù)據(jù)保存到存儲器中,

53、存儲器指針在保存第一個值之后增加,增長方向?yàn)橄蛳略鲩L。n9相對尋址相對尋址n相對尋址是變址尋址的一種變通,由程序計數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。n例如指令: BL ROUTE1 ;調(diào)用到ROUTE1子程序 BEQ LOOP ;條件跳轉(zhuǎn)到LOOP標(biāo)號處 LOOP MOV R2,#2 ROUTE1 n2.6.2 ARM 指令集n1指令格式指令格式n(1)基本格式 S , 其中,內(nèi)的項(xiàng)是必須的,內(nèi)的項(xiàng)是可選的,如是指令助記符,是必須的,而為指令執(zhí)行條件,是可選的,如果不寫則使用默認(rèn)條件AL(無條件執(zhí)行)。 opcode 指令助記符,如L

54、DR,STR等 cond 執(zhí)行條件,如EQ,NE等 S 是否影響CPSR 寄存器的值,書寫時影響CPSR,否則不影響 Rd 目標(biāo)寄存器 Rn 第一個操作數(shù)的寄存器noperand2 第二個操作數(shù)。在ARM指令中,靈活的使用第2個操作數(shù)能提高代碼效率,第2個操作數(shù)的形式如0 x3FC、0、0 xF0000000、200,0 xF0000001等。n指令格式舉例如下: LDR R0,R1 ;讀取R1地址上的存儲器單元內(nèi)容,執(zhí)行條件AL BEQ DATAEVEN ;跳轉(zhuǎn)指令,執(zhí)行條件EQ,即相等跳轉(zhuǎn)到DATAEVEN ADDS R1,R1,#1 ;加法指令,R11R1 影響CPSR寄存器,帶有S S

55、UBNES R1,R1,#0 xD ;條件執(zhí)行減法運(yùn)算(NE),R1-0 xD=R1,影響CPSR寄存器,帶有Sn(2)條件碼 幾乎所有的ARM指令都包含一個可選擇的條件碼,即。使用指令條件碼,可實(shí)現(xiàn)高效的邏輯操作,提高代碼效率。ARM條件碼如表2.6.1所示。操作碼31:28條件碼助記符標(biāo)志含義0000EQZ1相等0001NEZ0不相等0010CS/HSC=1無符號數(shù)大于或等于0011CC/LOC=0無符號數(shù)小于0100MIN=1負(fù)數(shù)0101PLN=0正數(shù)或零0110VSV=1溢出0111VCV=0沒有溢出表2.6.1 ARM條件碼1000HIC=1,Z=0無符號數(shù)大于1001LSC=0,Z

56、=1無符號數(shù)小于或等于1010GEN=V帶符號數(shù)大于或等于1011LTN!=V帶符號數(shù)小于1100GTZ=0,N=V帶符號數(shù)大于1101LEZ=1,N!=V帶符號數(shù)小于或等于1110AL任何無條件執(zhí)行(指令默認(rèn)條件)n2ARM 存儲器訪問指令存儲器訪問指令nARM微處理器支持加載/存儲指令用于在寄存器和存儲器之間傳送數(shù)據(jù),加載指令用于將存儲器中的數(shù)據(jù)傳送到寄存器,存儲指令則完成相反的操作。ARM的加載/存儲指令是可以實(shí)現(xiàn)字、半字、,無符/有符字節(jié)操作;批量加載/存儲指令可實(shí)現(xiàn)一條指令加載/存儲多個寄存器的內(nèi)容;SWP指令是一條寄存器和存儲器內(nèi)容交換的指令,可用于信號量操作等。nARM處理器是馮

57、.諾依曼存儲結(jié)構(gòu),程序空間、RAM空間及IO映射空間統(tǒng)一編址,除對對RAM操作以外,對外圍IO、程序數(shù)據(jù)的訪問均要通過加載/存儲指令進(jìn)行。nARM存儲訪問指令表如表2.6.2所示。助記符說明操作條件碼位置LDRRd,addressing 加載字?jǐn)?shù)據(jù) Rdaddressing,addressing 索引 LDRcond LDRBRd,addressing 加載無符字節(jié)數(shù)據(jù) Rdaddressing,addressing 索引 LDRcondB LDRTRd,addressing 以用戶模式加載字?jǐn)?shù)據(jù) Rdaddressing,addressing 索引 LDRcondT LDRBTRd,addr

58、essing 以用戶模式加載無符號字?jǐn)?shù)據(jù) Rdaddressing,addressing 索引LDRcondBT LDRHRd,addressing 加載無符半字?jǐn)?shù)據(jù) Rdaddressing,addressing 索引 LDRcondH 表2.6.2 ARM 存儲訪問指令表STRBRd,addressing 存儲字節(jié)數(shù)據(jù) addressingRd,addressing 索引 STRcondB STRTRd,addressing 以用戶模式存儲字?jǐn)?shù)據(jù) addressingRd,addressing 索引 STRcondT SRTBTRd,addressing 以用戶模式存儲字節(jié)數(shù)據(jù) addre

59、ssingRd,addressing 索引 STRcondBT STRHRd,addressing 存儲半字?jǐn)?shù)據(jù) addressingRd,addressing 索引 STRcondH LDMmode Rn!,reglist 批量(寄存器)加載 reglistRn,Rn 回存等 LDMcondmore STMmode Rn!,rtglist 批量(寄存器)存儲 Rn reglist,Rn 回存等 STMcondmore SWP Rd,Rm,Rn 寄存器和存儲器字?jǐn)?shù)據(jù)交換 RdRd,RnRm(RnRd 或Rm) SWPcond SWPB Rd,Rm,Rn 寄存器和存儲器字節(jié)數(shù)據(jù)交換 RdRd,R

60、nRm(RnRd 或Rm) SWPcondB n指令示例: LDR R0,R1 ;將存儲器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0。 LDR R0,R1,R2 ;將存儲器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0。 LDR R0,R1,8 ;將存儲器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R0。 LDR R0,R1,R2! ;將存儲器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地 址R1R2寫入R1。 LDR R0,R1,8! ;將存儲器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址 R8寫入R1。 LDR R0,R1,R2 ;將存儲器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1R2寫入R1。 LDR R0,R1,R2,

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論