chapARM微處理器體系結(jié)構(gòu)與指令集_第1頁
chapARM微處理器體系結(jié)構(gòu)與指令集_第2頁
chapARM微處理器體系結(jié)構(gòu)與指令集_第3頁
chapARM微處理器體系結(jié)構(gòu)與指令集_第4頁
chapARM微處理器體系結(jié)構(gòu)與指令集_第5頁
已閱讀5頁,還剩205頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

會計(jì)學(xué)1chapARM微處理器體系結(jié)構(gòu)與指令集3.1.1嵌入式微處理器概述1.嵌入式處理器評價(jià)指標(biāo)(1)功耗。(2)代碼存儲密度。(3)集成度。(4)多媒體加速。2.評估嵌入式系統(tǒng)處理器的主要指標(biāo)(1)MIPS測試基準(zhǔn)。(2)Dhrystone。(3)EEMBC。第1頁/共210頁3.1.2ARM微處理器概述成立于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ù)軟件工具,評估板,調(diào)試工具,應(yīng)用軟件,總線架構(gòu),外圍設(shè)備單元等等第2頁/共210頁1.ARM處理器的特點(diǎn)(1)體積小、功耗低、成本低、性能高;(2)16位/32位雙指令集;(3)指令長度固定(32位/16位)(4)大量使用寄存器,指令執(zhí)行速度更快(5)尋址方式簡單靈活、執(zhí)行效率高第3頁/共210頁2.ARM微處理器的應(yīng)用領(lǐng)域

(1)工業(yè)控制領(lǐng)域

占據(jù)高端微處理器的大部分市場份額,同時(shí)也向低端微控制器應(yīng)用領(lǐng)域擴(kuò)展(2)無線通信領(lǐng)域目前已有超過85%的無線通信設(shè)備采用了ARM技術(shù)(3)消費(fèi)類電子產(chǎn)品在音頻播放器、機(jī)頂盒和游戲機(jī)中得到廣泛應(yīng)用(4)圖像處理產(chǎn)品數(shù)碼相機(jī)和打印機(jī)中絕大部分采用ARM技術(shù)。第4頁/共210頁3.1.3ARM架構(gòu)版本與產(chǎn)品系列1.ARM微處理器目前包括下面幾個(gè)系列(1)通用系列ARM7系列ARM9系列、ARM9E系列ARM10E系列ARM11系列Cortex系列(2)安全系列SecurCore系列第5頁/共210頁2.ARM7系列3.1.3ARM架構(gòu)版本與產(chǎn)品系列(1)ARM7微處理器系列特點(diǎn)①極低的功耗(0.28mW/MHz),適合對功耗要求較高的應(yīng)用②具有嵌入式ICE-RT邏輯,調(diào)試開發(fā)方便③能夠提供0.9MIPS/MHz的三級流水線結(jié)構(gòu)④支持的操作系統(tǒng):μC/OS-II、μClinux等⑤性能最高可達(dá)130MIPS第6頁/共210頁(2)ARM7系列微處理器的主要應(yīng)用領(lǐng)域2.ARM7系列①工業(yè)控制、網(wǎng)絡(luò)和調(diào)制解調(diào)器②移動(dòng)電話、消費(fèi)電子等(3)ARM7系列類型ARM7TDMI、ARM7TDMI-S、ARM720TTDMI的基本含義T:支持16位壓縮指令集ThumbD:支持片上DebugM:內(nèi)嵌硬件乘法器I:嵌入式ICE,支持片上斷點(diǎn)和調(diào)試點(diǎn)第7頁/共210頁3.ARM9系列(1)ARM9系列微處理器的特點(diǎn)①5級流水線,指令執(zhí)行效率更高②提供1.1MIPS/MHz的加速能力③全性能的MMU,支持WindowsCE、EmbeddedLinux等④支持?jǐn)?shù)據(jù)Cache和指令Cache⑤性能最高可達(dá)300MIPS第8頁/共210頁3.ARM9系列(2)ARM9系列微處理器主要應(yīng)用①無線設(shè)備②機(jī)頂盒③高端打印機(jī)、數(shù)字照相機(jī)和數(shù)字?jǐn)z像機(jī)④汽車電子(3)ARM9系列微處理器類型ARM920T、ARM922T第9頁/共210頁4.ARM9E系列

(1)ARM9E系列微處理器的主要特點(diǎn)①支持DSP指令集②5級整數(shù)流水線,指令執(zhí)行效率更高③支持VFP9浮點(diǎn)處理協(xié)處理器④全性能的MMU,支持WindowsCE、EmbeddedLinux等⑤支持?jǐn)?shù)據(jù)Cache和指令Cache⑥性能最高可達(dá)300MIPS第10頁/共210頁4.ARM9E系列

(2)ARM9E系列微處理器的主要應(yīng)用①工業(yè)控制②無線設(shè)備和網(wǎng)絡(luò)設(shè)備③數(shù)字消費(fèi)品、圖像處理設(shè)備、存儲設(shè)備(3)ARM9E系列微處理器類型ARM926EJ-S;ARM046E-S;ARM966E-S、ARM968E-S;ARM996HS第11頁/共210頁5.ARM10E系列(1)ARM10E系列微處理器的主要特點(diǎn)①支持DSP指令集②6級整數(shù)流水線,指令執(zhí)行效率更高③支持VF10浮點(diǎn)處理協(xié)處理器④全性能的MMU,支持WindowsCE、EmbeddedLinux等⑤支持?jǐn)?shù)據(jù)Cache和指令Cache⑥性能最高可達(dá)400MIPS第12頁/共210頁5.ARM10E系列(2)ARM10E系列微處理器的主要應(yīng)用①手持設(shè)備②工業(yè)控制③數(shù)字消費(fèi)品、汽車電子④圖像處理設(shè)備(3)ARM10E系列系列微處理器類型ARM1020E;ARM1022E;ARM1026EJ-S第13頁/共210頁6.ARM11系列(1)ARM11系列微處理器的主要特點(diǎn)①高性能8級流水增強(qiáng)的ARMv6體系結(jié)構(gòu)與同等的ARM10相比較,在同樣的時(shí)鐘頻率下,性能提高了近50%時(shí)鐘頻率達(dá)到500~750MHz②低功耗ARM系列微處理器采用先進(jìn)的節(jié)能方式,使其功耗極低0.6mW/MHz(0.13微米,1.2V)第14頁/共210頁6.ARM11系列(2)ARM11系列微處理器的主要應(yīng)用①消費(fèi)電子、汽車電子②數(shù)據(jù)存儲、圖像處理設(shè)備③網(wǎng)絡(luò)基礎(chǔ)、無線設(shè)備(3)ARM11系列微處理器類型ARM11MPCCore(多核處理器);ARM1136J(F)-S;ARM1156T2(F)-S;ARM1176JZ(F)-S第15頁/共210頁7.Cortex系列(1)ARMCortex-ASeries——高性能應(yīng)用①支持ARM、Thumb和Thumb-2指令集②帶MMU,運(yùn)行Linux、WindowsCE等操作系統(tǒng)③TIOMAP35xx、ST)(2)ARMCortex-RSeries——實(shí)時(shí)性應(yīng)用①Embeddedprocessorsforreal-timesystems②支持ARM、Thumb和Thumb-2指令集③不帶MMU,運(yùn)行Vxworks等實(shí)時(shí)操作系統(tǒng)第16頁/共210頁7.Cortex系列(3)ARMCortex-MSeries——低成本應(yīng)用①只支持Thumb-2指令集②不帶MMU,不加載或者加載簡單嵌入式操作系統(tǒng)③典型芯片TI-StellarisLM3Sxxxx系列NXPLPC1000系列ATMEL-SAM3系列第17頁/共210頁8.SecurCore系列(1)SecurCore系列微處理器專為安全需要而設(shè)計(jì)①具有ARM體系結(jié)構(gòu)的低功耗、高性能的特點(diǎn)②提供了完善的32位RISC技術(shù)的安全解決方案(2)SecurCore系列微處理器在系統(tǒng)安全方面的特點(diǎn)①帶有靈活的保護(hù)單元,以確保操作系統(tǒng)和應(yīng)用數(shù)據(jù)的安全②采用軟處理器內(nèi)核技術(shù),防止外部對其進(jìn)行掃描探測③可集成用戶自己的安全特性和其他協(xié)處理器第18頁/共210頁8.SecurCore系列(3)SecurCore系列微處理器的應(yīng)用領(lǐng)域

