




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、52 ARM體系結(jié)構(gòu)概述 ARM編程模型 ARM基本尋址方式 ARM指令集 匯編語言程序設(shè)計(jì)53 ARM簡(jiǎn)介 ARM體系結(jié)構(gòu)的特點(diǎn) ARM處理器結(jié)構(gòu) ARM體系的變種 ARM處理器內(nèi)核 ARM處理器核54Advances RISC Machines (稱為ARM) 由 Acorn、Apple和VLSI公司1990年11月聯(lián)合建立的一家設(shè)計(jì)公司。ARM是16/32位嵌入式RISC處理器知識(shí)產(chǎn)權(quán)供應(yīng)商,該公司主要提供高性能, 低價(jià)位, 低功耗的RISC處理器、外圍設(shè)備, 和系統(tǒng)芯片設(shè)計(jì)給重要的國(guó)際電子企業(yè)。ARM處理器有3大特點(diǎn)耗電少、成本低、功能強(qiáng)。16/32位雙指令集全球眾多合作伙伴保證供應(yīng)A
2、RM目前主要有6個(gè)系列的產(chǎn)品:ARM7、ARM9、ARM10E、ARM11、SecurCore、CORTEX。另外還有Inter公司的Xscale和StrongARM。第第3章章 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 55 手機(jī)處理器90%的市場(chǎng)份額 上網(wǎng)本處理器30%的市場(chǎng)份額 平板電腦處理器70%的市場(chǎng)份額 2010年,ARM合作伙伴的出貨量達(dá)到了60億 2007年底,ARM的雇員總數(shù)為1728人,持有專利700項(xiàng)(另有900項(xiàng)正在申請(qǐng)批準(zhǔn)中),全球分支機(jī)構(gòu)31家,合作伙伴200家,年收入2.6億英鎊。 5657RISC型處理器結(jié)構(gòu):指令相對(duì)比較精簡(jiǎn),降低了處理器
3、的負(fù)載性,提高了處理器的速度。Thumb指令集:在新型的ARM體系結(jié)構(gòu)中定義了16位的Thumb指令集,彌補(bǔ)了RISC型處理器占用指令存儲(chǔ)空間大的缺點(diǎn)。多處理器狀態(tài)模式:支持7種處理器模式,可以大大提高ARM處理器的效率。嵌入式在線仿真調(diào)試:內(nèi)嵌在線仿真ICE-RT邏輯,便于通過JTAG來仿真調(diào)試ARM體系結(jié)構(gòu)芯片。靈活和方便的接口:有16的協(xié)處理器接口,方便擴(kuò)充各種功能;具有片上總線AMBA,它定義了3組總線,可方便地?cái)U(kuò)充各種處理器及I/O,便于集成。低電壓低功耗的設(shè)計(jì)第第3章章 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 58 由32位ALU、31個(gè)32位通用寄存器及6
4、個(gè)狀態(tài)寄存器、乘法器、3232位桶形移位寄存器、指令譯碼機(jī)控制邏輯、指令流水線和數(shù)據(jù)/地址寄存器組成。ARM的流水線結(jié)構(gòu):ARM7體系結(jié)構(gòu)采用3級(jí)流水線ARM9體系結(jié)構(gòu)采用5級(jí)流水線ARM10體系結(jié)構(gòu)采用6級(jí)流水線ARM存儲(chǔ)器結(jié)構(gòu):ARM處理器不帶有片內(nèi)存儲(chǔ)器,系統(tǒng)所需的RAM和ROM通過總線外接,部分處理器片內(nèi)帶有存儲(chǔ)器管理單元MMU。ARM的I/O結(jié)構(gòu): ARM處理器不帶有I/O部件和模塊,需要通過總線來擴(kuò)充。第第3章章 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 596061存儲(chǔ)器映射I/O:ARM處理器對(duì)I/O端口地址采用統(tǒng)一編址方式,即把I/O端口地址作為特殊的存
5、儲(chǔ)器地址。直接存儲(chǔ)器存取DMA: ARM處理器一般沒有DMA部件,高檔ARM處理器有。中斷IRQ和快速中斷FIQ:ARM提供一般中斷和快速中斷,通常用快速中斷代替DMA的功能。主要通過采用大量后備寄存器保存現(xiàn)場(chǎng)、片內(nèi)RAM等加速中斷的進(jìn)入時(shí)間。ARM協(xié)處理器接口:ARM通過增加協(xié)處理器來支持一個(gè)通用的指令集的擴(kuò)充。可以擴(kuò)展16個(gè)協(xié)處理器,每個(gè)協(xié)處理器可有16個(gè)寄存器。第第3章章 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 62ARM AMBA接口:采用先進(jìn)微控制器總線(AMBA)擴(kuò)展不同體系架構(gòu)的宏單元及I/O部件。AMBA總線包括三類:先進(jìn)系統(tǒng)總線ASB:作為系統(tǒng)總線,用
6、來連接高性能系統(tǒng)模塊。先進(jìn)高性能總線AHB:作為系統(tǒng)總線,用來連接高性能系統(tǒng)模塊。比ASB功能強(qiáng)。先進(jìn)外圍總線APB:用于連接外圍宏單元。ARM JTAG調(diào)試接口:用于處理器狀態(tài)測(cè)試JTAG是英文“Joint Test Action Group(聯(lián)合測(cè)試行為組織)” 縮寫,主要用于芯片內(nèi)部測(cè)試。主要有4根線:TMS、TCK、TDI、TDO 第第3章章 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 63Thumb指令集(T變種):Thumb指令集是將ARM指令集的一個(gè)子集重新編碼而形成的一個(gè)指令集。ARM指令長(zhǎng)度為32位,Thumb指令長(zhǎng)度為16位。這樣,使用Thumb指令可以
7、得到密度更高的代碼,這對(duì)于需要嚴(yán)格控制產(chǎn)品成本的設(shè)計(jì)是非常有意義的。長(zhǎng)乘法指令(M變種):M變種增加了兩條用于進(jìn)行長(zhǎng)乘法的ARM指令。其中一條用于實(shí)現(xiàn)32位整數(shù)乘以32位整數(shù),生成64位整數(shù)的長(zhǎng)乘法操作;另一條指令用于實(shí)現(xiàn)32位整數(shù)乘以32位位整數(shù),然后加上32位整數(shù),生成64位整數(shù)的長(zhǎng)乘加操作。增強(qiáng)型DSP指令(E變種):E變種包含了一些附加的指令,這些指令用于增強(qiáng)處理器對(duì)一些典型的DSP算法的處理性能。主要包括: 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 64幾條新的實(shí)現(xiàn)16位數(shù)據(jù)乘法和乘加操作的指令 實(shí)現(xiàn)飽和的帶符號(hào)數(shù)的加減法操作的指令。即在加減法操作溢出時(shí),結(jié)果并
8、不進(jìn)行卷繞,而是使用最大整數(shù)或最小負(fù)數(shù)來表示進(jìn)行雙字?jǐn)?shù)據(jù)操作的指令Cache預(yù)取指令PLDJava加速器Jazelle(J變種):ARM的Jazelle技術(shù)將Java的優(yōu)勢(shì)和先進(jìn)的32位RISC芯片完美地結(jié)合在一起。Jazelle技術(shù)提供了Java加速功能,可以得到比普通Java虛擬機(jī)高得多的性能。ARM媒體功能擴(kuò)展(SIMD變種):將音頻/視頻處理提高2-4倍,可以同時(shí)進(jìn)行兩個(gè)16位操作數(shù)或者4個(gè)8位操作數(shù)的運(yùn)算,并提供了小數(shù)算術(shù)運(yùn)算 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 6516 bit 16 bit 16 bit 16 bit 16 bit 16 bit 16
9、bit 16 bit16 bit源A源B結(jié)果同一個(gè)操作16 bit 16 bit 16 bit 16 bit 16 bit 16 bit 16 bit16 bit 16 bit 16 bit 16 bit 16 bit 16 bit 16 bit 16 bit66ARM微處理器目前包括下面幾個(gè)系列除了具有ARM體系結(jié)構(gòu)的共同特點(diǎn)以外,每一個(gè)系列的ARM微處理器都有各自的特點(diǎn)和應(yīng)用領(lǐng)域。ARM7、ARM9、ARM10E、ARM11、Cortex、Inter的Xscale和StrongARM。ARM內(nèi)核芯片具有RISC體系的一般特點(diǎn):具有大量寄存器 。絕大多數(shù)操作都是在寄存器中進(jìn)行,寄存器與內(nèi)存打
10、交道的唯一是通過Load/Store的體系結(jié)構(gòu)在內(nèi)存和寄存器之間傳遞數(shù)據(jù)。 尋址方式簡(jiǎn)單。采用固定長(zhǎng)度的指令。 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 67 ARM7系列微處理器:低功耗的32位RISC處理器,適合用于對(duì)價(jià)位和功耗要求較高的消費(fèi)類應(yīng)用。特點(diǎn)如下:具有嵌入式ICERT邏輯,調(diào)試開發(fā)方便。 極低的功耗,適合對(duì)功耗要求較高的應(yīng)用,如便攜式產(chǎn)品。 能夠提供0.9MIPS/MHz的三級(jí)流水線結(jié)構(gòu)。 代碼密度高并兼容16位的Thumb指令集。 對(duì)操作系統(tǒng)的支持廣泛,包括Windows CE、Linux、Palm OS等。 指令系統(tǒng)與ARM9系列、ARM9E系列和AR
11、M10E系列兼容,便于用戶的產(chǎn)品升級(jí)換代。 主頻最高可達(dá)130MIPS,高速的運(yùn)算處理能力能勝任絕大多數(shù)的復(fù)雜應(yīng)用。 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 68 應(yīng)用領(lǐng)域:工業(yè)控制、Internet設(shè)備、網(wǎng)絡(luò)和調(diào)制解調(diào)器設(shè)備、移動(dòng)電話等多種多媒體和嵌入式應(yīng)用。 ARM7系列微處理器包括如下幾種類型的核:ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。 其中,ARM7TMDI是目前使用最廣泛的32位嵌入式RISC處理器,屬低端ARM處理器核。T代表支持Thumb指令集;M代表支持長(zhǎng)乘法;D代表支持片上調(diào)試;I代表支持嵌入式跟蹤宏單元,便于實(shí)現(xiàn)調(diào)試中
12、的斷點(diǎn)和變量觀察;J代表支持Java加速;S代表可綜合。 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 69 ARM9系列微處理器在高性能和低功耗特性方面提供最佳的性能。具有以下特點(diǎn):5級(jí)整數(shù)流水線,指令執(zhí)行效率更高。提供1.1MIPS/MHz的哈佛結(jié)構(gòu)。 支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA總線接口。全性能的MMU,支持Windows CE、Linux、等多種主流嵌入式操作系統(tǒng)。MPU支持實(shí)時(shí)操作系統(tǒng)。 支持?jǐn)?shù)據(jù)Cache和指令Cache。 應(yīng)用領(lǐng)域:無線設(shè)備、儀器儀表、安全系統(tǒng)、機(jī)頂盒、高端打印機(jī)、數(shù)字照相機(jī)和數(shù)字?jǐn)z像機(jī)等。 ARM9系
13、列微處理器包括如下幾種類型的核: ARM920T、ARM922T和ARM940T三種類型。 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 70 ARM11系列微處理器是目前ARM家族中性能最好的一個(gè)系列,尤其是在多媒體處理能力方面,在先進(jìn)的0.13 m工藝下,主頻可達(dá)750 MHz;ARM11核包含一個(gè)64位端口、4種狀態(tài)的跳轉(zhuǎn)目的地址緩存,支持SIMD指令,可使某些算法的運(yùn)算速度提高23倍。(1) 多媒體處理擴(kuò)展,使MPEG-4編碼/解碼速度加快一倍,音頻處理速度加快一倍;(2) 增強(qiáng)的Cache結(jié)構(gòu),實(shí)地址Cache,減少Cache的刷 新 和 重 載 , 減 少 上 下
14、 文 切 換 的 開 銷 ;(3) 增強(qiáng)的異常和中斷處理,使實(shí)時(shí)任務(wù)的處理更加迅速;(4) 支持Unaligned和Mixed-endian數(shù)據(jù)訪問,使數(shù)據(jù)共享、軟件移植更簡(jiǎn)單,也有利于節(jié)省存儲(chǔ)器空間。71 ARM Cortex系列產(chǎn)品由三個(gè)系列所組成,全都采用V7/Thumb-2指令集設(shè)計(jì),定位如下: ARM Cortex-A系列:復(fù)雜操作系統(tǒng)及客戶端裝置之應(yīng)用處理器;A多媒體,開放式操作系統(tǒng),dsp加速。 高端 ARM Cortex-R系列:針對(duì)實(shí)時(shí)系統(tǒng)的嵌入式處理器;R實(shí)時(shí),可預(yù)測(cè)性,超級(jí)穩(wěn)定性。中端 ARM Cortex-M系列:價(jià)格敏感型應(yīng)用裝置之嵌入式處理器,包括微處理器應(yīng)用;M為
15、工控設(shè)計(jì),小巧快速。 低端72 處理器模式與狀態(tài) ARM寄存器組織 異常Exceptions 存儲(chǔ)器和存儲(chǔ)器映射I/O73ARM處理器支持7種不同的處理器模式,除用戶模式外的其它模式通稱為特權(quán)模式,主要是為了服務(wù)中斷或異常,或訪問保護(hù)的資源。除用戶和系統(tǒng)模式外的其它模式通稱為異常模式。處理器模式描述用戶usr正常程序執(zhí)行的模式快速中斷fiq用于高速數(shù)據(jù)傳輸和通道處理外部中斷irq用于通常的中斷處理 管理svc供操作系統(tǒng)使用的一種保護(hù)模式中止abt用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù) 未定義und用于支持硬件協(xié)處理器的軟件仿真系統(tǒng)sys用于運(yùn)行特權(quán)級(jí)的操作系統(tǒng)任務(wù) ARM處理器的7種處理器模式異常模式特權(quán)模式
16、 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 74ARM處理器有處理器有2種工作狀態(tài)種工作狀態(tài)Thumb指令集的功能是指令集的功能是32位位ARM指令集的指令集的功能子集。功能子集。Thumb在性能和代碼大小之間提供在性能和代碼大小之間提供了出色的折中。了出色的折中。正在執(zhí)行正在執(zhí)行Thumb指令集的處理器是工作在指令集的處理器是工作在Thumb狀態(tài)下。狀態(tài)下。正在執(zhí)行正在執(zhí)行ARM指令集的處理器是工作在指令集的處理器是工作在ARM狀態(tài)狀態(tài)下。下。 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 75 ARM處理器共有37個(gè)寄存器。其中包括:31個(gè)通用寄存器
17、,包括R0R15,其中R15為程序計(jì)數(shù)器(PC)。這些寄存器都是32位寄存器。在每種處理器模式中都有一組這樣的寄存器。任意模式下,可見的寄存器包括16個(gè)通用寄存器(R0R15)、一個(gè)或兩個(gè)狀態(tài)寄存器。在所有的寄存器中,有些是各模式共用的一個(gè)物理寄存器;有一些寄存器是各模式自己擁有的獨(dú)立的物理寄存器。6個(gè)狀態(tài)寄存器,這些寄存器也是32位寄存器,但只使用了其中的12位。 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 76不分組寄存器R0R7:任何模式下所訪問的都是同樣的物理寄存器。分組寄存器R8R14:每一個(gè)訪問的物理寄存器取決于當(dāng)前的處理器模式,若要訪問特定的物理寄存器而不依賴
18、于當(dāng)前的處理器模式,則要使用規(guī)定的名字。其中:R13通常用作堆棧指針,稱為SPR14用于子程序連接寄存器,稱為L(zhǎng)R程序計(jì)數(shù)器R15:由于ARM體系結(jié)構(gòu)采用了多級(jí)流水線技術(shù),PC總是指向當(dāng)前指令的下兩條指令的地址,即PC的值=當(dāng)前指令的地址+8。并且在ARM狀態(tài),位1:0為0(字對(duì)齊)在Thumb狀態(tài)位0為0,(半字對(duì)齊) 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 77 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 78Lable程序A程序BR14BL Lable地址A?MOV PC,LRR14(地址A)Lable?1.程序A執(zhí)行過程中調(diào)用程序B;操作流程
19、2.程序跳轉(zhuǎn)至標(biāo)號(hào)Lable,執(zhí)行程序B。同時(shí)硬件將“BL Lable”指令的下一條指令所在地址存入R14;3.程序B執(zhí)行最后,將R14寄存器的內(nèi)容放入PC,返回程序A;79寄存器類別寄存器在匯編中的名稱各模式下實(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)
20、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),它指向正在取指的地址。可以認(rèn)為它是一個(gè)通用寄存器,但是對(duì)于它的使用有許多與指令相關(guān)的限制或特殊情況。如果R15使用的方式超出了這些限制,那么結(jié)果將是不可預(yù)測(cè)的。80 讀R15的限制 正常操作時(shí),從R15讀取的值是處理器正在取指的地址,即當(dāng)
21、前正在執(zhí)行指令的地址加上8個(gè)字節(jié)(兩條ARM指令的長(zhǎng)度)。由于ARM指令總是以字為單位,所以R15寄存器的最低兩位總是為0。LDR R0,PC?PCPC-4PC-8正在執(zhí)行正在譯碼正在取指流水線狀態(tài)地址程序代碼81 讀R15的限制 當(dāng)使用STR或STM指令保存R15時(shí),會(huì)有一個(gè)例外。這些指令可能將當(dāng)前指令地址加8字節(jié)或加12字節(jié)保存(將來可能還有其它數(shù)字)。偏移量是8還是12取決于具體的ARM芯片,但是對(duì)于一個(gè)確定的芯片,這個(gè)值是一個(gè)常量。 所以最好避免使用STR和STM指令來保存R15,如果很難做到,那么應(yīng)當(dāng)在程序中計(jì)算出該芯片的偏移量。82 寫R15的限制 正常操作時(shí),寫入正常操作時(shí),寫入
22、R15 R15 的值被當(dāng)作一個(gè)的值被當(dāng)作一個(gè)指令地址,程序從這個(gè)地址處繼續(xù)執(zhí)行(相指令地址,程序從這個(gè)地址處繼續(xù)執(zhí)行(相當(dāng)于執(zhí)行一次無條件跳轉(zhuǎn))。當(dāng)于執(zhí)行一次無條件跳轉(zhuǎn))。 83 寫R15的限制 由于ARM指令以字節(jié)為邊界,因此寫入R15的值最低兩位通常為0b00。具體的規(guī)則取決于內(nèi)核結(jié)構(gòu)的版本:在ARM結(jié)構(gòu)V3版及以下版本中,寫入R15的值的最低兩位被忽略,因此跳轉(zhuǎn)地址由指令的實(shí)際目標(biāo)地址(寫入R15的值)和0 xFFFFFFFC相與得到;在ARM結(jié)構(gòu)V4版及以上版本中,寫入R15的值的最低兩位為0,如果不是,結(jié)果將不可預(yù)測(cè)。84寄 存 器 R 1 6 用 作 當(dāng) 前 程 序 狀 態(tài) 寄 存
23、 器CPSR,可在任何運(yùn)行模式下被訪問,它包括:每一種異常模式下有一個(gè)專用的物理狀態(tài)寄存器,稱為備份程序狀態(tài)寄存器SPSR,當(dāng)異常發(fā)生時(shí),SPSR用于保存CPSR的當(dāng)前值,從異常退出時(shí)則可由SPSR來恢復(fù)CPSR。用戶模式和系統(tǒng)模式下不應(yīng)該訪問SPSR。 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 85Thumb狀態(tài)下的寄存器集是ARM狀態(tài)下寄存器集的一個(gè)子集,程序員可以直接訪問8個(gè)通用寄存器R07、PC、SP、LR、和CPSR。在每一種特權(quán)模式下都有一組SP、LR和SPSR。 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 868788當(dāng)正常的程序執(zhí)行流程
24、發(fā)生暫時(shí)的停止時(shí),稱之為異常,例如處理一個(gè)外部的中斷請(qǐng)求。在處理異常之前,當(dāng)前處理器的狀態(tài)必須保留,這樣當(dāng)異常處理完成之后,當(dāng)前程序可以繼續(xù)執(zhí)行。處理器允許多個(gè)異常同時(shí)發(fā)生,它們將會(huì)按固定的優(yōu)先級(jí)進(jìn)行處理。ARM體系結(jié)構(gòu)中的異常,與8位/16位體系結(jié)構(gòu)的中斷有很大的相似之處,但異常與中斷的概念并不完全等同。 當(dāng)異常出現(xiàn)后,ARM強(qiáng)制從異常類型對(duì)應(yīng)的固定存儲(chǔ)器地址開始執(zhí)行程序。這些固定的地址稱為異常向量Exception Vectors(P40表3-6) 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 89復(fù)位:當(dāng)處理器復(fù)位電平有效時(shí),產(chǎn)生復(fù)位異常。未定義指令:當(dāng)ARM處理器或協(xié)
25、處理器遇到不能處理的指令時(shí),產(chǎn)生未定義指令異常。軟件中斷:由執(zhí)行SWI指令產(chǎn)生,可使用該異常機(jī)制實(shí)現(xiàn)用戶模式下的系統(tǒng)功能調(diào)用。指令預(yù)取中止:當(dāng)指令預(yù)取訪問存儲(chǔ)器失敗并且無效的預(yù)取指令被執(zhí)行時(shí),產(chǎn)生指令預(yù)取中止異常。 數(shù)據(jù)中止:若處理器數(shù)據(jù)訪問的地址不存在,或該地址不允許當(dāng)前指令訪問時(shí),產(chǎn)生數(shù)據(jù)中止異常。 外部中斷請(qǐng)求IRQ:當(dāng)處理器的外部中斷請(qǐng)求引腳有效,且CPSR中的I位為0時(shí),產(chǎn)生IRQ異常??焖僦袛嗾?qǐng)求FIQ:當(dāng)處理器的快速中斷請(qǐng)求引腳有效,且CPSR中的F位為0時(shí),產(chǎn)生FIQ異常。 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 90異常向量表 1 2 3ARM體系結(jié)構(gòu)
26、概述ARM編程模型 ARM基本尋址方式 91優(yōu)先級(jí)優(yōu)先級(jí)異常異常優(yōu)先級(jí)優(yōu)先級(jí)異常異常1(最高)(最高)復(fù)位復(fù)位4IRQ2數(shù)據(jù)中止數(shù)據(jù)中止5預(yù)取中止預(yù)取中止3FIQ6(最低)(最低)未定義指令、未定義指令、SWI92 響應(yīng)將下一條指令的地址存入相應(yīng)LR,以便程序在處理異常返回時(shí)能從正確的位置重新開始執(zhí)行。將CPSR復(fù)制到相應(yīng)的SPSR中。根據(jù)異常類型,強(qiáng)制設(shè)置CPSR的運(yùn)行模式位。強(qiáng)制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處。 返回: 將LR的值回送到PC中。 將SPSR復(fù)制回CPSR中。 若進(jìn)入異常處理時(shí)設(shè)置了中斷禁止位,則清除。 1 2 3ARM體系結(jié)構(gòu)概述A
27、RM編程模型 ARM基本尋址方式 93 異常發(fā)生時(shí),程序要跳轉(zhuǎn)至異常服務(wù)程序,對(duì)返回地址的處理與子程序調(diào)用類似,都是由硬件完成的。區(qū)別在于有些異常有一個(gè)小常量的偏移。R14R14_irq用戶模式下的程序IRQ模式下的程序AareturnB.XA地址A地址A1.執(zhí)行用戶模式下的程序;2.發(fā)生IRQ中斷,硬件將某個(gè)地址存入IRQ模式下的R14_irq寄存器,用戶模式下的R14沒有被破壞;3. IRQ服務(wù)程序A執(zhí)行完畢,將R14_irq寄存器的內(nèi)容減去某個(gè)常量后存入PC,返回之前被中斷的程序;未被破壞94R14R14_irq用戶模式下的程序IRQ模式下的程序AaB.XA地址A地址A1.執(zhí)行用戶模式下
28、的程序;2.發(fā)生IRQ中斷,硬件將某個(gè)地址存入IRQ模式下的R14_irq寄存器,用戶模式下的R14沒有被破壞;3. IRQ服務(wù)程序A執(zhí)行完畢,將R14_irq寄存器的內(nèi)容減去某個(gè)常量后存入PC,返回之前被中斷的程序;未被破壞IRQ模式下的程序BareturnB.XA地址B地址B4. 如果在IRQ處理程序中打開IRQ中斷,并且再次發(fā)生IRQ中斷,或者調(diào)用子程序;5. 硬件將返回地址保存在R14_irq寄存器中,原來保存的返回地址將被覆蓋,造成錯(cuò)誤;被破壞6. 在程序B返回到程序A,然后在返回到用戶模式下被中斷的程序時(shí),發(fā)生錯(cuò)誤,將不能正確返回;returnreturn 解決辦法是確保R14的對(duì)
29、應(yīng)版本在發(fā)生中斷嵌套時(shí)不再保存任何有意義的值(將R14入棧),或者切換到其它處理器模式下。 當(dāng)發(fā)生異常嵌套時(shí),這些異常之間可能會(huì)發(fā)生沖突。例如:如果用戶在用戶模式下執(zhí)行程序時(shí)發(fā)生了IRQ中斷,用戶模式寄存器不會(huì)被破壞。但是如果允許在IRQ模式下的中斷處理程序重新使能IRQ中斷,并且發(fā)生了嵌套的IRQ中斷時(shí),外部中斷處理程序保存在R14_irq中的任何值都將被嵌套中斷的返回地址所覆蓋。95存儲(chǔ)器:ARM體系使用單一的平板地址空間。該地址空間的大小為232個(gè)8位字節(jié),即4G。存儲(chǔ)器訪問的地址要求對(duì)準(zhǔn),ARM存儲(chǔ)器的空間可以是:字節(jié)對(duì)齊,范圍為0232-1半字對(duì)齊(A、A+1),范圍為0231-1字
30、對(duì)齊的(A、A+1、A+2、A+3),范圍為0230-1存儲(chǔ)器映射I/O:I/O設(shè)別地址和存儲(chǔ)器統(tǒng)一編址,當(dāng)使用這些特定的存儲(chǔ)器地址讀寫時(shí),提供的是I/O功能。小端和大端:地址單元其所對(duì)應(yīng)的數(shù)據(jù)高低位順序與存儲(chǔ)系統(tǒng)是小端還是大端有關(guān)。小端低位在低地址,大端低位在高地址。 1 2 3ARM體系結(jié)構(gòu)概述ARM編程模型 ARM基本尋址方式 96ARM處理器支持下列數(shù)據(jù)類型: 字節(jié) 8位 半字 16位(必須分配為占用2個(gè)字節(jié)) 字 32為(必須分配為占用4個(gè)字節(jié))ARM體系結(jié)構(gòu)可以用兩種方法存儲(chǔ)字?jǐn)?shù)據(jù),體系結(jié)構(gòu)可以用兩種方法存儲(chǔ)字?jǐn)?shù)據(jù),稱為稱為大端格式大端格式和和小端格式小端格式。1112342字單元
31、半字0半字1字單元半字1半字097 ARM指令編碼的一般方式 ARM指令的尋址方式 ARM匯編程序?qū)嵗?899 ARM指令匯編格式S,使用條件碼“cond”可以實(shí)現(xiàn)高效的邏輯操作(節(jié)省跳轉(zhuǎn)和條件語句),提高代碼效率。所有的ARM指令都可以條件執(zhí)行,而Thumb指令只有B(跳轉(zhuǎn))指令具有條件執(zhí)行功能。如果指令不標(biāo)明條件代碼,將默認(rèn)為無條件(AL)執(zhí)行。 Operand2形式#immed_8r、 Rm、 Rm,shift(寄存器(寄存器+移位)移位) 尋址方式所謂尋址方式就是處理器根據(jù)指令中給出的地址信息來尋址物理地址的方式。對(duì)于ARM指令來說,就是如何找到operand2具體來說,有以下9種寄存
32、器尋址;立即尋址;寄存器移位尋址;寄存器間寄存器尋址;立即尋址;寄存器移位尋址;寄存器間接尋址;基址尋址;多寄存器尋址;堆棧尋址;塊拷接尋址;基址尋址;多寄存器尋址;堆棧尋址;塊拷貝尋址;相對(duì)尋址。貝尋址;相對(duì)尋址。100 操作數(shù)的值在寄存器中,指令中的地址操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號(hào),指令執(zhí)行時(shí)直碼字段指出的是寄存器編號(hào),指令執(zhí)行時(shí)直接取出寄存器值來操作。寄存器尋址指令舉接取出寄存器值來操作。寄存器尋址指令舉例如下:例如下: MOV R1,R2 ;將將R2的值存入的值存入R1 SUB R0,R1,R2 ;將將R1的值減去的值減去R2的值,結(jié)果保存到的值,結(jié)果保存
33、到R0 0 xAA0 x55R2R1尋址方式分類尋址方式分類寄存器尋址寄存器尋址MOV R1,R20 xAA101 立即尋址指令中的操作碼字段后面的立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說,地址碼部分即是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立即使用的操作數(shù)出了可以立即使用的操作數(shù)( (這樣的數(shù)稱為這樣的數(shù)稱為立即數(shù)立即數(shù)) )。立即尋址指令舉例如下:。立即尋址指令舉例如下: SUBSR0,R0,#1 ;R0減減1,結(jié)果,結(jié)果放入放入R0,并且影響標(biāo)志位,并且影響標(biāo)志位MOV R0,#0 xFF000 ;
34、將立即數(shù)將立即數(shù)0 xFF000裝入裝入R0寄存器寄存器 0 x55R0MOV R0,#0 xFF00程序存儲(chǔ)尋址方式分類立即尋址MOV R0,#0 xFF000 xFF00從代碼中獲得數(shù)據(jù)102 寄存器移位尋址是寄存器移位尋址是ARMARM指令集特有的尋址方式。當(dāng)指令集特有的尋址方式。當(dāng)?shù)诘? 2個(gè)操作數(shù)是寄存器移位方式時(shí),第個(gè)操作數(shù)是寄存器移位方式時(shí),第2 2個(gè)寄存器操作數(shù)個(gè)寄存器操作數(shù)在與第在與第1 1個(gè)操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。寄存器個(gè)操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。寄存器移位尋址指令舉例如下:移位尋址指令舉例如下:MOV R0,R2,LSL #3;R2的值左移的值左移3位,
35、結(jié)果放入位,結(jié)果放入R0, ;即是即是R0=R28 ANDS R1,R1,R2,LSL R3;R2的值左移的值左移R3位,然后位,然后 ;和和R1相相“與與”操作,結(jié)果放入操作,結(jié)果放入R10 x55R0R20 x01尋址方式分類寄存器移位尋址MOV R0,R2,LSL #30 x080 x08邏輯左移3位103 寄存器間接尋址指令中的地址碼給出的是一寄存器間接尋址指令中的地址碼給出的是一個(gè)通用寄存器的編號(hào),所需的操作數(shù)保存在寄個(gè)通用寄存器的編號(hào),所需的操作數(shù)保存在寄存器指定地址的存儲(chǔ)單元中,即寄存器為操作存器指定地址的存儲(chǔ)單元中,即寄存器為操作數(shù)的地址指針。例如:數(shù)的地址指針。例如: LDR
36、 R1,R2 ;將將R2指向的存儲(chǔ)單元的數(shù)據(jù)指向的存儲(chǔ)單元的數(shù)據(jù);讀出保存在讀出保存在R1中中 SWP R1,R1,R2 ;將寄存器將寄存器R1的值和的值和R2;指定的存儲(chǔ)單元的內(nèi)容交換指定的存儲(chǔ)單元的內(nèi)容交換 0 x55R0R2 0 x400000000 xAA0 x40000000 尋址方式分類尋址方式分類寄存器間接尋址寄存器間接尋址LDR R0,R20 xAA104LSL移位操作:移位操作:0LSR移位操作:移位操作:0ASR移位操作:移位操作:ROR移位操作:移位操作:RRX移位操作:移位操作:C105 基址尋址就是將基址寄存器的內(nèi)容與指令中給出基址尋址就是將基址寄存器的內(nèi)容與指令中給
37、出的偏移量(的偏移量(4K b)a+;Elseb+;對(duì)應(yīng)的匯編代碼:對(duì)應(yīng)的匯編代碼:CMPR0,R1 ;R0(a)與)與R1(b)比較比較ADDHI R0,R0,#1 ;若若R0R1,則,則R0=R0+1ADDLS R1,R1,#1 ;若若R011,則,則R1=R1+1R1=R1+1示例:示例:119 32位ARM指令集有14種基本指令類型組成,可分為5大類:3種類型的存儲(chǔ)器訪問指令:控制存儲(chǔ)器和寄存器之間的數(shù)據(jù)傳送。3種類型的數(shù)據(jù)處理指令:使用片內(nèi)ALU、桶形移位器和乘法器針對(duì)31個(gè)寄存器完成高速數(shù)據(jù)處理操作。4種類型的轉(zhuǎn)移指令:控制程序執(zhí)行流程、指令優(yōu)先級(jí)以及ARM代碼和Thumb代碼的切
38、換。3種類型的協(xié)處理器指令:專用于控制外部協(xié)處理器。這些指令以開放和統(tǒng)一的方式擴(kuò)展了指令集的片外功能。雜類指令:包括中斷調(diào)用、標(biāo)志傳入傳出等。34 5ARM基本尋址方式 ARM指令集 匯編語言程序設(shè)計(jì) 120 在存儲(chǔ)器和寄存器之間傳送單一數(shù)據(jù)指令LDR和STR指令格式: opcond type Rd , 地址。type表示傳送數(shù)據(jù)的類型,必須是下列值之一:D:表示雙字、空:表示字SH:帶符號(hào)半字、H:無符號(hào)半字B:無符號(hào)字節(jié)、SB:帶符號(hào)字節(jié)使用舉例:LDRB R0, R1LDRNEB R0, R1, #1!STR Rd, placeSTR Rd, Rbase, Rindex34 5ARM基本
39、尋址方式 ARM指令集 匯編語言程序設(shè)計(jì) 121LDRLDR和和STRSTR字和無符號(hào)字節(jié)加載字和無符號(hào)字節(jié)加載/ /存儲(chǔ)指令編碼存儲(chǔ)指令編碼指令執(zhí)行的條件碼指令執(zhí)行的條件碼I I為為0 0時(shí),偏移量為時(shí),偏移量為1212位立即數(shù),為位立即數(shù),為1 1時(shí),時(shí),偏移量為寄存器移偏移量為寄存器移位位P P表示前表示前/ /后變址后變址U表示加/減B B為為1 1表示字節(jié)訪問,表示字節(jié)訪問,為為0 0表示字訪問表示字訪問WW表示回寫表示回寫為指令的尋址方式為指令的尋址方式RdRd為源為源/ /目標(biāo)寄存器目標(biāo)寄存器RnRn為基址寄存器為基址寄存器L L用于區(qū)別加載(用于區(qū)別加載(L L為為1 1)或存
40、儲(chǔ)(或存儲(chǔ)(L L為為0 0)122LDRLDR和和STRSTR字和無符號(hào)字節(jié)加載字和無符號(hào)字節(jié)加載/ /存儲(chǔ)指令存儲(chǔ)指令 LDR/STRLDR/STR指令尋址非常靈活,它由兩部分組成,其中一部分為一個(gè)基指令尋址非常靈活,它由兩部分組成,其中一部分為一個(gè)基址寄存器,可以為任一個(gè)通用寄存器;另一部分為一個(gè)地址偏移量。地址寄存器,可以為任一個(gè)通用寄存器;另一部分為一個(gè)地址偏移量。地址偏移量有以下址偏移量有以下3 3種格式:種格式: 立即數(shù)立即數(shù)。立即數(shù)可以是一個(gè)無符號(hào)的數(shù)值。這個(gè)數(shù)據(jù)可以加到基址寄存。立即數(shù)可以是一個(gè)無符號(hào)的數(shù)值。這個(gè)數(shù)據(jù)可以加到基址寄存器,也可以從基址寄存器中減去這個(gè)數(shù)值。器,也
41、可以從基址寄存器中減去這個(gè)數(shù)值。 如:如:LDR R1,R0,#0 x12 ;R1-R0+0 x12寄存器寄存器。寄存器中的數(shù)值可以加到基址寄存器,也可以從基址寄存器中。寄存器中的數(shù)值可以加到基址寄存器,也可以從基址寄存器中減去這個(gè)數(shù)值。減去這個(gè)數(shù)值。 如:如:LDR R1,R0,R2 ; R1-R0+R2 LDR R1,R0,-R2 ; R1-R0-R2寄存器及移位常數(shù)寄存器及移位常數(shù)。寄存器移位后的值可以加到基址寄存器,也可以從。寄存器移位后的值可以加到基址寄存器,也可以從基址寄存器中減去這個(gè)數(shù)值。基址寄存器中減去這個(gè)數(shù)值。 如:如:LDR R1,R0,R2,LSL #2 ;R1-R0+R
42、2*4 123 從尋址方式的地址計(jì)算方法分,加載從尋址方式的地址計(jì)算方法分,加載/ /存儲(chǔ)指令有存儲(chǔ)指令有以下以下4 4種格式:種格式: 零偏移零偏移。如:如:LDR Rd,Rn 前索引偏移前索引偏移。如:如:LDR Rd,Rn,#0 x04!程序相對(duì)偏移程序相對(duì)偏移。 如:如:LDR Rd,labe1 后索引偏移。后索引偏移。如:如:LDR Rd,Rn,#-0 x04注意注意:必須保證字?jǐn)?shù)據(jù)操作的地址是:必須保證字?jǐn)?shù)據(jù)操作的地址是3232位對(duì)齊的。位對(duì)齊的。LDRLDR和和STRSTR字和無符號(hào)字節(jié)加載字和無符號(hào)字節(jié)加載/ /存儲(chǔ)指令存儲(chǔ)指令124LDRLDR和和STRSTR半字和有符號(hào)字節(jié)
43、加載半字和有符號(hào)字節(jié)加載/ /存儲(chǔ)指令存儲(chǔ)指令 這類這類LDR/STRLDR/STR指令可加載有符號(hào)半字或字節(jié),指令可加載有符號(hào)半字或字節(jié),可加載可加載/ /存儲(chǔ)無符號(hào)半字。偏移量格式、尋址方式與存儲(chǔ)無符號(hào)半字。偏移量格式、尋址方式與加載加載/ /存儲(chǔ)字和無符號(hào)字節(jié)指令相同。存儲(chǔ)字和無符號(hào)字節(jié)指令相同。 LDRcondSB Rd,;將指定地址上的有符號(hào)字節(jié)讀入將指定地址上的有符號(hào)字節(jié)讀入Rd LDRcondSH Rd,;將指定地址上的有符號(hào)半字讀入將指定地址上的有符號(hào)半字讀入Rd LDRcondH Rd,;將指定地址上的半字?jǐn)?shù)據(jù)讀入將指定地址上的半字?jǐn)?shù)據(jù)讀入Rd STRcondH Rd,;將將
44、Rd中的半字?jǐn)?shù)據(jù)存入指定地址中的半字?jǐn)?shù)據(jù)存入指定地址注意注意:1. 1.有符號(hào)位半字有符號(hào)位半字/ /字節(jié)加載是指用符號(hào)位加載擴(kuò)展到字節(jié)加載是指用符號(hào)位加載擴(kuò)展到3232位,無符號(hào)半字加載是位,無符號(hào)半字加載是指用零擴(kuò)展到指用零擴(kuò)展到3232位;位;2.2.半字讀寫的指定地址必須為半字讀寫的指定地址必須為偶數(shù)偶數(shù),否則將產(chǎn)生不可靠的結(jié)果;,否則將產(chǎn)生不可靠的結(jié)果;125ARM存儲(chǔ)器訪問指令存儲(chǔ)器訪問指令單寄存器存儲(chǔ)單寄存器存儲(chǔ)LDRLDR和和STRSTR半字和有符號(hào)字節(jié)加載半字和有符號(hào)字節(jié)加載/ /存儲(chǔ)指令編碼存儲(chǔ)指令編碼指令執(zhí)行的條件碼指令執(zhí)行的條件碼I I為為0 0時(shí),偏移量為時(shí),偏移量為
45、1212位立即數(shù),為位立即數(shù),為1 1時(shí),時(shí),偏移量為寄存器移偏移量為寄存器移位位P P表示前表示前/ /后變址后變址U U表示加表示加/ /減減WW表示回寫表示回寫為指令的尋址方式為指令的尋址方式RdRd為源為源/ /目標(biāo)寄存器目標(biāo)寄存器RnRn為基址寄存器為基址寄存器L L用于區(qū)別加載(用于區(qū)別加載(L L為為1 1)或存儲(chǔ)(或存儲(chǔ)(L L為為0 0)S S為為1 1表示有符號(hào)訪問,表示有符號(hào)訪問,為為0 0表示無符號(hào)訪問表示無符號(hào)訪問H H為為1 1表示半字訪問,為表示半字訪問,為0 0表示字節(jié)訪問表示字節(jié)訪問126LDRLDR和和STRSTR指令應(yīng)用示例:指令應(yīng)用示例:1. 1.加載加
46、載/ /存儲(chǔ)字和無符號(hào)字節(jié)指令存儲(chǔ)字和無符號(hào)字節(jié)指令LDRR2,R5;將將R5指向地址的字?jǐn)?shù)據(jù)存入指向地址的字?jǐn)?shù)據(jù)存入R2STRR1,R0,#0 x04;將將R1的數(shù)據(jù)存儲(chǔ)到的數(shù)據(jù)存儲(chǔ)到R0+0 x04地址地址LDRBR3,R2,#-1 ;將將R2指向地址的字節(jié)數(shù)據(jù)存入指向地址的字節(jié)數(shù)據(jù)存入R3,R2R21STRBR0,R3,-R8 ASR 2 ;R0-R3-R8/4,存儲(chǔ)存儲(chǔ)R0的最低有效字節(jié)的最低有效字節(jié)2.2.加載加載/ /存儲(chǔ)半字和有符號(hào)字節(jié)指令存儲(chǔ)半字和有符號(hào)字節(jié)指令LDRSB R1,R0,R3;將將R0+R3地址上的字節(jié)數(shù)據(jù)存入地址上的字節(jié)數(shù)據(jù)存入R1,;高高24位用符號(hào)擴(kuò)展位用符
47、號(hào)擴(kuò)展LDRH R6,R2,#2;將將R2指向地址的半字?jǐn)?shù)據(jù)存入指向地址的半字?jǐn)?shù)據(jù)存入R6,高,高16位用位用0擴(kuò)展擴(kuò)展;讀出后,讀出后,R2=R2+2STRH R1,R0,#2!;將將R1的半字?jǐn)?shù)據(jù)保存到的半字?jǐn)?shù)據(jù)保存到R0+2地址,地址,;只修改低只修改低2字節(jié)數(shù)據(jù),然后字節(jié)數(shù)據(jù),然后R0=R0+2ARM存儲(chǔ)器訪問指令存儲(chǔ)器訪問指令單寄存器存儲(chǔ)單寄存器存儲(chǔ)127 在存儲(chǔ)器和寄存器之間傳送多個(gè)數(shù)據(jù)指令LDM和STM,可以傳送R015的任何組合。指令格式: opcond mode Rn! , 。mode必須是下列值之一:IA或IB:每次傳送后或前地址加4DA或DB:每次傳送后或前地址減4FD或
48、ED:滿或空遞減堆棧FA或EA:滿或空遞增堆棧使用舉例:STMIA R8, R0, R1,R9LDMFD R13!, R1, R0LDMFD R13!, R0,R4-R7,PC34 5ARM基本尋址方式 ARM指令集 匯編語言程序設(shè)計(jì) 128ARM存儲(chǔ)器訪問指令存儲(chǔ)器訪問指令多寄存器存取多寄存器存取 多寄存器加載多寄存器加載/ /存儲(chǔ)指令的存儲(chǔ)指令的8 8種模式如下表所示,右邊四種為堆棧操種模式如下表所示,右邊四種為堆棧操作、左邊四種為數(shù)據(jù)傳送操作。作、左邊四種為數(shù)據(jù)傳送操作。模式模式說明說明模式模式說明說明IA每次傳送后地址加每次傳送后地址加4FD滿遞減堆棧滿遞減堆棧IB每次傳送前地址加每次
49、傳送前地址加4ED空遞減堆??者f減堆棧DA每次傳送后地址減每次傳送后地址減4FA滿遞增堆棧滿遞增堆棧DB每次傳送前地址減每次傳送前地址減4EA空遞增堆棧空遞增堆棧數(shù)據(jù)塊傳送操作數(shù)據(jù)塊傳送操作堆棧操作堆棧操作 進(jìn)行數(shù)據(jù)復(fù)制時(shí),先設(shè)置好源數(shù)據(jù)指針和目標(biāo)指針,然后使用塊拷進(jìn)行數(shù)據(jù)復(fù)制時(shí),先設(shè)置好源數(shù)據(jù)指針和目標(biāo)指針,然后使用塊拷貝尋址指令貝尋址指令LDMIA/STMIALDMIA/STMIA、LDMIB/STMIBLDMIB/STMIB、LDMDA/STMDALDMDA/STMDA、LDMDB/STMDBLDMDB/STMDB進(jìn)行讀取和存儲(chǔ)進(jìn)行讀取和存儲(chǔ) 。 進(jìn)行堆棧操作操作時(shí),要先設(shè)置堆棧指針(進(jìn)
50、行堆棧操作操作時(shí),要先設(shè)置堆棧指針(SPSP),然后使用堆棧尋),然后使用堆棧尋址指令址指令STMFD/LDMFD STMFD/LDMFD 、STMED/LDMEDSTMED/LDMED、STMFA/LDMFASTMFA/LDMFA和和STMEA/LDMEASTMEA/LDMEA實(shí)現(xiàn)堆棧操作。實(shí)現(xiàn)堆棧操作。129ARM存儲(chǔ)器訪問指令存儲(chǔ)器訪問指令多寄存器存取多寄存器存取數(shù)據(jù)塊傳送指數(shù)據(jù)塊傳送指令令操作過程如操作過程如右圖所示,其右圖所示,其中中R1R1為指令執(zhí)為指令執(zhí)行前的基址寄行前的基址寄存器,存器,R1R1則則為指令執(zhí)行后為指令執(zhí)行后的基址寄存器。的基址寄存器。R5R6R7R1 R1 指令
51、STMIA R1!,R5-R7空遞增4008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMDA R1!,R5-R7空遞減4008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMIB R1!,R5-R7滿遞增4008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMDB R1!,R5-R7滿遞減4008H4004H4000H4014H4010H400CH130ARM存儲(chǔ)器訪問指令存儲(chǔ)器訪問指令多寄存器存取多寄存器存取數(shù)據(jù)塊傳送數(shù)據(jù)塊傳送存儲(chǔ)存儲(chǔ)堆棧操作堆棧操作壓棧壓棧說明說明數(shù)據(jù)塊傳
52、送數(shù)據(jù)塊傳送加載加載堆棧操作堆棧操作出棧出棧說明說明STMDASTMED空遞減空遞減LDMDALDMFA滿遞減滿遞減STMIASTMEA空遞增空遞增LDMIALDMFD滿遞增滿遞增STMDBSTMFD滿遞減滿遞減LDMDBLDMEA空遞減空遞減STMIBSTMFA滿遞增滿遞增LDMIBLDMED空遞增空遞增;使用數(shù)據(jù)塊傳送指令進(jìn)行堆棧操作使用數(shù)據(jù)塊傳送指令進(jìn)行堆棧操作STMDAR0!,R5-R6. . .LDMIBR0!,R5-R6;使用堆棧指令進(jìn)行堆棧操作使用堆棧指令進(jìn)行堆棧操作STMEDR13!,R5-R6. . .LDMEDR13!,R5-R6 兩段代碼的執(zhí)行結(jié)果是一樣的,但是使用堆棧指
53、令的壓棧和出棧操兩段代碼的執(zhí)行結(jié)果是一樣的,但是使用堆棧指令的壓棧和出棧操作編程很簡(jiǎn)單(只要前后一致即可),而使用數(shù)據(jù)塊指令進(jìn)行壓棧和作編程很簡(jiǎn)單(只要前后一致即可),而使用數(shù)據(jù)塊指令進(jìn)行壓棧和出棧操作則需要考慮空滿一致、加與減對(duì)應(yīng)的問題。出棧操作則需要考慮空滿一致、加與減對(duì)應(yīng)的問題。堆棧操作和數(shù)據(jù)塊傳送指令類似,也有堆棧操作和數(shù)據(jù)塊傳送指令類似,也有4 4種模式,差別在于基地址寄種模式,差別在于基地址寄存器不一樣。這兩類指令之間的關(guān)系如下表所示:存器不一樣。這兩類指令之間的關(guān)系如下表所示:131 預(yù)加載指令PLD:用于提示存儲(chǔ)系統(tǒng)將要加載的存儲(chǔ)器地址,提高存儲(chǔ)器的訪問速度。格式:PLD Rn
54、 , Flexoffset舉例:PLD R2、PLDR0,R2PLD R15,#280、PLD R5,R8,LSL #2 單一數(shù)據(jù)交換指令SWP:在寄存器和存儲(chǔ)器之間進(jìn)行數(shù)據(jù)交換。格式:SWP cond B Rd, Rm, Rn舉例:SWP R1,R2,R5SWPB R1,R2,R534 5ARM基本尋址方式 ARM指令集 匯編語言程序設(shè)計(jì) 132 ADD、ADC 、SUB 、SBC、RSB、RSC格式:op cond S Rd, Rn, Operand2說明:ADD(ADC):Rn+Operand2Rd (帶進(jìn)位加)SUB(SBC): Rn-Operand2Rd (帶進(jìn)位減)RSB(RSC)
55、 :Operand2-RnRd (帶進(jìn)位減) 與AND、或ORR、異或EOR和位清零BIC格式:op cond S Rd, Rn, Operand2說明:BIC:將Rn中的位與 Operand2之中相應(yīng)位的反碼進(jìn)行與操作,結(jié)果送Rd 。其它命令實(shí)現(xiàn)Rn OP Operand2 Rd34 5ARM基本尋址方式 ARM指令集 匯編語言程序設(shè)計(jì) 133助記符助記符說明說明操作操作條件碼位置條件碼位置ADD Rd, Rn, operand2ADD Rd, Rn, operand2加法運(yùn)算指令加法運(yùn)算指令RdRdRn+operand2Rn+operand2ADDcondSADDcondSSUB Rd,
56、Rn, operand2SUB Rd, Rn, operand2減法運(yùn)算指令減法運(yùn)算指令RdRdRn-operand2Rn-operand2SUBcondSSUBcondSRSB Rd, Rn, operand2RSB Rd, Rn, operand2逆向減法指令逆向減法指令RdRdoperand2-Rnoperand2-RnRSBcondSRSBcondSADC Rd, Rn, operand2ADC Rd, Rn, operand2帶進(jìn)位加法帶進(jìn)位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSADCcondSSBC Rd, Rn, oper
57、and2SBC Rd, Rn, operand2帶進(jìn)位減法指令帶進(jìn)位減法指令R dR d R n - o p e r a n d 2 -R n - o p e r a n d 2 -(NOT)Carry(NOT)CarrySBCcondSSBCcondSRSC Rd, Rn, operand2RSC Rd, Rn, operand2帶進(jìn)位逆向減法指帶進(jìn)位逆向減法指令令R dR d o p e r a n d 2 - R n -o p e r a n d 2 - R n -(NOT)Carry(NOT)CarryRSCcondSRSCcondS134助記符助記符說明說明操作操作條件碼位置條件碼位
58、置AND Rd, Rn, operand2AND Rd, Rn, operand2邏輯與操作邏輯與操作指令指令RdRdRn & operand2Rn & operand2ANDcondSANDcondSORR Rd, Rn, operand2ORR Rd, Rn, operand2邏輯或操作邏輯或操作指令指令RdRdRn | operand2Rn | operand2ORRcondSORRcondSEOR Rd, Rn, operand2EOR Rd, Rn, operand2邏輯異或操邏輯異或操作指令作指令RdRdRn operand2Rn operand2EORcondSE
59、ORcondSBIC Rd, Rn, operand2BIC Rd, Rn, operand2位清除指令位清除指令RdRdRn & (operand2)Rn & (operand2)BICcondSBICcondSARMARM數(shù)據(jù)處理指令數(shù)據(jù)處理指令邏輯運(yùn)算指令邏輯運(yùn)算指令注:當(dāng)后綴注:當(dāng)后綴S時(shí),這些指令根據(jù)結(jié)果更新標(biāo)志時(shí),這些指令根據(jù)結(jié)果更新標(biāo)志N和和Z,在計(jì)算,在計(jì)算Operand2時(shí)更新標(biāo)志時(shí)更新標(biāo)志C,不影,不影響標(biāo)志響標(biāo)志V。135 傳送MOV和傳送取反值MVN 指令格式:OP cond S Rd, Operand2說明:MVN將Operand2按位取反送RdOpe
60、rand2只能是寄存器或立即數(shù)舉例:MOV R0, R0 ; R0 = R0 相當(dāng)于 NOP 指令MVN R0, #0 xff ; R0 = 0 xffffff00 比較CMP和比較反值CMN格式: OP cond S Rd, Operand2說明:結(jié)果不保存但影響條件碼標(biāo)志, CMN做加法。34 5ARM基本尋址方式 ARM指令集 匯編語言程序設(shè)計(jì) 136 測(cè)試位TST和測(cè)試等價(jià)TEQ指令格式:OP cond Rn, Operand2說明:結(jié)果不保存但影響條件碼標(biāo)志。TST實(shí)現(xiàn)按位與, TEQ實(shí)現(xiàn)按位異或 前導(dǎo)零計(jì)數(shù)CLZ指令格式:OP cond Rd, Rm說明:CLZ指令對(duì)Rm中值的前導(dǎo)零的個(gè)數(shù)進(jìn)行計(jì)數(shù)結(jié)果送Rd中。若為31為1,
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題代寫申報(bào)書是什么
- 課題申報(bào)評(píng)審書范例范文
- 就業(yè)心理 課題申報(bào)書
- 河南小學(xué)課題申報(bào)書范例
- 兌換房子合同范本
- 公司外匯借款合同范本
- 益智課堂課題研究申報(bào)書
- 閱讀推廣 課題申報(bào)書
- 課題申報(bào)項(xiàng)目書推廣價(jià)值
- 同城工程勞務(wù)合同范例
- 北師大版 數(shù)學(xué) 三年級(jí)下冊(cè) 單元作業(yè)設(shè)計(jì) 面積
- 智能農(nóng)業(yè)除草機(jī)器人研究現(xiàn)狀與趨勢(shì)分析
- (完整版)200210號(hào)文-工程勘察設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)(2002年修訂本)本月修正2023簡(jiǎn)版
- 基于核心素養(yǎng)下小學(xué)英語單元整體作業(yè)設(shè)計(jì)實(shí)踐研究 論文
- 風(fēng)電工作流程圖
- 社會(huì)救助公共基礎(chǔ)知識(shí)題庫及答案
- 《論文所用框架圖》課件
- 人教版三年級(jí)下冊(cè)說課標(biāo)、說教材
- 2022版《義務(wù)教育科學(xué)課程標(biāo)準(zhǔn)》試題及答案
- 《民法典》背景下違約精神損害賠償制度適用問題
評(píng)論
0/150
提交評(píng)論