ARM體系結(jié)構(gòu)與指令系統(tǒng).ppt_第1頁(yè)
ARM體系結(jié)構(gòu)與指令系統(tǒng).ppt_第2頁(yè)
ARM體系結(jié)構(gòu)與指令系統(tǒng).ppt_第3頁(yè)
ARM體系結(jié)構(gòu)與指令系統(tǒng).ppt_第4頁(yè)
ARM體系結(jié)構(gòu)與指令系統(tǒng).ppt_第5頁(yè)
已閱讀5頁(yè),還剩130頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

VIP免費(fèi)下載

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

文檔簡(jiǎn)介

第二章ARM體系結(jié)構(gòu)與指令系統(tǒng),合肥學(xué)院電子信息與電氣工程系干開峰,目錄,2.1ARM體系結(jié)構(gòu)2.2ARM指令系統(tǒng),2.1ARM體系結(jié)構(gòu),2.1.1ARM體系結(jié)構(gòu)概述2.1.2ARM存儲(chǔ)結(jié)構(gòu)2.1.3ARM處理器模式2.1.4ARM寄存器2.1.5ARM異常中斷,2.1.1ARM體系結(jié)構(gòu)概述,一、ARM體系結(jié)構(gòu)特點(diǎn)1、總體思想:在不犧牲性能的同時(shí),盡量簡(jiǎn)化處理器。同時(shí)從體系結(jié)構(gòu)的層面上靈活支持處理器擴(kuò)展。這種簡(jiǎn)化和開放的思路使得ARM處理器采用了很簡(jiǎn)單的結(jié)構(gòu)來(lái)實(shí)現(xiàn)。,2.1.1ARM體系結(jié)構(gòu)特點(diǎn),2、RISC型處理器結(jié)構(gòu)ARM采用RISC結(jié)構(gòu),在簡(jiǎn)化處理器結(jié)構(gòu),減少?gòu)?fù)雜功能指令的同時(shí),提高了處理器的速度。RISC型處理器采用了Load/Store(加載/存儲(chǔ))結(jié)構(gòu),即只有Load/Store指令可與存儲(chǔ)器打交道,其余指令都不允許進(jìn)行存儲(chǔ)器操作。RISC型處理器增加了指令高速緩沖I-Cache和數(shù)據(jù)高速緩沖D-Cache及多處理器結(jié)構(gòu),使指令的操作盡可能在寄存器之間進(jìn)行。,CISC與RISC的比較,2.1.1ARM體系結(jié)構(gòu)特點(diǎn),3、Thumb指令集新型的ARM體系結(jié)構(gòu)中定義了16位的Thumb指令集。Thumb指令集比通常的8/16位CISC/RISC處理器有更好的代碼密度,而芯片面積只增加6%,卻可以使程序存儲(chǔ)器更小。,2.1.1ARM體系結(jié)構(gòu)特點(diǎn),4、多處理器狀態(tài)模式ARM體系結(jié)構(gòu)定義了7種處理器模式:用戶(usr)、快中斷(fiq)、中斷(irq)、管理(svc)、終止(abt)、未定義(und)和系統(tǒng)(sys),大大提高了ARM處理器的效率。5、兩種處理器工作狀態(tài)ARM狀態(tài)(執(zhí)行32位ARM指令)和Thumb狀態(tài)(執(zhí)行16位Thumb指令)。,2.1.1ARM體系結(jié)構(gòu)特點(diǎn),6、嵌入式在線仿真調(diào)試ARM體系結(jié)構(gòu)的處理器芯片都嵌入了在線仿真ICE-RT邏輯,便于通過(guò)JTAG來(lái)仿真調(diào)試芯片,省去了價(jià)格昂貴的在線仿真器。7、靈活方便的接口ARM體系結(jié)構(gòu)具有協(xié)處理器接口,允許接16個(gè)協(xié)處理器。既可以使基本的ARM處理器內(nèi)核盡可能小,方便地?cái)U(kuò)充ARM指令集,也可以通過(guò)未定義指令來(lái)支持協(xié)處理器的軟件仿真。,2.1.1ARM體系結(jié)構(gòu)特點(diǎn),8、低電壓功耗的設(shè)計(jì)考慮到ARM體系結(jié)構(gòu)的處理器主要用于手持式嵌入式系統(tǒng)中,ARM體系結(jié)構(gòu)在設(shè)計(jì)中就十分注意功耗的設(shè)計(jì)。,2.1.1ARM體系結(jié)構(gòu)特點(diǎn),二、ARM流水線結(jié)構(gòu)1、流水線方式:是把一個(gè)重復(fù)的過(guò)程分解為若干個(gè)子過(guò)程,每個(gè)子過(guò)程可以與其他子過(guò)程同時(shí)進(jìn)行。處理器按照一系列步驟來(lái)執(zhí)行每一條指令。,2.1.1ARM體系結(jié)構(gòu)特點(diǎn),典型的步驟為:1)從存儲(chǔ)器讀取指令(fetch)2)譯碼以鑒別它是哪一類指令(dec)3)從寄存器組取得所需的操作數(shù)(reg)4)將操作數(shù)進(jìn)行組合以得到結(jié)果或存儲(chǔ)器地址(exe)5)如果需要,則訪問(wèn)存儲(chǔ)器存取數(shù)據(jù)(mem)6)將結(jié)果回寫到寄存器組(res),2.1.1ARM體系結(jié)構(gòu)特點(diǎn),2、ARM7的三級(jí)流水線取指:從程序存儲(chǔ)器中取指令,放入指令流水線。(占用存儲(chǔ)器訪問(wèn)操作)譯碼:指令譯碼。(占用譯碼邏輯)執(zhí)行:執(zhí)行指令/讀寫REG。(占用ALU及數(shù)據(jù)路徑),2.1.1ARM體系結(jié)構(gòu)特點(diǎn),3、ARM9TDMI的五級(jí)流水線,2.1.1ARM體系結(jié)構(gòu)特點(diǎn),4、ARM7和ARM9流水線比較5級(jí)流水線的ARM9內(nèi)核是哈佛架構(gòu),擁有獨(dú)立的指令和數(shù)據(jù)總線;指令和數(shù)據(jù)的讀取可以在同一周期進(jìn)行;3級(jí)流水的ARM7內(nèi)核是指令和數(shù)據(jù)總線復(fù)用的馮.諾依曼架構(gòu),指令和數(shù)據(jù)的讀取不能在同一周期進(jìn)行;5級(jí)流水線設(shè)計(jì)把寄存器讀取、邏輯運(yùn)算、結(jié)果回寫分散在不同的流水當(dāng)中,每一級(jí)流水的操作簡(jiǎn)潔,提升了處理器的主頻。,2.1.1ARM體系結(jié)構(gòu)特點(diǎn),隨著流水線深度(級(jí)數(shù))的增加,每一段的工作量被削減了,這使得處理器可以工作在更高的頻率,同時(shí)改進(jìn)了處理器的性能;負(fù)面作用是增加了系統(tǒng)的延時(shí),即內(nèi)核在執(zhí)行一條指令前,需要更多的周期來(lái)填充流水線;流水線級(jí)數(shù)的增加也意味著在某些段之間會(huì)產(chǎn)生數(shù)據(jù)相關(guān)。,ARM處理器性能比較,2.1.1ARM體系結(jié)構(gòu)特點(diǎn),三、ARM總線結(jié)構(gòu)ARM微控制器使用的是AMBA總線體系結(jié)構(gòu)1、AHB總線(AdvancedHigh-performanceBus):用于連接高性能系統(tǒng)模塊。它支持突發(fā)數(shù)據(jù)傳輸方式及單個(gè)數(shù)據(jù)傳輸方式,所有時(shí)序參考同一個(gè)時(shí)鐘沿。,2.1.1ARM體系結(jié)構(gòu)特點(diǎn),2、ASB總線(AdvancedSystemBus):用于連接高性能系統(tǒng)模塊,它支持突發(fā)數(shù)據(jù)傳輸模式。3、APB總線(AdvancePeripheralBus):是一個(gè)簡(jiǎn)單接口支持低性能的外圍接口。,2.1.2ARM存儲(chǔ)結(jié)構(gòu),一、ARM存儲(chǔ)數(shù)據(jù)類型1、ARM處理器支持以下6種數(shù)據(jù)類型:8位有符號(hào)和無(wú)符號(hào)字節(jié)(Byte)。16位有符號(hào)和無(wú)符號(hào)半字(Halfword)它們必須以兩字節(jié)的邊界對(duì)齊(半字對(duì)齊)。半字對(duì)齊:半字單元地址的最低位A0=0b0(地址末位為0 x0,0 x2,0 x4,0 x6,0 x8,0 xa,0 xc,0 xe)。32位有符號(hào)和無(wú)符號(hào)字(word)它們必須以4字節(jié)的邊界對(duì)齊(字對(duì)齊)。單元地址的低兩位A1A0=0b00。即地址末位為0 x0,0 x4,0 x8,0 xc。,2、對(duì)于指令,ARM指令系統(tǒng)分為32位ARM指令集和16位的Thumb指令集,在存儲(chǔ)時(shí)分別以32位和16位的兩種不同長(zhǎng)度存儲(chǔ)。3、對(duì)于數(shù)據(jù),ARM支持對(duì)32位字?jǐn)?shù)據(jù),16位半字?jǐn)?shù)據(jù),8位字節(jié)數(shù)據(jù)操作。因此數(shù)據(jù)存儲(chǔ)器可以存儲(chǔ)32位,16位,8位三種不同長(zhǎng)度數(shù)據(jù)。4、在ARM內(nèi)部,所有操作都面向32位的操作數(shù),只有數(shù)據(jù)傳送指令支持較短的字節(jié)和半字的數(shù)據(jù)類型。當(dāng)從存儲(chǔ)器讀入一個(gè)字節(jié)或半字時(shí),根據(jù)其數(shù)據(jù)類型將其擴(kuò)展到32位。,2.1.2ARM存儲(chǔ)結(jié)構(gòu),二、ARM存儲(chǔ)器組織1、ARM存儲(chǔ)器以8位為一個(gè)單元存儲(chǔ)數(shù)據(jù)(一個(gè)字節(jié)),每個(gè)存儲(chǔ)單元分配一個(gè)存儲(chǔ)地址。ARM將存儲(chǔ)器看作是從零地址開始的字節(jié)的線性組合。作為32位的微處理器,ARM體系結(jié)構(gòu)所支持的最大尋址空間為4GB(232字節(jié))。2、ARM體系結(jié)構(gòu)可以用兩種方法存儲(chǔ)字?jǐn)?shù)據(jù),稱為大端格式和小端格式。,2.1.2ARM存儲(chǔ)結(jié)構(gòu),2.1.2ARM存儲(chǔ)結(jié)構(gòu),大端格式(big-endian):字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中,而字?jǐn)?shù)據(jù)的低字節(jié)則存放在高地址中。小端格式(low-endian):與大端存儲(chǔ)格式相反。低地址中存放的是字?jǐn)?shù)據(jù)的低字節(jié),高地址存放的是字?jǐn)?shù)據(jù)的高字節(jié)。缺省設(shè)置為小端格式。,三、ARM存儲(chǔ)器層次微處理器希望存儲(chǔ)器容量大、速度快。但容量大者速度慢;速度快者容量小。解決方法是構(gòu)建一個(gè)由多級(jí)存儲(chǔ)器組成的復(fù)合存儲(chǔ)器系統(tǒng)。,2.1.2ARM存儲(chǔ)結(jié)構(gòu),多級(jí)存儲(chǔ)器系統(tǒng),寄存器組訪問(wèn)時(shí)間約為幾個(gè)ns。片上RAM與片外RAM比速度快、功耗小、容量小。讀寫時(shí)間約為幾個(gè)ns。片上Cache832KB,訪問(wèn)時(shí)間約為十幾個(gè)ns。主存儲(chǔ)器一般為幾兆字節(jié)1GB的動(dòng)態(tài)存儲(chǔ)器,訪問(wèn)時(shí)間約50ns。,2.1.2ARM存儲(chǔ)結(jié)構(gòu),CPU,寄存器組,片上RAM,片上Cache,主存儲(chǔ)器,硬盤,寄存器組,片上RAM,片上Cache,主存儲(chǔ)器,硬盤,寄存器組,片上RAM,片上Cache,主存儲(chǔ)器,2.1.3ARM處理器模式,一、ARM處理器工作狀態(tài)1、有兩種工作狀態(tài):ARM狀態(tài):處理器執(zhí)行32位的字對(duì)齊的ARM指令;Thumb狀態(tài):處理器執(zhí)行16位的半字對(duì)齊的Thumb指令。2、兩種狀態(tài)可以切換:程序執(zhí)行過(guò)程中,通過(guò)執(zhí)行帶狀態(tài)切換的分支指令BX,隨時(shí)在兩種工作狀態(tài)之間進(jìn)行切換。并且,處理器工作狀態(tài)的轉(zhuǎn)變,并不影響處理器的工作模式和相應(yīng)寄存器中的內(nèi)容。,2.1.3ARM處理器模式,二、ARM處理器工作模式1、ARM9的7種工作模式(1)用戶模式(usr):非特權(quán)模式,大部分任務(wù)執(zhí)行在這種模式。正常程序執(zhí)行的模式(2)快速中斷模式(fiq):當(dāng)一個(gè)高優(yōu)先級(jí)(fast)中斷產(chǎn)生時(shí)將會(huì)進(jìn)入這種模式。高速數(shù)據(jù)傳輸或通道處理(3)外部中斷模式(irq):當(dāng)一個(gè)低優(yōu)先級(jí)(normal)中斷產(chǎn)生時(shí)將會(huì)進(jìn)入這種模式。通常的中斷處理(4)管理模式(svc):當(dāng)復(fù)位或軟中斷指令執(zhí)行時(shí)將會(huì)進(jìn)入這種模式。供操作系統(tǒng)使用的一種保護(hù)模式,2.1.3ARM處理器模式,(5)中止模式(abt):當(dāng)存取異常時(shí)將會(huì)進(jìn)入這種模式虛擬存儲(chǔ)及存儲(chǔ)保護(hù)(6)未定義模式(und):當(dāng)執(zhí)行未定義指令時(shí)會(huì)進(jìn)入這種模式軟件仿真硬件協(xié)處理器(7)系統(tǒng)模式(sys):供需要訪問(wèn)系統(tǒng)資源的操作系統(tǒng)任務(wù)使用特權(quán)級(jí)的操作系統(tǒng)任務(wù),2.1.3ARM處理器模式,2、模式分類及特點(diǎn)(1)用戶模式特點(diǎn):應(yīng)用程序不能夠訪問(wèn)受操作系統(tǒng)保護(hù)的系統(tǒng)資源。應(yīng)用程序不能進(jìn)行處理器模式的切換。(2)系統(tǒng)模式特點(diǎn):不屬于異常模式,不是通過(guò)異常進(jìn)入的。系統(tǒng)模式屬于特權(quán)模式,可以訪問(wèn)所有的系統(tǒng)資源,也可以直接進(jìn)行模式的切換。它主要供操作系統(tǒng)使用。(3)特權(quán)模式及其特點(diǎn):特權(quán)模式:除用戶模式之外的工作模式又稱為特權(quán)模式特點(diǎn):應(yīng)用程序可以訪問(wèn)所有的系統(tǒng)資源可以任意地進(jìn)行處理器模式的切換,2.1.3ARM處理器模式,(4)異常模式及其特點(diǎn):異常模式:除用戶模式、系統(tǒng)模式之外的五種模式稱為異常模式。特點(diǎn):以各自的中斷或異常方式進(jìn)入,并且處理各自的中斷或異常。對(duì)管理模式(svc)進(jìn)入方式和處理內(nèi)容有:系統(tǒng)上電復(fù)位后進(jìn)入管理模式,運(yùn)行系統(tǒng)初始化程序,如中斷允許/禁止,主時(shí)鐘設(shè)置,SDRAM配置,各個(gè)功能模塊初始化等。當(dāng)執(zhí)行軟件中斷指令SWI時(shí),進(jìn)入管理模式。,2.1.3ARM處理器模式,3、處理器模式的切換方式:軟件控制進(jìn)行切換。通過(guò)外部中斷和異常進(jìn)行切換處理器啟動(dòng)時(shí)的模式轉(zhuǎn)換圖,管理模式(Supervisor),多種特權(quán)模式變化,用戶程序的運(yùn)行模式,復(fù)位后的缺省模式,主要完成各模式的堆棧設(shè)置,注意不要進(jìn)入用戶模式,一般為用戶模式User,2.1.4ARM寄存器,一、ARM寄存器概述ARM處理器v4及以上版本有37個(gè)32位的寄存器其中31個(gè)為通用寄存器;6個(gè)為狀態(tài)寄存器。31個(gè)通用寄存器R0R15;R13_svc、R14_svc;R13_abt、R14_abt;R13_und、R14_und;R13_irq、R14_irq;R8_fiq-R14_fiq6個(gè)狀態(tài)寄存器CPSRSPSR_svc、SPSR_abt、SPSR_und、SPSR_irq和SPSR_fiq,2.1.4ARM寄存器,每一類處理器模式都有一組相應(yīng)的寄存器組;在任意的處理器模式下,可見的寄存器包括15個(gè)通用寄存器(R0R14)、1個(gè)或2個(gè)狀態(tài)寄存器和程序寄存器。帶灰色底紋的單元格表示,用戶模式或系統(tǒng)模式使用的一般寄存器,已被異常模式特定的另一寄存器所替代。,2.1.4ARM寄存器,二、ARM通用寄存器通用寄存器包括R0R15,可以分為三類:1、未分組寄存器R0R7在所有的運(yùn)行模式下,未分組寄存器都指向同一個(gè)物理寄存器,他們未被系統(tǒng)用作特殊的用途,是真正的通用寄存器。,2.1.4ARM寄存器,2、分組的寄存器R8R14(1)R8R12對(duì)于R8R12,每一次所訪問(wèn)的物理寄存器,與處理器當(dāng)前的工作模式有關(guān)。當(dāng)處理器工作于fiq模式時(shí),訪問(wèn)的寄存器為R8_fiqR12_fiq;除fiq模式以外的其他模式,訪問(wèn)的寄存器為R8_usrR12_usr。(2)R13和R14:每個(gè)寄存器對(duì)應(yīng)6個(gè)不同的物理寄存器,其中的一個(gè)是用戶模式與系統(tǒng)模式共用,另外5個(gè)物理寄存器,對(duì)應(yīng)于其他5種不同的異常模式。采用以下的記號(hào)來(lái)區(qū)分不同的物理寄存器:R13_R14_其中,mode為以下幾種模式之一:usr、fiq、irq、svc、abt、und。,2.1.4ARM寄存器,R13:寄存器R13在ARM指令中常用作堆棧指針SP。但這只是一種習(xí)慣用法,用戶也可使用其他的寄存器作為堆棧指針。而在Thumb指令集中,某些指令強(qiáng)制性的要求使用R13作為堆棧指針。R14:寄存器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用來(lái)保存R15的返回值。,2.1.4ARM寄存器,3、程序計(jì)數(shù)器PC(R15)(1)寄存器R15用作程序計(jì)數(shù)器(PC)。在ARM狀態(tài)下,位1:0為0,位31:2用于保存PC;在Thumb狀態(tài)下,位0為0,位31:1用于保存PC;(2)使用R15時(shí)注意:雖然R15可以用作通用寄存器,但是有一些指令在使用R15時(shí)有一些特殊限制,若不注意,執(zhí)行的結(jié)果將是不可預(yù)料的。所以,一般不這么使用。(3)關(guān)于PC的值:由于ARM采用多級(jí)流水線技術(shù),所以PC總是指向正在取指的指令,而不是正在執(zhí)行的指令。也即PC總是指向當(dāng)前指令的下兩條指令的地址。因此,對(duì)于ARM指令集而言,PC的值為當(dāng)前指令的地址值加8個(gè)字節(jié)。,2.1.4ARM寄存器,三、ARM狀態(tài)寄存器1、兩種程序狀態(tài)寄存器在ARM微處理器中,有CPSR和SPSR兩種程序狀態(tài)寄存器。(1)當(dāng)前程序狀態(tài)寄存器CPSR(CurrentProgramStatusRegister)用來(lái)保存當(dāng)前程序狀態(tài)的寄存器。所有處理器模式下都可以訪問(wèn)當(dāng)前程序狀態(tài)寄存器CPSR。僅一個(gè)CPSR。(2)保存程序狀態(tài)寄存器SPSR_mode(SavedProgramStatusRegister)SPSR_mode用來(lái)進(jìn)行異常處理,其功能包括:保存ALU中的當(dāng)前操作信息當(dāng)異常發(fā)生時(shí),用來(lái)保存CPSR的值,從異常返回時(shí),將SPSR_mode復(fù)制到CPSR中,恢復(fù)CPSR的值。控制允許和禁止中斷修改SPSR的值設(shè)置處理器的運(yùn)行模式修改SPSR的值,2.1.4ARM寄存器,2、ARM狀態(tài)寄存器的格式(1)條件碼標(biāo)志位(保存ALU中的當(dāng)前操作信息)N:正負(fù)號(hào)/大小標(biāo)志位0表示:正數(shù)/大于;1表示:負(fù)數(shù)/小于Z:零標(biāo)志位0表示:結(jié)果不為零;1表示:結(jié)果為零C:進(jìn)位/借位/移出位0表示:未進(jìn)位/借位/移出0;1表示:進(jìn)位/未借位/移出1V:溢出標(biāo)志位0表示:結(jié)果未溢出;1表示:結(jié)果溢出,2.1.4ARM寄存器,(2)控制位I、F中斷控制位控制允許和禁止中斷I1禁止IRQ中斷I0允許IRQ中斷F1禁止FIQ中斷F0允許FIQ中斷T控制(標(biāo)志)位反映處理器的運(yùn)行狀態(tài)T=1時(shí),程序運(yùn)行于Thumb狀態(tài)T=0時(shí),程序運(yùn)行于ARM狀態(tài)M控制位決定了處理器的運(yùn)行模式當(dāng)發(fā)生異常時(shí)這些位被改變。如果處理器運(yùn)行在特權(quán)模式,這些位也可以由程序修改。,2.1.4ARM寄存器,(3)保留位CPSR中的其余位為保留位,當(dāng)改變CPSR中的條件碼標(biāo)志位或者控制位時(shí),保留位不要改變,在程序中也不要使用保留位來(lái)存儲(chǔ)數(shù)據(jù)。保留位將用于ARM版本的擴(kuò)展。,2.1.4ARM寄存器,四、Thumb狀態(tài)寄存器組織Thumb狀態(tài)下的寄存器集是ARM狀態(tài)下寄存器集的子集。程序員可以直接訪問(wèn)8個(gè)通用的寄存器(R0R7),程序計(jì)數(shù)器PC、堆棧指針SP、鏈接寄存器LR和當(dāng)前狀態(tài)寄存器CPSP。,2.1.5ARM異常中斷,一、異常和中斷概念1、中斷當(dāng)CPU正在執(zhí)行程序時(shí),系統(tǒng)發(fā)生了一件急需處理的事件,CPU暫時(shí)停下正在執(zhí)行的程序,轉(zhuǎn)去處理相應(yīng)的事件,事件處理完后,CPU再返回執(zhí)行原來(lái)的程序,這種情況稱為中斷。中斷事件:引起CPU產(chǎn)生中斷、并且與CPU當(dāng)前所執(zhí)行的程序無(wú)關(guān)的、由外部硬件產(chǎn)生的事件,也叫中斷源。中斷事件也常稱為外中斷。,2.1.5ARM異常中斷,2、異常是指CPU在執(zhí)行指令時(shí)出現(xiàn)的錯(cuò)誤,即不正常的情況。異常是與當(dāng)前所執(zhí)行的程序有關(guān)的。如存取數(shù)據(jù)或指令錯(cuò)誤、計(jì)算結(jié)果溢出等。異常的處理:也用中斷的方式進(jìn)行處理。,二、ARM有7種異常1、復(fù)位處理器上一旦有復(fù)位輸入,ARM處理器立刻停止執(zhí)行當(dāng)前指令。復(fù)位后,ARM處理器在禁止中斷的管理模式下,從地址0 x00000000或0 xFFFF0000開始執(zhí)行指令。2、未定義指令異常當(dāng)ARM處理器執(zhí)行協(xié)處理器指令時(shí),它必須等待任一外部協(xié)處理器應(yīng)答后,才能真正執(zhí)行這條指令。若協(xié)處理器沒(méi)有響應(yīng),就會(huì)出現(xiàn)未定義指令異常。未定義指令異??捎糜谠跊](méi)有物理協(xié)處理器(硬件)的系統(tǒng)上,對(duì)協(xié)處理器進(jìn)行軟件仿真,或在軟件仿真時(shí)進(jìn)行指令擴(kuò)展。,2.1.5ARM異常中斷,3、軟件中斷異常該異常由執(zhí)行SWI指令產(chǎn)生,可使用此機(jī)制進(jìn)行軟件仿真。4、預(yù)取中止(取指令存儲(chǔ)器中止)若處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問(wèn),存儲(chǔ)器會(huì)向處理器發(fā)出中止信號(hào),但當(dāng)預(yù)取的指令被執(zhí)行時(shí),才會(huì)產(chǎn)生指令預(yù)取中止異常。5、數(shù)據(jù)中止(訪問(wèn)數(shù)據(jù)存儲(chǔ)器中止)若處理器數(shù)據(jù)訪問(wèn)指令的地址不存在,或該地址不允許當(dāng)前指令訪問(wèn)時(shí),產(chǎn)生數(shù)據(jù)中止異常。,2.1.5ARM異常中斷,6、IRQ異常當(dāng)處理器的外部中斷請(qǐng)求引腳有效,且CPSR中的I=0,產(chǎn)生IRQ異常。系統(tǒng)的外設(shè)可通過(guò)該異常請(qǐng)求中斷服務(wù)。7、FIQ異常當(dāng)處理器的外部中斷請(qǐng)求引腳有效,且CPSR中的F=0,產(chǎn)生FIQ異常。FIQ支持?jǐn)?shù)據(jù)傳送和通道處理,并有足夠的私有寄存器,從而在應(yīng)用中可避免對(duì)寄存器保存的需求,減少了開銷。,2.1.5ARM異常中斷,三、ARM的異常中斷響應(yīng)過(guò)程1、進(jìn)入異常當(dāng)發(fā)生異常時(shí),除了復(fù)位異常立即中止當(dāng)前指令外,處理器盡量完成當(dāng)前指令,然后脫離當(dāng)前的程序去處理異常。ARM處理器對(duì)異常中斷的響應(yīng)過(guò)程如下:(1)保存返回地址將引起異常指令的下一條指令的地址保存到新的異常模式x下的R14,即R14-中,使異常處理程序執(zhí)行完后能正確返回原程序。(2)保存當(dāng)前狀態(tài)寄存器CPSR的內(nèi)容將CPSR的內(nèi)容保存到將要執(zhí)行的異常中斷對(duì)應(yīng)的SPSR中,便于中斷返回時(shí)恢復(fù)處理器當(dāng)前的狀態(tài)位、中斷屏蔽位以及各條件標(biāo)志位。,2.1.5ARM異常中斷,(3)設(shè)置當(dāng)前狀態(tài)寄存器CPSR中的相應(yīng)位設(shè)置CPSR模式控制位CPSR4:0,使處理器進(jìn)入相應(yīng)的執(zhí)行模式;設(shè)置中斷標(biāo)志位(CPSR6=1),禁止IRQ中斷;設(shè)置中斷標(biāo)志位(CPSR7=1)禁止FIQ中斷,當(dāng)進(jìn)入Reset或FIQ模式時(shí)。(4)轉(zhuǎn)去執(zhí)行中斷處理程序取相應(yīng)的中斷向量給程序計(jì)數(shù)器PC,使程序開始執(zhí)行中斷處理程序。一般地說(shuō),矢量地址處將包含一條指向相應(yīng)程序的轉(zhuǎn)移指令,從而可跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行異常中斷處理程序。,2.1.5ARM異常中斷,2.1.5ARM異常中斷,ARM處理器對(duì)異常的響應(yīng)過(guò)程可以用偽代碼描述如下:R14_=returnlinkSPSR_=CPSRCPSR4:0=exceptionmodenumberCPSR5=0/*當(dāng)運(yùn)行于ARM狀態(tài)時(shí)*/CPSR6=1/*禁止新的IRQ中斷*/if=ResetorFIQthenCPSR7=1/*當(dāng)Reset或FIQ異常中斷時(shí)*/*禁止新的FIQ中斷*/PC=exceptionvectoraddress,注意使用異常模式下的特有寄存器每個(gè)異常模式對(duì)應(yīng)有兩個(gè)寄存器R13_、R14_分別保存相應(yīng)模式下的堆棧指針、返回地址;堆棧指針可用來(lái)定義一個(gè)存儲(chǔ)區(qū)域保存其它用戶寄存器,在程序初始化時(shí)應(yīng)該對(duì)各種模式堆棧設(shè)置,便于隨時(shí)使用。FIQ模式還有額外的專用寄存器R8_fiqR12_fiq,使用這些寄存器可以加快快速中斷的處理速度。,2.1.5ARM異常中斷,2、異常返回(1)異常返回應(yīng)執(zhí)行的操作異常處理完畢之后,ARM微處理器會(huì)執(zhí)行以下幾步操作從異常返回:將返回地址裝入PC把連接寄存器LR的值減去相應(yīng)的偏移量,然后送到PC中?;謴?fù)CPSR的值將SPSR復(fù)制回CPSR中。清除中斷屏蔽位若在進(jìn)入異常處理時(shí)設(shè)置了中斷禁止位,要在此清除??梢哉J(rèn)為應(yīng)用程序總是從復(fù)位異常處理程序開始執(zhí)行的,因此復(fù)位異常處理程序不需要返回。,2.1.5ARM異常中斷,(2)各種異常返回方法FIQ中斷返回不管是在ARM狀態(tài)還是在Thumb狀態(tài)下進(jìn)入FIQ模式,F(xiàn)IQ處理程序均可以執(zhí)行以下指令從FIQ模式返回:SUBSPC,R14-fiq,#4指令預(yù)取中止(Abort)異常返回當(dāng)指令預(yù)取訪問(wèn)存儲(chǔ)器失敗時(shí),存儲(chǔ)器系統(tǒng)向ARM處理器發(fā)出存儲(chǔ)器中止(Abort)信號(hào),預(yù)取的指令被記為無(wú)效,但只有當(dāng)處理器試圖執(zhí)行無(wú)效指令時(shí),指令預(yù)取中止異常才會(huì)發(fā)生,如果指令未被執(zhí)行,例如在指令流水線中發(fā)生了跳轉(zhuǎn),則預(yù)取指令中止不會(huì)發(fā)生。如果發(fā)生了指令預(yù)取中止異常,無(wú)論是在ARM狀態(tài)還是Thumb狀態(tài),其返回指令為:SUBSPC,R14_abt,#4;重新執(zhí)行被中止的指令,2.1.5ARM異常中斷,數(shù)據(jù)中止(Abort)異常返回如果發(fā)生了數(shù)據(jù)中止異常,無(wú)論是在ARM狀態(tài)還是Thumb狀態(tài),其返回指令為:SUBSPC,R14_abt,#8重新執(zhí)行被中止的指令軟件中斷指令(SWI)異常返回用于進(jìn)入管理模式,常用于請(qǐng)求執(zhí)行特定的管理功能。軟件中斷處理程序執(zhí)行以下指令可以從SWI模式返回,無(wú)論是在ARM狀態(tài)還是Thumb狀態(tài):MOVSPC,R14_svc以上指令恢復(fù)PC(從R14_svc)和CPSR(從SPSR_svc)的值,并返回到SWI的下一條指令。,2.1.5ARM異常中斷,未定義指令異常返回當(dāng)ARM處理器遇到不能處理的指令時(shí),會(huì)產(chǎn)生未定義指令異常。采用這種機(jī)制,可以通過(guò)軟件仿真擴(kuò)展ARM或Thumb指令集。處理器執(zhí)行以下程序返回,無(wú)論是在ARM狀態(tài)還是Thumb狀態(tài):MOVSPC,R14_und以上指令恢復(fù)PC(從R14_und)和CPSR(從SPSR_und)的值,并返回到未定義指令后的下一條指令。,2.1.5ARM異常中斷,四、ARM中斷向量,2.1.5ARM異常中斷,五、異常中斷向量表,2.1.5ARM異常中斷,異常中斷向量表說(shuō)明:存儲(chǔ)器的前8個(gè)字中除了地址0 x00000014之外,全部被用作異常矢量地址。,2.1.5ARM異常中斷,六、ARM中斷的優(yōu)先級(jí),2.1.5ARM異常中斷,2.2ARM指令系統(tǒng),2.2.1ARM指令結(jié)構(gòu)2.2.2ARM尋址方式2.2.3ARM指令集2.2.4Thumb指令集2.2.5ARM匯編偽指令和偽操作,2.2.1ARM指令結(jié)構(gòu),一、ARM指令特點(diǎn)1、指令系統(tǒng)概念指令:是規(guī)定計(jì)算機(jī)進(jìn)行某種操作的命令。指令系統(tǒng):計(jì)算機(jī)能夠執(zhí)行的各種指令的集合。2、ARM指令的特點(diǎn)所有指令都是32位的。大多數(shù)指令都在單周期內(nèi)完成。所有指令都可以條件執(zhí)行。ARM指令為load/store類型?;局噶顑H36條,分成五類。有7種尋址方式。指令集可以通過(guò)協(xié)處理器擴(kuò)展。,3、ARM指令是加載/存儲(chǔ)(Load/Store)型:也即指令集僅能處理寄存器中的數(shù)據(jù),而且處理結(jié)果都要放回寄存器中,而對(duì)系統(tǒng)存儲(chǔ)器的訪問(wèn)則需要通過(guò)專門的加載/存儲(chǔ)指令來(lái)完成。4、ARM指令可以分為五大類:數(shù)據(jù)處理指令、存儲(chǔ)器訪問(wèn)指令、分支指令、協(xié)處理器指令、雜項(xiàng)指令。5、ARM指令有7種尋址方式:立即尋址、寄存器尋址、寄存器間接尋址、基址尋址、堆棧尋址、塊拷貝尋址、相對(duì)尋址。,2.2.1ARM指令結(jié)構(gòu),二、ARM指令格式1、ARM指令基本的語(yǔ)法格式為:s,Opcode:指令操作碼。cond:指令的條件碼。S:決定指令的操作是否影響cpsr的值。Rd:目標(biāo)寄存器編碼。Rn:包含第一個(gè)操作數(shù)的寄存器編碼。Operand2:第2操作數(shù)。,2.2.1ARM指令結(jié)構(gòu),2、ARM指令典型的編碼格式為:(數(shù)據(jù)處理指令類),例:ADDSR2,R1,#1SUBNESR2,R1,#0 x20LDRR0,R1,2.2.1ARM指令結(jié)構(gòu),三、ARM指令的條件碼1、條件碼的位數(shù)和位置:每條ARM指令包含4位條件碼域,它占用指令編碼的最高四位31:28。2、條件碼的表示:條件編碼共2416種,其中,15種用于指令的條件碼。每種條件碼用2個(gè)英文縮寫字符表示。(見下表),指令條件碼表,2.2.1ARM指令結(jié)構(gòu),3、帶條件指令的執(zhí)行:ARM處理器根據(jù)指令的執(zhí)行條件是否滿足,決定當(dāng)前指令是否執(zhí)行。只有在cpsr中的條件標(biāo)志位滿足指定的條件時(shí),指令才會(huì)被執(zhí)行。不符合條件的代碼依然占用一個(gè)時(shí)鐘周期(相當(dāng)于一個(gè)NOP指令)。4、條件碼的書寫方法:條件碼的位置在指令助記符的后面(因此也稱為條件后綴)。例如:MOVEQR0,R1,2.2.2ARM尋址方式,尋址方式:處理器根據(jù)指令中給出的(地址)信息,尋找操作數(shù)(物理地址)的方式。將ARM指令系統(tǒng)的尋址方式分為7種。立即尋址寄存器尋址寄存器間接尋址變址尋址堆棧尋址塊拷貝尋址相對(duì)尋址,一、立即尋址立即尋址也叫立即數(shù)尋址。立即尋址概念:操作數(shù)本身就在指令中給出,只要取出指令也就取到了操作數(shù)。這個(gè)操作數(shù)被稱為立即數(shù),對(duì)應(yīng)的尋址方式也就叫做立即尋址。ADDR0,R0,1;R0R01MOVR0,0 x3f;R00 x3f書寫立即數(shù)時(shí),要求以“”為前綴。十六進(jìn)制數(shù),后加0 x或R0R1STRR0,R1;R1R0第一條指令將以R1的值為地址的存儲(chǔ)單元中的內(nèi)容加載到寄存器R0中。第二條指令將R0的內(nèi)容存儲(chǔ)到以R1的值為地址的存儲(chǔ)單元中。R1基址寄存器R1的內(nèi)容基地址,四、變址尋址變址尋址也叫基址加偏(變)址尋址將基址寄存器的內(nèi)容與指令中給出的地址偏移量相加,得到操作數(shù)所在的存儲(chǔ)器的有效地址。變址尋址方式常用于訪問(wèn)某基地址附近的地址單元。,例如:LDRR0,R1,4;R0mem32R14,五、堆棧尋址堆棧尋址堆棧尋址是隱含的,它使用一個(gè)專門的寄存器(堆棧指針SP)指向一塊存儲(chǔ)區(qū)域(堆棧)。堆??煞譃閮煞N增長(zhǎng)方式:向上生長(zhǎng):向高地址方向生長(zhǎng),稱為遞增堆棧。向下生長(zhǎng):向低地址方向生長(zhǎng),稱為遞減堆棧。,根據(jù)堆棧指針指向的數(shù)據(jù)位置的不同,可分為:滿堆棧堆棧指針指向最后壓入堆棧的有效數(shù)據(jù)項(xiàng),稱為滿堆棧;空堆棧堆棧指針指向下一個(gè)待壓入數(shù)據(jù)的空位置,稱為空堆棧。這樣就有4種類型的堆棧表示遞增和遞減的滿和空堆棧的各種組合。,四種類型的堆棧工作方式滿遞增堆棧FA(FullAscending):堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生長(zhǎng)。滿遞減堆棧FD:堆棧指針指向最后壓入的數(shù)據(jù),且由高地址向低地址生長(zhǎng)??者f增堆棧EA:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由低地址向高地址生長(zhǎng)??者f減堆棧ED(EmptyDescending):堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由高地址向低地址生長(zhǎng)。,六、塊拷貝尋址塊拷貝尋址把存儲(chǔ)器中的一個(gè)數(shù)據(jù)塊加載到多個(gè)寄存器中,或者是把多個(gè)寄存器中的內(nèi)容保存到存儲(chǔ)器中。應(yīng)用指令:塊拷貝尋址是多寄存器傳送指令LDM/STM的尋址方式,因此也叫多寄存器尋址。塊拷貝尋址操作中的寄存器,可以是R0-R15這16個(gè)寄存器的子集(一部分),或是所有寄存器。,4種尋址操作LDMIA/STMIAIncrementAfter(先傳送,后地址加4)LDMIB/STMIBIncrementBefore(先地址加4,后傳送)LDMDA/STMDADecrementAfter(先傳送,后地址減4)LDMDB/STMDBDecrementBefore(先地址減4,后傳送),七、相對(duì)尋址相對(duì)尋址與基址變址尋址方式相類似,相對(duì)尋址以程序計(jì)數(shù)器PC的當(dāng)前值為基地址,指令中的地址標(biāo)號(hào)作為偏移量,將兩者相加之后得到操作數(shù)的有效地址。相對(duì)尋址指令舉例如下:BLSUBRl;調(diào)用到SUBRl子程序.;SUBRl應(yīng)為24位有符號(hào)數(shù)SUBR1MOVPC,LR;返回,2.2.3ARM指令集,ARM主要指令如下:存儲(chǔ)器訪問(wèn)指令數(shù)據(jù)處理指令分支指令協(xié)處理器指令雜項(xiàng)指令,一、存儲(chǔ)器訪問(wèn)指令A(yù)RM微處理器用加載/存儲(chǔ)指令訪問(wèn)存儲(chǔ)器,實(shí)現(xiàn)在寄存器和存儲(chǔ)器之間傳送數(shù)據(jù)。加載指令用于將存儲(chǔ)器中的數(shù)據(jù)傳送到寄存器,存儲(chǔ)指令則完成相反的操作。由于ARM處理器對(duì)外設(shè)寄存器、I/O映射空間與存儲(chǔ)器統(tǒng)一編址,因此,對(duì)外圍設(shè)備的I/O操作也用此類指令。基本的加載/存儲(chǔ)指令僅有5條,分為3種:LDR和STR,單寄存器加載/存儲(chǔ)指令LDM和STM,多寄存器加載/存儲(chǔ)指令SWP,寄存器和存儲(chǔ)器數(shù)據(jù)交換指令,1、單寄存器的存取指令單寄存器加載/存儲(chǔ)指令是ARM在寄存器和存儲(chǔ)器間傳送單個(gè)字節(jié)和字的最靈活方式。根據(jù)傳送數(shù)據(jù)的類型不同,單個(gè)寄存器存取指令又可以分為以下兩類:?jiǎn)巫趾蜔o(wú)符號(hào)字節(jié)的加載/存儲(chǔ)指令LDR:指令從內(nèi)存中取32位字或8位無(wú)符號(hào)字節(jié)數(shù)據(jù)放入寄存器;STR:指令將寄存器中的32位字或8位無(wú)符號(hào)字節(jié)數(shù)據(jù)保存到存儲(chǔ)器中注意:無(wú)符號(hào)字節(jié)加載時(shí),用0將8位的操作數(shù)擴(kuò)展到32位。,半字和有符號(hào)字節(jié)的加載/存儲(chǔ)指令這類LDR/STR指令可實(shí)現(xiàn)半字(有符號(hào)和無(wú)符號(hào))、有符號(hào)字節(jié)數(shù)據(jù)的傳送。特點(diǎn):偏移量格式、尋址方式與加載存儲(chǔ)字和無(wú)符號(hào)字節(jié)指令基本相同。立即數(shù)偏移量限定在8位,寄存器偏移量不可經(jīng)過(guò)移位得到。,2、多寄存器的存取指令LDM和STM指令可以實(shí)現(xiàn)在一組寄存器和一塊連續(xù)的內(nèi)存單元之間存/取數(shù)據(jù)。LDM為加載多個(gè)寄存器;STM為存儲(chǔ)多個(gè)寄存器。這兩條指令,允許傳送16個(gè)寄存器R0-R15的任何子集或所有寄存器。,3、單寄存器交換指令(SWP)SWP指令用于將一個(gè)存儲(chǔ)單元(該單元地址放在寄存器Rn中)的內(nèi)容讀取到一個(gè)寄存器Rd中,同時(shí)將另一個(gè)寄存器Rm的內(nèi)容寫入到該存儲(chǔ)單元中。(1)指令格式SWPcondBRd,Rm,RnB為可選后綴,若有B,則交換字節(jié),否則交換32位字Rd為被加載的寄存器Rm的數(shù)據(jù)用于存儲(chǔ)到Rn所指的地址中若Rm與Rd相同,則為寄存器與存儲(chǔ)器內(nèi)容進(jìn)行交換Rn為要進(jìn)行數(shù)據(jù)交換的存儲(chǔ)器地址,Rn不能與Rd和Rm相同。,(2)指令舉例SWPR1,R1,R0;將R1的內(nèi)容與R0指向的存儲(chǔ)單元的內(nèi)容進(jìn)行交換。SWPBR1,R2,R0;將R0指向的存儲(chǔ)單元的內(nèi)容讀取1字節(jié)數(shù)據(jù)到R1中(高24位清零),并將R2的內(nèi)容寫入到該內(nèi)存單元中(最低字節(jié)有效),二、數(shù)據(jù)處理指令1、數(shù)據(jù)處理指令概述(1)ARM數(shù)據(jù)處理指令的功能主要完成寄存器中數(shù)據(jù)的算術(shù)和邏輯運(yùn)算操作。(2)ARM數(shù)據(jù)處理指令的特點(diǎn)操作數(shù)來(lái)源:所有的操作數(shù)要么來(lái)自寄存器,要么來(lái)自立即數(shù),不會(huì)來(lái)自存儲(chǔ)器。操作結(jié)果:如果有結(jié)果,則結(jié)果一定是為32位寬、或64位寬(長(zhǎng)乘法指令),并且放在一個(gè)或兩個(gè)寄存器中,不會(huì)寫入存儲(chǔ)器。有第二個(gè)操作數(shù)(除了乘法指令)Operand2:切記其三種形式:立即數(shù)、寄存器、寄存器移位。乘法指令的操作數(shù):全部是寄存器。,(3)ARM數(shù)據(jù)處理指令分類22條可分為5類:算術(shù)運(yùn)算指令:ADDADCSUBSBCRSBRSCMULMLAUMULLUMLALSMULLSMLAL邏輯運(yùn)算指令:ANDORREORBIC數(shù)據(jù)傳送指令:MOVMVN比較指令:CMPCMN測(cè)試指令:TSTTEQ上述指令只能對(duì)寄存器操作,不能針對(duì)存儲(chǔ)器。,(4)數(shù)據(jù)處理指令對(duì)程序狀態(tài)寄存器CPSR的影響1)選擇“S”后綴問(wèn)題:指令中可以選擇s后綴,以影響狀態(tài)標(biāo)志。但是比較指令(cmp、cmn、tst和teq)不需要后綴S,它們總會(huì)直接影響CPSR中的狀態(tài)標(biāo)志。2)對(duì)CPSR中標(biāo)志位的影響:標(biāo)志位:如果結(jié)果為負(fù),則標(biāo)志位置;否則清。標(biāo)志位:如果結(jié)果為,則標(biāo)志位置;否則清。標(biāo)志位:如果是加、減運(yùn)算指令或比較指令時(shí),標(biāo)志位設(shè)置為的進(jìn)位輸出;否則設(shè)置為移位器的移位輸出。如果不需要移位,則保持不變。標(biāo)志位:在非加減操作中,標(biāo)志位保持原值。在加減操作中,如果有溢出,則置;不發(fā)生溢出,則清。,(5)數(shù)據(jù)處理指令的詳細(xì)列表(未含6條乘法指令),2、算術(shù)運(yùn)算指令(1)加減運(yùn)算指令A(yù)DD加法運(yùn)算指令A(yù)DC帶進(jìn)位加法指令SUB減法運(yùn)算指令SBC帶進(jìn)位減法指令RSB反向減法指令RSC帶進(jìn)位反向減法指令,(2)乘法指令A(yù)RM有兩類乘法指令:32位的乘法指令,即乘法操作的結(jié)果為32位;64位的乘法指令,即乘法操作的結(jié)果為64位。,MUL32位乘法指令MLA32位乘加指令UMULL64位無(wú)符號(hào)乘法指令UMLAL64位無(wú)符號(hào)乘加指令SMULL64位有符號(hào)乘法指令SMLAL64位有符號(hào)乘加指令,3、邏輯運(yùn)算指令(1)AND邏輯“與”操作指令A(yù)ND指令可用于提取寄存器中某些位的值(2)ORR邏輯“或”操作指令ORR指令用于將寄存器中某些位的值設(shè)置成1。(3)EOR邏輯“異或”操作指令EOR指令可用于將寄存器中某些位的值取反。將某一位與0異或,該位值不變;與1異或,該位值被求反。(4)BIC位清除指令BIC指令可用于將寄存器中某些位的值設(shè)置成0。將某一位與1做BIC操作,該位值被設(shè)置成0;將某一位與0做BIC操作,該位值不變。,4、數(shù)據(jù)傳送指令(1)MOV數(shù)據(jù)傳送指令功能:寄存器之間傳送。立即數(shù)傳送到寄存器中。實(shí)現(xiàn)單純的移位操作。MOVRd,Rd,LSL,#3實(shí)現(xiàn)子程序調(diào)用、從子程序中返回。當(dāng)PC寄存器作為目標(biāo)寄存器時(shí)可以實(shí)現(xiàn)程序跳轉(zhuǎn)。實(shí)現(xiàn)把當(dāng)前處理器模式的SPSR寄存器內(nèi)容復(fù)制到CPSR中。,(2)MVN數(shù)據(jù)求反傳送指令(3)比較指令CMP比較指令CMN負(fù)數(shù)比較指令(4)測(cè)試指令TST位測(cè)試指令TEQ測(cè)試相等指令,三、分支指令在ARM中有兩種方式可以實(shí)現(xiàn)程序的跳轉(zhuǎn):一種是使用分支轉(zhuǎn)移指令直接跳轉(zhuǎn);另一種則是直接向PC寄存器賦值來(lái)實(shí)現(xiàn)跳轉(zhuǎn)。ARM的分支轉(zhuǎn)移指令,可以從當(dāng)前指令向前或向后的32MB的地址空間跳轉(zhuǎn)。根據(jù)完成的功能它可以分為以下4種:B分支指令BL帶鏈接的分支指令BX帶狀態(tài)切換的分支指令BLX帶鏈接和狀態(tài)切換的分支指令,四、協(xié)處理器指令1、ARM協(xié)處理器:ARM支持16個(gè)協(xié)處理器,用于各種協(xié)處理器操作,最常使用的協(xié)處理器是用于控制片上功能的系統(tǒng)協(xié)處理器,例如控制高速緩存和存儲(chǔ)器的管理單元,浮點(diǎn)ARM協(xié)處理器等,還可以開發(fā)專用的協(xié)處理器。2、ARM協(xié)處理器指令根據(jù)其用途主要分為以下三類:協(xié)處理器數(shù)據(jù)操作指令。ARM寄存器與協(xié)處理器寄存器的數(shù)據(jù)傳送指令。協(xié)處理器寄存器和內(nèi)存單元之間數(shù)據(jù)存/取指令。,3、ARM的協(xié)處理器指令功能:(1)ARM處理器初始化ARM協(xié)處理器的數(shù)據(jù)處理操作;(2)在ARM處理器的寄存器和協(xié)處理器的寄存器之間傳送數(shù)據(jù);(3)在ARM協(xié)處理器的寄存器和存儲(chǔ)器之間傳送數(shù)據(jù)。4、ARM協(xié)處理器指令包括以下5條:CDP協(xié)處理器數(shù)操作指令coprocessorLDC協(xié)處理器數(shù)據(jù)加載指令STC協(xié)處理器數(shù)據(jù)存儲(chǔ)指令MCRARM處理器寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳送指令MRC協(xié)處理器寄存器到ARM處理器寄存器的數(shù)據(jù)傳送指令,五、雜項(xiàng)指令主要由兩種類型指令組成,程序狀態(tài)寄存器操作指令、中斷操作指令,一共有5條指令。狀態(tài)寄存器操作指令:MRS:讀程序狀態(tài)寄存器指令MSR:寫程序狀態(tài)寄存器指令異常中斷操作指令:SWI:軟件中斷指令BKPT:斷點(diǎn)指令(v5T體系)CLZ:前導(dǎo)0計(jì)數(shù)(v5T體系),六、例題1、算數(shù)邏輯運(yùn)算指令的應(yīng)用例1:實(shí)現(xiàn)乘法的指令段MOVR0,R0,LSL#n;R0=R0b)a=a-bSUBLTR1,R1,R0;if(ba)b=b-aBNEgcd;if(a!=b)跳轉(zhuǎn)到gcd繼續(xù)執(zhí)行MOVPC,LR;子程序結(jié)束,返回,例3:循環(huán)語(yǔ)句將內(nèi)存中從0 x400800開始的100個(gè)字?jǐn)?shù)據(jù)相加,其結(jié)果存于R3、R2中(R3中為高32位)。LDRR0,=0 x400800MOVR1,#100;初始化循環(huán)次數(shù)MOVR2,#0MOVR3,#0loop;循環(huán)體LDRR4,R0,#4ADDSR2,R2,R4ADCR3,R3,#0或者ADDCSR3,R3,#1SUBSR1,R1,#1;循環(huán)計(jì)數(shù)器減1,設(shè)置條件標(biāo)志BNEloop;循環(huán)計(jì)數(shù)器不為0,跳到loop繼續(xù)執(zhí)行;循環(huán)計(jì)數(shù)器為0,程序繼續(xù)執(zhí)行,例4:鏈表操作中的條件碼應(yīng)用在鏈表中搜索與某一數(shù)據(jù)相等的元素。鏈表的每個(gè)元素包括兩個(gè)字,第1個(gè)字中包含一個(gè)字節(jié)數(shù)據(jù);第2個(gè)字中包含指向下一個(gè)鏈表元素的指針,當(dāng)這個(gè)指針為0時(shí)表示鏈表結(jié)束。代碼執(zhí)行前R0指向鏈表的頭元素,R1中存放將要搜索的數(shù)據(jù);代碼執(zhí)行后R0指向第1個(gè)匹配的元素,或者當(dāng)沒(méi)有匹配元素時(shí),R0為0。,SEARCHCMPR0,#0;R0指針是否為空LDRNEBR2,R0;讀取當(dāng)前元素中的字節(jié)數(shù)據(jù)CMPNER1,R2;判斷數(shù)據(jù)是否為搜索的數(shù)據(jù)LDRNER0,R0,#4;如果不是,指針R0指向下一個(gè)元素BNESEARCH;跳轉(zhuǎn)到search執(zhí)行MOVPC,LR;搜索完成,程序返回,2.2.4Thumb指令集,一、Thumb指令集特點(diǎn)Thumb指令集是ARM指令集壓縮形式的子集,所有Thumb指令均有對(duì)應(yīng)的ARM指令。采用16位二進(jìn)制編碼,代碼密度小。執(zhí)行Thumb指令時(shí),先動(dòng)態(tài)解壓縮,然后作為標(biāo)準(zhǔn)的ARM指令執(zhí)行。如何區(qū)分指令流取決于CPSR的第5位(位T)。大多數(shù)Thumb數(shù)據(jù)處理指令采用2個(gè)操作數(shù)格式。由于16位的限制,移位操作變成單獨(dú)指令。,Thumb指令集沒(méi)有協(xié)處理器指令、單寄存器交換指令、乘加指令、64位乘法指令以及程序狀態(tài)寄存器處理指令,而且指令的第2操作數(shù)受到限制。除了分支指令B有條件執(zhí)行功能外,其他指令均為無(wú)條件執(zhí)行。Thumb是一個(gè)不完整的體系結(jié)構(gòu),不能指望處理器只執(zhí)行Thumb代碼而不支持ARM指令集。,二、狀態(tài)切換1、ARM狀態(tài)進(jìn)入Thumb狀態(tài)的方法執(zhí)行帶狀態(tài)切換的轉(zhuǎn)移指令BX。若BX指令指定的寄存器的最低位為1,則將T置位,并將程序計(jì)數(shù)器切換為寄存器其他位給出的地址。BXR0;若R0最低位為1,則轉(zhuǎn)入Thumb狀態(tài),異常返回也可以將微處理器從ARM狀態(tài)轉(zhuǎn)換為Thumb狀態(tài)。通常這種指令用于返回到進(jìn)入異常前所執(zhí)行的指令流,而不是特地用于轉(zhuǎn)換到Thumb模式。MOVPC,LR;當(dāng)返回地址保存在LR時(shí)STMFDSP!,LR;當(dāng)返回地址保存在堆棧時(shí),;進(jìn)入異常后將R14入棧,;假設(shè)異常前執(zhí)行的是Thumb指令,PC保存于LR中LDMFDSP!,PC;返回指令,2、Thumb狀態(tài)進(jìn)入ARM狀態(tài)的方法執(zhí)行Thumb指令中的交換轉(zhuǎn)移BX指令可以顯式地返回到ARM指令流。利用異常進(jìn)入ARM指令流。,三、Thumb指令寄存器的使用,Lo寄存器,Hi寄存器,CPSR,有陰影的寄存器訪問(wèn)時(shí)受到限制,對(duì)低(Lo)8個(gè)通用寄存器R0R7具有全部訪問(wèn)權(quán)限,可以被任意指令訪問(wèn)。寄存器R8R12的訪問(wèn)受到限制,這些寄存器只能通過(guò)MOV、ADD和CMP訪問(wèn)。對(duì)寄存器R13R15進(jìn)行擴(kuò)展以作特殊應(yīng)用。CPSR間接訪問(wèn)(CMP和數(shù)據(jù)處理指令影響)。SPSR不能訪問(wèn)。CPSR的條件標(biāo)志位由算術(shù)和邏輯操作設(shè)置并控制條件轉(zhuǎn)移。,四、Thumb-ARM異同點(diǎn)1、Thumb-ARM相似處:Load/Store結(jié)構(gòu)。支持8位字節(jié)、16位半字和32位字?jǐn)?shù)據(jù)類型,半字以兩字節(jié)邊界對(duì)準(zhǔn),字以4字節(jié)邊界對(duì)準(zhǔn)。2、Thumb-ARM差異處:大多數(shù)Thumb指令是無(wú)條件執(zhí)行的,所有ARM指令都是條件執(zhí)行的。許多Thumb數(shù)據(jù)處理指令采用2個(gè)操作數(shù)格式(目的寄存器與一個(gè)源寄存器相同),ARM數(shù)據(jù)處理指令大多采用3個(gè)操作數(shù)格式。如:ADDR0,R1由于采用高密度編碼,Thumb指令格式?jīng)]有ARM指令格式規(guī)則。,五、Thumb轉(zhuǎn)移指令1、Thumb轉(zhuǎn)移指令用于:向后轉(zhuǎn)移形成循環(huán);條件結(jié)構(gòu)向前轉(zhuǎn)移;轉(zhuǎn)向子程序;處理器從Thumb狀態(tài)切換到ARM狀態(tài)。2、程序相對(duì)轉(zhuǎn)移,特別是條件轉(zhuǎn)移與在ARM狀態(tài)下相比,在范圍上有更多的限制,轉(zhuǎn)向子程序只能是無(wú)條件轉(zhuǎn)移。3、Thumb轉(zhuǎn)移指令包括:B;BL;BX;BLX,六、堆棧指令功能:低寄存器和可選的LR進(jìn)棧。低寄存器和可選的PC出棧。格式:POP,PCPUSH,LR其中:Reglist低寄存器范圍的、用逗號(hào)隔開的列表。注釋:1Thumb堆棧是滿遞減堆棧,向下增長(zhǎng),且SP指向堆棧的最后入口。2寄存器以數(shù)字順序存儲(chǔ)在堆棧中。最低數(shù)字的寄存器其地址最低。3POPreglist,PC這條指令引起處理器轉(zhuǎn)移到從堆棧彈出給PC的地址。這通常是從子程序返回,其中LR在子程序開頭壓進(jìn)堆棧。4指令采用基址回寫,因此基址寄存器不應(yīng)出現(xiàn)在寄存器列表中。,5.這些指令不影響條件碼標(biāo)志例:PUSHR0,R4-R7;R0、R4R7進(jìn)棧PUSHR0,LRPOPR2,R5POPR0-R7,PC;出棧并從子程序返回,七、寄存器讀取和存儲(chǔ)指令1、單寄存器讀取和存儲(chǔ)Thumb

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論