①電子商務(wù)②電子銀行③電子政務(wù)④網(wǎng)絡(luò)和認(rèn)證系統(tǒng)(4)SecurCore系列微處理器類型

SecurCoreSC100;SecurCoreSC110;SecurCoreSC200;SecurCoreSC210;SecurCoreSC300第19頁/共210頁3.1.4ARM微處理器的應(yīng)用選型1.ARM微處理器內(nèi)核結(jié)構(gòu)的選擇(1)帶有MMU功能的ARM內(nèi)核ARM720T、ARM92Xt、Cortex-A8

支持WinCE、嵌入式Linux、嵌入式WindowsXp等(2)不帶MMU功能的ARM內(nèi)核ARM7TDMI、Cortex-M3、Cortex-R4支持μCLinux操作系統(tǒng)不支持WinCE、嵌入式Linux等操作系統(tǒng)第20頁/共210頁3.1.4ARM微處理器的應(yīng)用選型2.系統(tǒng)的工作頻率(1)ARM7系列的典型處理速度為0.9MIPS/MHz

系統(tǒng)主時(shí)鐘頻率為20MHz~133MHz(2)ARM9系列的典型處理速度為1.1MIPS/MHz

系統(tǒng)主時(shí)鐘頻率為100MHz~233MHz(3)ARM10系統(tǒng)的主時(shí)鐘頻率高達(dá)400MHz(4)ARM11系統(tǒng)的主時(shí)鐘頻率高達(dá)750MHz,加速度比1.5MIPS/MHz(5)Cortex-M3——1.25MIPS/MHz,頻率高達(dá)100MHz(6)Cortex-R4——1.6MIPS/MHz,頻率高達(dá)400MHz(7)Cortex-A8——2.0MIPS/MHz,頻率高達(dá)1GHz第21頁/共210頁3.芯片內(nèi)存儲器的容量3.1.4ARM微處理器的應(yīng)用選型(1)大多數(shù)的ARM微處理器片內(nèi)存儲器的容量都不太大,需要用戶在設(shè)計(jì)系統(tǒng)時(shí)外擴(kuò)存儲器(2)有部分芯片具有相對較大的片內(nèi)存儲空間第22頁/共210頁4.片內(nèi)外圍電路的選擇(1)幾乎所有的ARM芯片均根據(jù)各自不同的應(yīng)用領(lǐng)域,擴(kuò)展了相關(guān)功能模塊,并集成在芯片中(2)片內(nèi)外圍電路:USB接口、IIS(音頻)接口、LCD控制器、鍵盤接口、RTC(實(shí)時(shí)時(shí)鐘)、ADC和DAC、DSP協(xié)處理器等(3)設(shè)計(jì)者應(yīng)分析系統(tǒng)的需求,盡可能采用片內(nèi)外圍電路完成所需的功能3.1.4ARM微處理器的應(yīng)用選型第23頁/共210頁3.2ARM微處理器體系結(jié)構(gòu)3.2.1ARM微處理器體系結(jié)構(gòu)概述ARM7采用馮·諾依曼體系結(jié)構(gòu)ARM9以后版本都采用哈佛結(jié)構(gòu)ARM體系結(jié)構(gòu)對數(shù)據(jù)類型支持如下:字:字長32位。半字:16位。字節(jié):8位。第24頁/共210頁3.2.1ARM微處理器體系結(jié)構(gòu)概述低地址高地址地址A地址A+1地址A+2地址A+3f6734bcd低地址高地址地址A地址A+1地址A+2地址A+3f6734bcdworda=0xf6

73

4b

cd大端的數(shù)據(jù)存放格式小端的數(shù)據(jù)存放格式第25頁/共210頁ARM體系結(jié)構(gòu)第26頁/共210頁3.2.1ARM微處理器體系結(jié)構(gòu)概述1.ALU邏輯結(jié)構(gòu)ARM的ALU與常用ALU邏輯結(jié)構(gòu)基本相同,由兩個(gè)操作數(shù)鎖存器、加法器、邏輯功能、結(jié)果及零檢測邏輯構(gòu)成。ALU的最小數(shù)據(jù)通路周期包含寄存器讀時(shí)間、移位器延遲、ALU延遲、寄存器寫建立時(shí)間、雙相時(shí)鐘間非重疊時(shí)間等幾部分。2.桶形移位寄存器ARM采用了32×32位桶形移位寄存器,左移/右移n位、環(huán)移n位和算術(shù)右移n位等都可以一次完成,可以有效的減少移位的延遲時(shí)間。在桶形移位寄存器中,所有的輸入端通過交叉開關(guān)與所有的輸出端相連。交叉開關(guān)采用NMOS晶體管來實(shí)現(xiàn)。第27頁/共210頁A操作數(shù)鎖存XOR門B操作數(shù)鎖存XOR門邏輯功能運(yùn)算器結(jié)果多路器零檢測加法器反相A功能邏輯/算術(shù)結(jié)果ZNC輸入CV反相B溢出符號位為零標(biāo)志進(jìn)位位1.ALU邏輯結(jié)構(gòu)第28頁/共210頁2.桶形移位寄存器第29頁/共210頁3.2.1ARM微處理器體系結(jié)構(gòu)概述3.高速乘法器ARM為了提高運(yùn)算速度,采用兩位乘法的方法,2位乘法可根據(jù)乘數(shù)的2位來實(shí)現(xiàn)“加-移位”運(yùn)算。乘數(shù)An-1An進(jìn)位Cin操作000S->2,Cout=“0”010S+B->2,Cout=“0”100S+2×B->2,Cout=“0”110S-B->2,Cout=“1”001S+B->2,Cout=“0”011S+2×B->2,Cout=“0”101S-B->2,Cout=“1”111S->2,Cout=“1”

兩位乘法器是指把乘數(shù)每兩位分成一段,根據(jù)該段值,通過硬件實(shí)現(xiàn)被乘數(shù)與該段值的相乘。規(guī)則如下:

被乘數(shù)(B)10110110

乘數(shù)10110101第30頁/共210頁4.浮點(diǎn)部件3.2.1ARM微處理器體系結(jié)構(gòu)概述

在ARM體系結(jié)構(gòu)中,浮點(diǎn)部件作為選件可根據(jù)需要選用,F(xiàn)PA10浮點(diǎn)加速器以協(xié)處理器方式與ARM相連,并通過協(xié)處理器指令的解釋來執(zhí)行。浮點(diǎn)的Load/Store指令使用頻度要達(dá)到67%,故FPA10內(nèi)部也采用Load/Store結(jié)構(gòu),有8個(gè)80位浮點(diǎn)寄存器組,指令執(zhí)行也采用流水線結(jié)構(gòu)。第31頁/共210頁3.2.1ARM微處理器體系結(jié)構(gòu)概述5.控制器ARM的控制器采用硬接線的可編程邏輯陣列PLA,其輸入端有14根、輸出端有40根,分散控制Load/Store多路、乘法器、協(xié)處理器以及地址、寄存器ALU和移位器。6.寄存器ARM內(nèi)含37個(gè)寄存器,包括31個(gè)通用32位寄存器和6個(gè)狀態(tài)寄存器。第32頁/共210頁3.2.2ARM流水線

