




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