預(yù)?。‵etch)譯碼(Decode)執(zhí)行(Execute)預(yù)?。‵etch)譯碼(Decode)執(zhí)行(Execute)訪存(Memory)寫入(Write)預(yù)?。‵etch)譯碼(Decode)發(fā)送(Issue)預(yù)?。‵etch)預(yù)取(Fetch)執(zhí)行(Execute)訪存(Memory)寫入(Write)譯碼(Decode)發(fā)送(Issue)執(zhí)行(Execute)轉(zhuǎn)換(Snny)訪存(Memory)寫入(Write)ARM7ARM9ARM10ARM11

流水線(pipeline)是指在程序執(zhí)行時(shí)多條指令重疊進(jìn)行操作的一種準(zhǔn)并行處理實(shí)現(xiàn)技術(shù)。流水線技術(shù)通過多個(gè)功能部件并行工作來縮短程序執(zhí)行時(shí)間,提高處理器核的效率和吞吐率,從而成為微處理器設(shè)計(jì)中最為重要的技術(shù)之一。第33頁/共210頁1.ARM流水線的設(shè)計(jì)1)縮短程序執(zhí)行時(shí)間3.2.2ARM流水線

(1)提高時(shí)鐘頻率fclk(2)減少每條指令的平均時(shí)鐘周期數(shù)CPI第34頁/共210頁2)流水線設(shè)計(jì)中的結(jié)構(gòu)、數(shù)據(jù)和控制相關(guān)1.ARM流水線的設(shè)計(jì)(1)流水線的結(jié)構(gòu)相關(guān)①如果某些指令在流水線中重疊執(zhí)行時(shí),產(chǎn)生資源沖突,則稱該流水線有結(jié)構(gòu)相關(guān)。②解決結(jié)構(gòu)相關(guān)的基本方法:資源充分重復(fù)設(shè)置。特殊的,對存儲器爭用沖突,有如下解決方法:

如果指令和數(shù)據(jù)放在同一個(gè)存儲器,可使用雙端口存儲器,其中一個(gè)端口存取數(shù)據(jù),另一個(gè)端口取指令。設(shè)置兩個(gè)存儲器,其中一個(gè)作為數(shù)據(jù)存儲器,另一個(gè)作為指令存儲器。第35頁/共210頁(2)流水線的數(shù)據(jù)相關(guān)2)流水線設(shè)計(jì)中的結(jié)構(gòu)、數(shù)據(jù)和控制相關(guān)1.ARM流水線的設(shè)計(jì)①同時(shí)重疊執(zhí)行的幾條指令中,一條指令依賴于前面指令執(zhí)行結(jié)果數(shù)據(jù),但是又得不到時(shí)發(fā)生的相關(guān)。②三種數(shù)據(jù)相關(guān):寫后讀相關(guān)、寫后寫相關(guān)、讀后寫相關(guān)③ARM解決數(shù)據(jù)相關(guān)措施定向(旁路)技術(shù)

編譯器調(diào)度方法處理數(shù)據(jù)相關(guān)(例)第36頁/共210頁例如:有下面連續(xù)的兩個(gè)操作。a=b+c;d=e-f;指令調(diào)度前后代碼對比如下(左邊:調(diào)度前;右邊:調(diào)度后)1.ARM流水線的設(shè)計(jì)第37頁/共210頁(3)流水線的控制相關(guān)2)流水線設(shè)計(jì)中的結(jié)構(gòu)、數(shù)據(jù)和控制相關(guān)1.ARM流水線的設(shè)計(jì)①指流水線中的分支指令或者其它需要改寫PC的指令造成的相關(guān)②解決措施:引入延遲分支機(jī)制。主要思想是在控制相關(guān)暫停周期內(nèi)執(zhí)行與分支指令無關(guān)的指令,從而掩蓋該暫停周期。引入分支預(yù)測技術(shù)。利用局部性原理,根據(jù)分支指令執(zhí)行結(jié)果的統(tǒng)計(jì)信息預(yù)測下次分支轉(zhuǎn)移是否成功。第38頁/共210頁2.ARM的3級流水線3.2.2ARM流水線

第39頁/共210頁3.2.2ARM流水線

3.ARM的5級流水線第40頁/共210頁4.ARM的6級、8級流水線3.2.2ARM流水線

第41頁/共210頁3.2.3ARM微處理器工作狀態(tài)

1.ARM微處理器的兩種工作狀態(tài)

處理器執(zhí)行32位的ARM指令

ARM指令要求字對齊進(jìn)入ARM狀態(tài)后四個(gè)字節(jié)四個(gè)字節(jié)的取指令(2)Thumb狀態(tài)(1)ARM狀態(tài)

處理器執(zhí)行16位的Thumb指令

Thumb指令要求半字對齊進(jìn)入Thumb狀態(tài)后兩個(gè)字節(jié)兩個(gè)字節(jié)的取指令第42頁/共210頁3.2.3ARM微處理器工作狀態(tài)

2.ARM微處理器工作狀態(tài)切換1)進(jìn)入Thumb狀態(tài)

(1)執(zhí)行BX指令BX:帶狀態(tài)切換的跳轉(zhuǎn)指令當(dāng)操作數(shù)寄存器的最低位[0]為1時(shí),可以使微處理器從ARM狀態(tài)切換到Thumb狀態(tài)BXR0;R0的最低位[0]為1(2)處理器工作在Thumb狀態(tài),如果發(fā)生異常并進(jìn)入異常處理子程序,則異常處理完畢返回時(shí),自動(dòng)從ARM狀態(tài)切換到Thumb狀態(tài)第43頁/共210頁3.2.3ARM微處理器工作狀態(tài)

2.ARM微處理器工作狀態(tài)切換2)進(jìn)入ARM狀態(tài)

(1)執(zhí)行BX指令BX:帶狀態(tài)切換的跳轉(zhuǎn)指令當(dāng)操作數(shù)寄存器的最低位[0]為0時(shí),可以使微處理器從Thumb狀態(tài)切換到ARM狀態(tài)BXR0;R0的最低位[0]為0(2)處理器工作在Thumb狀態(tài),如果發(fā)生異常并進(jìn)入異常處理子程序,則進(jìn)入時(shí)處理器自動(dòng)Thumb狀態(tài)切換到ARM狀態(tài)第44頁/共210頁舉例:3.2.3ARM微處理器工作狀態(tài)

2.ARM微處理器工作狀態(tài)切換BLabelCMPR1,#0;#表明立即數(shù),R1與立即數(shù)0比較

BEQLabelADRLR0,ThumbFun+1BXR0;發(fā)指令跳轉(zhuǎn)到R0,并進(jìn)入Thumb子程序

BLXLabel第45頁/共210頁;從Arm狀態(tài)切換到Thumb狀態(tài)

LDRR0,=Lable+1BXR0;從Thumb狀態(tài)切換到ARM狀態(tài)

LDRR0,=LableBXR0地址最低位為1,表示切換到Thumb狀態(tài)地址最低位為0,表示切換到ARM狀態(tài)跳轉(zhuǎn)地址標(biāo)號舉例:3.2.3ARM微處理器工作狀態(tài)

2.ARM微處理器工作狀態(tài)切換第46頁/共210頁3.2.4ARM微處理器運(yùn)行模式

1.支持7種運(yùn)行模式(1)用戶模式(USR)(2)系統(tǒng)模式(SYS)ARM微處理器正常的程序執(zhí)行狀態(tài)運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)(3)外部中斷模式(IRQ)用于通用的中斷處理(4)快速中斷模式(FIQ)用于高速數(shù)據(jù)傳輸或通道管理第47頁/共210頁1.支持7種運(yùn)行模式(5)管理模式(SVC)

操作系統(tǒng)使用的保護(hù)模式

進(jìn)入管理模式的兩種情況:第一:ARM處理復(fù)位之后,缺省工作模式就是管理模式第二:軟中斷調(diào)用(SWI,SoftwareInterupt)(6)數(shù)據(jù)訪問終止模式(ABT)當(dāng)數(shù)據(jù)或指令預(yù)取終止時(shí)進(jìn)入該模式,可用于虛擬存儲及存儲保護(hù)

程序跑飛:指系統(tǒng)受到某種干擾后,程序計(jì)數(shù)器PC的值偏離了給定的唯一變化歷程,導(dǎo)致程序運(yùn)行偏離正常的運(yùn)行路徑。第48頁/共210頁1.支持7種運(yùn)行模式(7)未定義指令中止模式(UND)

用于支持協(xié)處理器的軟件仿真

當(dāng)未定義指令執(zhí)行時(shí)進(jìn)入該模式2.特權(quán)模式3.異常模式

除去用戶模式和系統(tǒng)模式外的5種又稱之為異常模式常用于處理中斷或異常,及需要訪問受保護(hù)的系統(tǒng)資源等情況

在用戶模式下,某些被保護(hù)的系統(tǒng)資源是不能被訪問的

除了用戶模式外,其余6種模式稱之為特權(quán)模式第49頁/共210頁4.工作模式的改變(1)通過軟件改變系統(tǒng)調(diào)用SWI(2)通過外部中斷或異常處理改變(3)工作模式的改變舉例①SWI軟件中斷指令SWI0x0;調(diào)用0號軟中斷SWI0x12;調(diào)用12號軟中斷

外部中斷:IRQ、FIQ,來自于中斷控制器異常處理:來自于CPU內(nèi)部第50頁/共210頁②進(jìn)入中斷模式__IrqvoidHandlerTIMER5(void){timerval++;//當(dāng)前時(shí)刻遞增

pIC->I_ISPC=INT_TIMER5;//消除中斷請求位

}4.工作模式的改變(3)工作模式的改變舉例第51頁/共210頁3.2.5ARM的寄存器組織37個(gè)32位寄存器,其中有31個(gè)通用寄存器、6個(gè)狀態(tài)寄存器1.ARM狀態(tài)下的寄存器組織(1)通用寄存器包括R0~R15①未分組寄存器R0~R7在所有的工作模式下,每個(gè)未分組寄存器都指向?qū)?yīng)的一個(gè)物理寄存器在中斷或者異常處理進(jìn)行工作模式轉(zhuǎn)換時(shí),由于不同的處理器工作模式均使用相同的物理寄存器,可能會造成寄存器中數(shù)據(jù)的破壞。第52頁/共210頁1.ARM狀態(tài)下的寄存器組織②分組寄存器R8~R14(1)通用寄存器包括R0~R15Ⅰ、R8~R12

每個(gè)寄存器對應(yīng)2個(gè)不同的物理寄存器

當(dāng)使用FIQ模式時(shí),訪問R8_fiq~R12_fiq

當(dāng)使用其他模式時(shí),訪問R8_usr~R12_usrⅡ、R13~R14每個(gè)寄存器對應(yīng)6個(gè)不同的物理寄存器,其中一個(gè)寄存器是用戶模式與系統(tǒng)模式共用,另外5個(gè)物理寄存器對應(yīng)于其他5種不同的工作模式第53頁/共210頁不同物理寄存器的區(qū)分1.ARM狀態(tài)下的寄存器組織R13_<mode>R14_<mode>mode為:usr、fiq、irq、svc、abt、und例如:

R13_usr、R13_fiq、R13_irq

R14_svc、R14_abt、R14_und第54頁/共210頁R13寄存器1.ARM狀態(tài)下的寄存器組織常用作堆棧指針SPR14寄存器也稱為鏈接寄存器LR(LinkRegister)當(dāng)執(zhí)行BL子程序調(diào)用指令時(shí),R14中得到R15(PC)的備份BLLabel:下一條指令地址—>LR.Label—>PC當(dāng)發(fā)生中斷或者異常時(shí),對應(yīng)的分組寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用來保存R15的返回值第55頁/共210頁R14寄存器常用情形1.ARM狀態(tài)下的寄存器組織常用用法(子程序返回)

MOVPC,LR

BXLR在子程序入口處使用以下指令將R14存入堆棧STMFDSP!,{<Regs>,LR}LDMFDSP!,{<Regs>,LR}第56頁/共210頁③R15(PC指針)1.ARM狀態(tài)下的寄存器組織R15寄存器用作程序計(jì)數(shù)器(PC)

在ARM狀態(tài)下,位[1:0]為0;位[31:2]用于保存PCThumb狀態(tài)下,位[0]為0,位[31:1]用于保存PC由于ARM體系結(jié)構(gòu)采用了多級流水線結(jié)構(gòu),對于ARM指令集而言,PC總是指向當(dāng)前執(zhí)行指令的下兩條指令的地址,即PC的值為當(dāng)前執(zhí)行指令的地址值加8個(gè)字節(jié)LDRR0,PC??????PCPC-4PC-8正在執(zhí)行正在譯碼正在取指流水線狀態(tài)地址程序代碼第57頁/共210頁1.ARM狀態(tài)下的寄存器組織(2)CPSR寄存器(CurrentProgramStatusRegister)①CPSR可在任何工作模式下被訪問,包括條件標(biāo)志位、中斷禁止位、當(dāng)前處理器模式標(biāo)志位,以及其它一些相關(guān)的控制和狀態(tài)位②異常模式下有一個(gè)專用的物理狀態(tài)寄存器,稱為SPSR(SavedProgramStatusRegister)當(dāng)異常發(fā)生時(shí),SPSR用于保存CPSR的當(dāng)前值,從異常退出時(shí)則可由SPSR來恢復(fù)CPSR

用戶模式和系統(tǒng)模式?jīng)]有SPSR第58頁/共210頁1.ARM狀態(tài)下的寄存器組織第59頁/共210頁2.Thumb狀態(tài)下的寄存器組織Thumb狀態(tài)下的寄存器集是ARM狀態(tài)下寄存器集的一個(gè)子集

程序可以直接訪問8個(gè)通用寄存器(R7~R0)程序計(jì)數(shù)器(PC)堆棧指針(SP)鏈接寄存器(LR)當(dāng)前程序狀態(tài)寄存器(CPSR)

每一種異常模式下都有一組SP、LR和SPSR第60頁/共210頁2.Thumb狀態(tài)下的寄存器組織第61頁/共210頁3.2.5ARM的寄存器組織ARM狀態(tài)寄存器組織與Thumb狀態(tài)寄存器組織第62頁/共210頁Thumb狀態(tài)寄存器在Arm狀態(tài)寄存器上的映射R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R0

堆棧指針(R13)

連接寄存器(R14)

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

低寄存器高寄存器第63頁/共210頁3.程序狀態(tài)寄存器

(1)程序狀態(tài)寄存器的構(gòu)成一個(gè)當(dāng)前程序狀態(tài)寄存器(CPSR)五個(gè)備份程序狀態(tài)寄存器(SPSR)(2)程序狀態(tài)寄存器的功能①保存ALU中的當(dāng)前操作信息②控制允許和禁止中斷③設(shè)置處理器的工作模式第64頁/共210頁3.程序狀態(tài)寄存器

第65頁/共210頁

(3)條件碼標(biāo)志3.程序狀態(tài)寄存器

①N、Z、C、V均為條件碼標(biāo)志位②

在ARM狀態(tài)下,絕大多數(shù)的指令都是有條件執(zhí)行的③

在Thumb狀態(tài)下,僅有分支指令B是有條件執(zhí)行的第66頁/共210頁實(shí)例:C代碼if(a>b)a++;elseb++;(都是無符號數(shù))Thumb代碼:CMPR0,R1BHIA_ADD;BADDR1,R1,#1BOVERA_ADDADDR0,R0,#1OVER……ARM代碼:CMPR0,R1ADDHIR0,R0,#1ADDLSR1,R1,#13.程序狀態(tài)寄存器

第67頁/共210頁④標(biāo)志位含義標(biāo)志位N

當(dāng)用兩個(gè)補(bǔ)碼表示的帶符號數(shù)進(jìn)行運(yùn)算時(shí)

N=1表示運(yùn)算結(jié)果為負(fù)數(shù),N=0表示運(yùn)算結(jié)果為正數(shù)或零

標(biāo)志位ZZ=1表示運(yùn)算結(jié)果為零;Z=0表示運(yùn)算結(jié)果為非零3.程序狀態(tài)寄存器

第68頁/共210頁3.程序狀態(tài)寄存器

標(biāo)志位C

加法運(yùn)算(包括比較指令CMN)當(dāng)運(yùn)算結(jié)果產(chǎn)生了進(jìn)位時(shí),C=1,否則C=0

減法運(yùn)算(包括比較指令CMP)當(dāng)運(yùn)算結(jié)果產(chǎn)生了借位時(shí),C=1,否則C=0

包含移位操作的非加/減運(yùn)算指令,C為移出值的最后一位對于其他的非加/減運(yùn)算指令,C的值通常不改變標(biāo)志位V

對于加/減法運(yùn)算指令,當(dāng)操作數(shù)和運(yùn)算結(jié)果為補(bǔ)碼表示的帶符號數(shù)時(shí),V=1表示符號位溢出對于其他的非加/減運(yùn)算指令,V的值通常不改變第69頁/共210頁3.程序狀態(tài)寄存器

第70頁/共210頁(4)控制位3.程序狀態(tài)寄存器

①中斷禁止位I和FI=1禁止IRQ中斷:I=0允許IRQ中斷

F=1禁止FIQ中斷:F=0允許FIQ中斷②運(yùn)行狀態(tài)控制位T

對于ARMv5及以上的T系列處理器,當(dāng)該位為1時(shí),程序運(yùn)行于Thumb狀態(tài),否則運(yùn)行于ARM狀態(tài)對于ARMv5及以上的非T系列處理器,當(dāng)該位為1時(shí),執(zhí)行下一條指令以引起為定義指令異常;當(dāng)該位為0時(shí),表示運(yùn)行于ARM狀態(tài)第71頁/共210頁3.程序狀態(tài)寄存器

③運(yùn)行模式位M[4:0]M[4:0]處理器工作模式可訪問的寄存器0b10000用戶模式PC,CPSR,R14~R00b10001FIQ模式PC,R7~R0,CPSR,SPSR_fiq,R14_fiq~R8_fiq0b10010IRQ模式PC,R12~R0,CPSR,SPSR_irq,R14_irq,R13_irq0b10011管理模式PC,R12~R0,CPSR,SPSR_svc,R14_svc,R13_svc0b10111中止模式PC,R12~R0,CPSR,SPSR_abt,R14_abt,R13_abt0b11011未定義模式PC,R12~R0,CPSR,SPSR_und,R14_und,R13_und0b11111系統(tǒng)模式PC,R14~R0,CPSR(ARMv4及以上版本)表3-4運(yùn)行模式位M[4:0]的具體含義第72頁/共210頁3.程序狀態(tài)寄存器

(5)保留位PSR中沒有使用的位,當(dāng)改變PSR匯總的條件碼標(biāo)志位或者控制位時(shí),保留為不會被改變,在程序中也不能使用保留位來存儲數(shù)據(jù),保留位將用于ARM版本的擴(kuò)展。第73頁/共210頁3.2.6異常當(dāng)正常的程序執(zhí)行流程發(fā)生暫時(shí)的停止時(shí),稱之為異常處理器允許多個(gè)異常同時(shí)發(fā)生,它們將會按固定的優(yōu)先級進(jìn)行處理

中斷優(yōu)先級

中斷嵌套在處理異常之前,當(dāng)前處理器的狀態(tài)必須保留,這樣當(dāng)異常處理完成之后,當(dāng)前程序可以繼續(xù)執(zhí)行第74頁/共210頁1.異常類型3.2.6異常異常類型具體含義復(fù)位當(dāng)處理器的復(fù)位電平有效時(shí),產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位異常處理程序處執(zhí)行

未定義指令當(dāng)ARM處理器或協(xié)處理器遇到不能處理的指令時(shí),產(chǎn)生未定義指令異常??墒褂迷摦惓C(jī)制進(jìn)行軟件仿真軟件中斷該異常由執(zhí)行SWI指令產(chǎn)生,可使用該異常機(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用,用于用戶模式下的程序調(diào)用特權(quán)操作指令。指令預(yù)取中止若處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問,存儲器會向處理器發(fā)出存儲器中止信號,但當(dāng)預(yù)取的指令被執(zhí)行時(shí),才會產(chǎn)生指令預(yù)取中止異常。數(shù)據(jù)中止若處理器數(shù)據(jù)訪問指令的地址不存在,或該地址不允許當(dāng)前指令訪問時(shí),產(chǎn)生數(shù)據(jù)中止異常。IRQ(外部中斷請求)當(dāng)處理器的外部中斷請求引腳有效,且CPSR中的I位為0時(shí),產(chǎn)生IRQ異常。系統(tǒng)的外設(shè)可通過該異常請求中斷服務(wù)。FIQ(快速中斷請求)當(dāng)處理器的快速中斷請求引腳有效,且CPSR中的F位為0時(shí),產(chǎn)生FIQ異常。表3-5ARM體系結(jié)構(gòu)支持的異常第75頁/共210頁3.2.6異常2.對異常的響應(yīng)①將下一條指令的地址存入相應(yīng)連接寄存器LR,以便程序在處理異常返回時(shí)能從正確的位置重新開始執(zhí)行。若異常是從ARM狀態(tài)進(jìn)入,LR寄存器中保存的是下一條指令的地址(當(dāng)前PC+4或PC+8,與異常的類型有關(guān));若異常是從Thumb狀態(tài)進(jìn)入,則在LR寄存器中保存當(dāng)前PC的偏移量。②將CPSR狀態(tài)傳送到相應(yīng)的SPSR中。③根據(jù)異常類型,強(qiáng)制設(shè)置CPSR的運(yùn)行模式位。④強(qiáng)制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,跳轉(zhuǎn)到相應(yīng)的異常處理程序。第76頁/共210頁ARM處理器對異常的響應(yīng)過程用偽碼描述如下SPSR_<Exception_Mode>=CPSRCPSR[4:0]=ExceptionModeNumber;設(shè)置異常模式CPSR[5]=0;切換到ARM工作狀態(tài)If<Exception_Mode>==ResetorFIQthen

CPSR[6]=1;禁止新的FIQ異常CPSR[7]=1;禁止新的IRQ異常R14_<Exception_Mode>=ReturnLinkPC=ExceptionVectorAddres3.2.6異常第77頁/共210頁3.從異常返回3.2.6異常①將連接寄存器LR的值減去相應(yīng)的偏移量后送到PC中。②將SPSR內(nèi)容送回CPSR中。③若在進(jìn)入異常處理時(shí)設(shè)置了中斷禁止位,要在此清除。第78頁/共210頁4.各類異常的具體描述3.2.6異常(1)復(fù)位的響應(yīng)過程SPSR_svc=CPSRCPSR[4:0]=0b10011CPSR[5]=0;切換到ARM工作狀態(tài)CPSR[6]=1;禁止新的FIQ異常CPSR[7]=1;禁止新的IRQ異常R14_svc=ReturnLinkPC=0x00000000第79頁/共210頁(2)未定義指令異常4.各類異常的具體描述①當(dāng)ARM處理器遇到不能處理的指令時(shí),會產(chǎn)生未定義指令異常②采用這種機(jī)制,可以通過軟件仿真擴(kuò)展ARM或者Thumb指令集③在未定義指令處理程序中執(zhí)行以下指令返回

MOVSPC,R14_und恢復(fù)PC和CPSR的值,并返回到未定義指令后的下一條指令第80頁/共210頁④未定義指令異常的響應(yīng)過程(2)未定義指令異常4.各類異常的具體描述SPSR_und=CPSRCPSR[4:0]=0b11011CPSR[5]=0//CPSR[6]保持不變CPSR[7]=1;禁止新的IRQ異常R14_und=ReturnLinkPC=0x00000004第81頁/共210頁(3)軟件中斷4.各類異常的具體描述①軟件中斷指令(SWI)用于進(jìn)入管理模式,常用于請求執(zhí)行特定的管理功能②在軟件中斷處理程序中執(zhí)行以下指令返回

MOVSPC,R14_svc恢復(fù)PC(從R14_svc)和CPSR(從SPSR_svc)的值,并返回到SWI的下一條指令第82頁/共210頁③SWI的響應(yīng)過程:SPSR_svc=CPSRCPSR[4:0]=0b10011CPSR[5]=0;切換到ARM工作狀態(tài)//CPSR[6]保持不變CPSR[7]=1;禁止新的IRQ異常R14_svc=ReturnLinkPC=0x000000084.各類異常的具體描述第83頁/共210頁4.各類異常的具體描述(4)Abort(中止)異常①產(chǎn)生中止異常意味著對存儲器的訪問失敗②中止異常包括兩種類型③當(dāng)確定中止原因后,Abort處理程序執(zhí)行以下指令返回SUBSPC,R14_abt,#4;指令預(yù)取中止

SUBSPC,R14_abt,#8;數(shù)據(jù)中止恢復(fù)PC(從R14_abt)和CPSR(從SPSR_abt)的值,并重新執(zhí)行產(chǎn)生中止的指令指令預(yù)取中止:發(fā)生在指令預(yù)取時(shí)數(shù)據(jù)中止:發(fā)生在數(shù)據(jù)訪問時(shí)第84頁/共210頁4.各類異常的具體描述④中止異常的響應(yīng)過程:SPSR_abt=CPSRCPSR[4:0]=0b10111CPSR[5]=0;切換到ARM工作狀態(tài)

//CPSR[6]保持不變

CPSR[7]=1;禁止新的IRQ異常

R14_abt=ReturnLinkPC=0x0000000c/0x00000010第85頁/共210頁4.各類異常的具體描述(5)IRQ異常①IRQ異常屬于正常的中斷請求,IRQ優(yōu)先級低于FIQ若CPSR的I位置1,則禁止IQR中斷,若CPSR的I位清零,處理器會在指令執(zhí)行完之前檢查IRQ的輸入注意只有在特權(quán)模式下才能改變I位的狀態(tài)②IRQ處理程序執(zhí)行以下指令返回SUBSPC,R14_irq,#4該指令將寄存器R14_irq的值減去4后,復(fù)制到程序計(jì)數(shù)器PC中,同時(shí)將SPSR_irq寄存器的內(nèi)容復(fù)制到CPSR中,并返回到引起中斷的下一條指令第86頁/共210頁4.各類異常的具體描述③IRQ異常的響應(yīng)過程:SPSR_irq=CPSRCPSR[4:0]=0b10010CPSR[5]=0;切換到ARM工作狀態(tài)//CPSR[6]保持不變CPSR[7]=1;禁止新的IRQ異常

R14_irq=ReturnLinkPC=0x00000018第87頁/共210頁4.各類異常的具體描述(6)FIQ異常①FIQ異常是為了支持?jǐn)?shù)據(jù)傳輸或者通道處理而設(shè)計(jì)的若將CPSR的F位置1,則禁止FIQ中斷;若將CPSR的F位清零,處理器會在指令執(zhí)行時(shí)檢查FIQ的輸入注意只有在特權(quán)模式下才能改變F位的狀態(tài)②FIQ處理程序執(zhí)行以下指令返回SUBSPC,R14_fiq,#4將寄存器R14_fiq的值減去4后,復(fù)制到程序計(jì)數(shù)器PC中,同時(shí)將SPSR_fiq寄存器的內(nèi)容復(fù)制到CPSR中,并返回到引起中斷的下一條指令第88頁/共210頁4.各類異常的具體描述SPSR_fiq=CPSRCPSR[4:0]=0b10001CPSR[5]=0;切換到ARM工作狀態(tài)CPSR[6]=1;禁止新的FIQ異常CPSR[7]=1;禁止新的IRQ異常

R14_fiq=ReturnLinkPC=0x0000001C③FIQ異常的響應(yīng)過程:第89頁/共210頁4.各類異常的具體描述(7)異常進(jìn)入/退出返回指令R14_x先前的值A(chǔ)RMR14_xThumbR14_xBLMOVPC,R14PC+4PC+2未定義指令MOVSPC,R14_undPC+4PC+2SWIMOVSPC,R14_svcPC+4PC+2指令預(yù)取SUBSPC,R14_abt,#4PC+4PC+4數(shù)據(jù)預(yù)取SUBSPC,R14_abt,#8PC+8PC+8IRQSUBSPC,R14_irq,#4PC+4PC+4FIQSUBSPC,R14_fiq,#4PC+4PC+4復(fù)位N/A--表3-6異常進(jìn)入/退出第90頁/共210頁3.2.6異常5.異常向量表表3-7異常向量表第91頁/共210頁 CODE32 AREAvectors,CODE,READONLY;/*異常向量表*/ResetLDRPC,ResetAddrLDRPC,UndefinedAddrLDRPC,SWI_AddrLDRPC,PrefetchAddrLDRPC,DataAbortAddrDCD0LDRPC,IRQ_AddrLDRPC,FIQ_Addr3.2.6異常第92頁/共210頁6.異常優(yōu)先級優(yōu)先級異常1復(fù)位2數(shù)據(jù)中止3FIQ4IRQ5預(yù)取指令中止6未定義指令、SWI3.2.6異常表3-8異常優(yōu)先級第93頁/共210頁7.應(yīng)用程序中的異常處理3.2.6異常①應(yīng)用程序首先要進(jìn)行異常處理②采用的方式在異常向量表中的特定位置放置一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到異常處理程序。③異常處理過程當(dāng)發(fā)生異常時(shí),程序計(jì)數(shù)器PC會被強(qiáng)制(自動(dòng))設(shè)置為對應(yīng)的異常向量,從而(自動(dòng))跳轉(zhuǎn)到異常處理程序,當(dāng)異常處理完成以后,返回到主程序繼續(xù)執(zhí)行。第94頁/共210頁異常類型異常進(jìn)入模式地址(異常向量)優(yōu)先級復(fù)位復(fù)位管理模式0x0000,00001(最高)未定義指令未定義指令未定義模式0x0000,00046(最低)軟件中斷軟件中斷管理模式0x0000,00086(最低)指令預(yù)取中止中止(預(yù)取指令)中止模式0x0000,000C5數(shù)據(jù)中止中止(數(shù)據(jù))中止模式0x0000,00102IRQ(外部中斷請求)IRQIRQ0x0000,00184FIQ(快速中斷請求)FIQFIQ0x0000,001C33.2.6異常8.各類異??偨Y(jié)第95頁/共210頁程序段說明:以下函數(shù)為各異常模式服務(wù)子程序。設(shè)成死循環(huán)是為調(diào)試用,一旦發(fā)生此類異常,程序便跳入異常模式服務(wù)子程序,終止程序運(yùn)行voidHaltUndef(void)//未定義——程序跑飛{Uart_Printf(0,”theprogramishaltUndefed”);While(1);}voidHaltSwi(void)//軟中斷{Uart_Printf(0,”theprogramishaltSWI”);While(1);}3.2.6異常第96頁/共210頁voidHaltPabort(void)//預(yù)取指令中止{Uart_Printf(0,”theprogramishaltPaborted”);While(1);}voidHaltDabort(void)//數(shù)據(jù)中止{Uart_Printf(0,”theprogramishaltdaborted”);While(1);}voidHaltFIQ(void)//快速中斷{Uart_Printf(0,”theprogramishaltFIQ”);While(1);}3.2.6異常第97頁/共210頁;異常向量表VectorsLDRPC,HandleReset

LDRPC,HaltUndefLDRPC,HaltSwiLDRPC,HaltPabortLDRPC,HaltDabortNOPLDRPC,HandleIRQLDRPC,HaltFIQ3.2.6異常第98頁/共210頁3.3ARM處理器的指令系統(tǒng)ARM微處理器的指令集是Load/Store型3.3.1ARM指令系統(tǒng)概述1.ARM指令集可以分為6大類(1)跳轉(zhuǎn)指令(2)數(shù)據(jù)處理指令(3)程序狀態(tài)寄存器處理指令(4)加載/存儲指令(數(shù)據(jù)傳送指令)(5)協(xié)處理器指令(6)異常產(chǎn)生指令第99頁/共210頁3.3.1ARM指令系統(tǒng)概述2.指令格式<opcode>{<cond>}{S}<Rd>,<Rn>{,operand2}opcode:指令助記符,如ADD,LDR,STRcond:執(zhí)行條件,如NE,EQS:是否影響CPSR的值Rd:目標(biāo)寄存器Rn:第一操作數(shù)寄存器operand2:第二操作數(shù)第100頁/共210頁3.3.1ARM指令系統(tǒng)概述3.指令助記符表3-9ARM指令及功能描述助記符指令功能描述ADC帶進(jìn)位加法指令A(yù)DD加法指令A(yù)ND邏輯與指令B跳轉(zhuǎn)指令BIC位清零指令BL帶返回的跳轉(zhuǎn)指令BLX帶返回和狀態(tài)切換的跳轉(zhuǎn)指令BX帶狀態(tài)切換的跳轉(zhuǎn)指令CDP協(xié)處理器數(shù)據(jù)操作指令CMN比較反值指令CMP比較指令EOR異或指令第101頁/共210頁LDC存儲器到協(xié)處理器的數(shù)據(jù)傳輸指令LDM加載多個(gè)寄存器指令LDR存儲器到寄存器的數(shù)據(jù)傳輸指令MCR從ARM寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳輸指令MLA乘加運(yùn)算指令MOV數(shù)據(jù)傳送指令MRC從協(xié)處理器寄存器到ARM寄存器的數(shù)據(jù)傳輸指令MRS傳送CPSR或SPSR的內(nèi)容到通用寄存器指令MSR傳送通用寄存器到CPSR或SPSR的指令MUL32位乘法指令MLA32位乘加指令MVN數(shù)據(jù)取反傳送指令ORR邏輯或指令3.指令助記符表3-9ARM指令及功能描述(續(xù)表)第102頁/共210頁RSB逆向減法指令RSC帶借位的逆向減法指令SBC帶借位減法指令STC協(xié)處理器寄存器寫入存儲器指令STM批量內(nèi)存字寫入指令STR寄存器到存儲器的數(shù)據(jù)傳輸指令SUB減法指令SWI軟件中斷指令SWP交換指令TEQ相等測試指令TST位測試指令3.指令助記符表3-9ARM指令及功能描述(續(xù)表)第103頁/共210頁3.3.2ARM指令的條件域表3-10ARM指令條件碼第104頁/共210頁3.3.3ARM指令的尋址方式處理器根據(jù)指令中給出的地址信息來尋找物理地址的方式。1.立即尋址

也稱為立即數(shù)尋址,是一種特殊的尋址方式,操作數(shù)本身就在指令中給出,只要取出指令也就去到了操作數(shù)。例如:ADDR0,R0,#1;R0←R0+1ADDR0,R0,#0x3f;R0←R0+0x3f

以上兩條指令中,第二個(gè)源操作數(shù)為立即數(shù),要求以#為前綴,以十六進(jìn)制表示的立即數(shù),還要求在#后加上“0x”或“&”

立即數(shù)一般為8位第105頁/共210頁2.寄存器尋址利用寄存器中的數(shù)值作為操作數(shù)例如:ADDR0,R1,R2;R0←R1+R2

該指令的執(zhí)行效果是將寄存器R1和R2的內(nèi)容相加,其結(jié)果放在寄存器R0中3.3.3ARM指令的尋址方式第106頁/共210頁3.寄存器間接尋址

以寄存器中的值作為操作數(shù)的地址,而操作數(shù)本身存放在存儲器中例如:ADDR0,R1,[R2];R0←R1+[R2]LDRR0,[R1];R0←[R1]STRR0,[R1];[R1]←R0第一條指令中,以寄存器R2的值作為操作數(shù)的地址,在存儲器中取得一個(gè)操作數(shù)后與R1相加,結(jié)果存入寄存器R0中LDR/STR:左寄存器,右存儲器3.3.3ARM指令的尋址方式第107頁/共210頁4.基址尋址

將寄存器的內(nèi)容與指令中給出的地址加偏移量相加,從而得到一個(gè)操作數(shù)的有效地址?;穼ぶ贩绞匠S糜谠L問某基地址附近的單元采用基址尋址方式的指令常見有以下幾種形式

LDRR0,[R1,#4];R0←[R1+4]LDRR0,[R1,#4]!;R0←[R1+4]、R1←R1+4LDRR0,[R1],#4;R0←[R1]、R1←R1+4LDRR0,[R1,R2];R0←[R1+R2]3.3.3ARM指令的尋址方式第108頁/共210頁5.相對尋址

以程序計(jì)數(shù)器PC的當(dāng)前值為基地址,指令中的地址標(biāo)號作為偏移量,將兩者相加之后得到操作數(shù)的有效地址。例如:BLSORT;跳轉(zhuǎn)到子程序處執(zhí)行

……SORT……MOVPC,LR;從子程序返回3.3.3ARM指令的尋址方式第109頁/共210頁6.多寄存器尋址

采用多寄存器尋址方式,一條指令可以完成多個(gè)寄存器值的傳送,最多傳送16個(gè)通用寄存器的值。例如:LDMIAR0!,{R1,R2,R3,R4};R1←[R0]

;R2←[R0+4]

;R3←[R0+8]

;R4←[R0+12]3.3.3ARM指令的尋址方式第110頁/共210頁7.堆棧尋址①根據(jù)堆棧指針指向來分

堆棧指針指向最后一個(gè)壓入堆棧的數(shù)據(jù)時(shí),稱為滿堆棧堆棧指針指向下一個(gè)將要放入數(shù)據(jù)得空位置時(shí),稱為空堆棧②堆棧的生成方式

堆棧指針遞增計(jì)數(shù)——遞增堆棧堆棧指針遞減計(jì)數(shù)——遞減堆棧3.3.3ARM指令的尋址方式第111頁/共210頁7.堆棧尋址③ARM微處理器支持這四種類型的堆棧工作方式

滿遞增堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生成——{LDMFA,STMFA}

滿遞減堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由高地址向低地址生成——{LDMFD,STMFD}

空遞增堆棧:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)得空位置,且由低地址向高地址生成——{LDMEA,STMEA}

空遞減堆棧:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由高地址向低地址生成——{LDMEA,STMEA}第112頁/共210頁LDMFDsp!,{r4-r7,pc}SP100FF1234AOBE80341010123484209753r41r514544r60r712lr9048pc9020r4100100FFr5FF1234r61234A0BEr7A0BE8034pc8034r4100r5FFr61234r7A0BElr8034ABCD8765102E16FFFF1010123484209753存儲器頂SPSP100FF1234A0BE8034SPOldSP100FF1234A0BE8034④ARM堆棧操作通過塊傳送指令來完成:STMFD

(Push) 塊存儲-FullDescendingstack[STMDB]LDMFD

(Pop) 塊裝載-FullDescendingstack[LDMIA]STMFDsp!,{r4-r7,lr}7.堆棧尋址第113頁/共210頁0x800180x000000010x800140x000000020x80010Empty0x8000cEmpty0x800180x000000010x800140x000000020x800100x000000030x8000c0x00000002PRE地址數(shù)據(jù)POST地址數(shù)據(jù)SPSPPRE:r1=0x00000002,r4=0x00000003,sp=0x00080014執(zhí)行指令:STMFDsp!,{r1,r4}POST:r1=0x00000002,r4=0x00000003,sp=0x0008000c7.堆棧尋址例:把寄存器內(nèi)容放入堆棧,更新sp第114頁/共210頁3.3.4ARM指令集1.ARM存儲器訪問指令(1)加載/存儲字和無符號字節(jié)指令LDR和STR①LDR字?jǐn)?shù)據(jù)加載指令格式:LDR{條件}目標(biāo)寄存器,<存儲器地址>功能:從存儲器中將一個(gè)32位的字?jǐn)?shù)據(jù)傳送到目的寄存器中。LDRR0,[R1];將存儲器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0LDRR0,[R1,R2];將地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0LDRR0,[R1,#8];將地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R0LDRR0,[R1,R2]!;將地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2寫入R1第115頁/共210頁1.ARM存儲器訪問指令LDRR0,[R1,#8]??;將地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+8寫入R1LDRR0,[R1],R2;將地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2寫入R1LDRR0,[R1,R2,LSL#2]??;將地址為R1+R2×4的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2×4寫入R1LDRR0,[R1],R2,LSL#2;將地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2×4寫入R1第116頁/共210頁1.ARM存儲器訪問指令②LDRB字節(jié)數(shù)據(jù)加載指令格式:LDR{條件}B目標(biāo)寄存器,<存儲器地址>功能:實(shí)現(xiàn)從存儲器中將一個(gè)8位字節(jié)數(shù)據(jù)傳送到目的寄存器中,同時(shí)將寄存器的高24位清零。通常用于從存儲器中讀取字節(jié)數(shù)據(jù)到通用寄存器,然后對數(shù)據(jù)進(jìn)行處理。LDRBR0,[R1];將地址為R1的字節(jié)數(shù)據(jù)讀入R0,并將R0的高24位清零。LDRBR0,[R1,#8];將地址為R1+8的字節(jié)數(shù)據(jù)讀入R0,將R0高24位清0。第117頁/共210頁1.ARM存儲器訪問指令③LDRH半字?jǐn)?shù)據(jù)加載指令格式:LDR{條件}H目標(biāo)寄存器,<存儲器地址>功能:從存儲器中將一個(gè)16位的半字?jǐn)?shù)據(jù)傳送到目的寄存器中,同時(shí)將寄存器的高16位清零。說明:從存儲器中讀取16位的半字?jǐn)?shù)據(jù)到通用寄存器,然后對數(shù)據(jù)進(jìn)行處理。當(dāng)PC為目的寄存器時(shí),指令從存儲器中讀取的字?jǐn)?shù)據(jù)被當(dāng)作目的地址,從而實(shí)現(xiàn)程序流程跳轉(zhuǎn)。LDRHR0,[R1] ;將地址為R1的半字?jǐn)?shù)據(jù)讀入寄存器R0,并將R0的高16位清零。LDRHR0,[R1,#8];將地址為R1+8的半字?jǐn)?shù)據(jù)讀入寄存器R0,并將R0的高16位清零。第118頁/共210頁1.ARM存儲器訪問指令④STR字?jǐn)?shù)據(jù)存儲指令格式:STR{條件}源寄存器,<存儲器地址>功能:從源寄存器中將一個(gè)32位的字?jǐn)?shù)據(jù)傳送到存儲器中。STRR0,[R1],#8;將R0中的字?jǐn)?shù)據(jù)寫入以R1為地址的存儲器中,并將新地址R1+8寫入R1。STRR0,[R1,#8];將R0中的字?jǐn)?shù)據(jù)寫入以R1+8為地址的存儲器第119頁/共210頁1.ARM存儲器訪問指令⑤STRB字節(jié)數(shù)據(jù)存儲指令格式:STR{條件}B源寄存器,<存儲器地址>功能:將源寄存器中低8位的字節(jié)數(shù)據(jù)傳送到存儲器中。STRBR0,[R1] ;將寄存器R0中的字節(jié)數(shù)據(jù)寫入以R1為地址的存儲器中。STRBR0,[R1,#8];將寄存器R0中的字節(jié)數(shù)據(jù)寫入以R1+8為地址的存儲器中第120頁/共210頁1.ARM存儲器訪問指令⑥STRH半字?jǐn)?shù)據(jù)存儲指令格式:STR{條件}H源寄存器,<存儲器地址>功能:用于從源寄存器中將一個(gè)16位的半字?jǐn)?shù)據(jù)傳送到存儲器中。半字?jǐn)?shù)據(jù)為源寄存器中的低16位。STRHR0,[R1];將寄存器R0中的半字?jǐn)?shù)據(jù)寫入以R1為地址的存儲器中。STRHR0,[R1,#8];將寄存器R0中的半字?jǐn)?shù)據(jù)寫入以R1+8為地址的存儲器中。第121頁/共210頁1.ARM存儲器訪問指令(2)批量加載/存儲指令LDM和STM①LDM批量數(shù)據(jù)加載指令格式:LDM{條件}<模式>基址寄存器{!},寄存器組{^}②STM批量數(shù)據(jù)存儲指令功能:將基址寄存器所指連續(xù)存儲區(qū)的內(nèi)容加載到寄存器組中。格式:STM{條件}<模式>基址寄存器{!},寄存器組{^}功能:將寄存器組中的內(nèi)容存儲到基址寄存器所指示的連續(xù)存儲區(qū)中。第122頁/共210頁1.ARM存儲器訪問指令STMFDR13!,{R0,R4-R12,LR};將寄存器列表中的寄存器(R0,R4到R12,LR)存入堆棧。LDMFDR13!,{R0,R4-R12,PC};將堆棧內(nèi)容恢復(fù)到寄存器(R0,R4到R12,LR)第123頁/共210頁1.ARM存儲器訪問指令(3)數(shù)據(jù)交換指令SWP①SWP字?jǐn)?shù)據(jù)交換指令格式:SWP{條件}目的寄存器,源寄存器1,[源寄存器2]功能:將源寄存器2所指向的存儲器中的字?jǐn)?shù)據(jù)傳送到目的寄存器中,同時(shí)將源寄存器1中的字?jǐn)?shù)據(jù)傳送到源寄存器2所指向的存儲器中。當(dāng)源寄存器1和目的寄存器為同一個(gè)寄存器時(shí),指令交換該寄存器和存儲器的內(nèi)容。SWPR0,R1,[R2];R0←[R2],[R2]←R1;

SWPR0,R0,[R1];R0←→[R1]第124頁/共210頁1.ARM存儲器訪問指令②SWPB字節(jié)數(shù)據(jù)交換指令格式:SWPB{條件}目的寄存器,源寄存器1,[源寄存器2]SWPB

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論