ARM體系結(jié)構(gòu)與指令集(152頁)ppt課件_第1頁
ARM體系結(jié)構(gòu)與指令集(152頁)ppt課件_第2頁
ARM體系結(jié)構(gòu)與指令集(152頁)ppt課件_第3頁
ARM體系結(jié)構(gòu)與指令集(152頁)ppt課件_第4頁
ARM體系結(jié)構(gòu)與指令集(152頁)ppt課件_第5頁
已閱讀5頁,還剩147頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式系統(tǒng)技術(shù)與設(shè)計第2章 ARM體系構(gòu)造與指令集.ARM體系構(gòu)造的特點2.1ARM處置器任務(wù)方式2.2存放器組織2.3流 水 線2.4ARM存儲系統(tǒng)2.5異 常2.6ARM處置器的尋址方式2.7ARM處置器的指令集2.8. 本章將要引見ARM體系構(gòu)造、ARM處置器的任務(wù)方式及常用指令集等。經(jīng)過本章的學(xué)習(xí),希望讀者可以了解ARM處置器內(nèi)部的主要任務(wù)單元、根本任務(wù)原理,掌握常用指令集,并為以后的程序設(shè)計打下根底。 .本章主要內(nèi)容: ARM體系構(gòu)造的特點 ARM處置器的任務(wù)方式 存放器組織 流水線 ARM存儲 異常 ARM處置器的尋址方式 ARM處置器的指令集.2.1 ARM體系構(gòu)造的特點 ARM

2、內(nèi)核采用RISC體系構(gòu)造。RISC技術(shù)的主要特點參見1.3節(jié)。 ARM體系構(gòu)造的主要特征如下在本書的后續(xù)章節(jié)中將對這些特征做詳細(xì)講解: 1大量的存放器,它們都可以用于多種用途; 2Load/Store體系構(gòu)造; 3每條指令都條件執(zhí)行; 4多存放器的Load/Store指令;. 5可以在單時鐘周期執(zhí)行的單條指令內(nèi)完成一項普通的移位操作和一項普通的ALU操作; 6經(jīng)過協(xié)處置器指令集來擴展ARM指令集,包括在編程方式中添加了新的存放器和數(shù)據(jù)類型。 7假設(shè)把Thumb指令集也當(dāng)作ARM體系構(gòu)造的一部分,那么還可以加上:在Thumb體系構(gòu)造中以高密度16位緊縮方式表示指令集。.2.2 ARM處置器任務(wù)方

3、式表2-1 ARM處置器的任務(wù)方式處理器工作模式簡 寫描 述用戶模式(User)usr正常程序執(zhí)行模式,大部分任務(wù)執(zhí)行在這種模式下快速中斷模式(FIQ)fiq當(dāng)一個高優(yōu)先級(fast)中斷產(chǎn)生時將會進入這種模式,一般用于高速數(shù)據(jù)傳輸和通道處理外部中斷模式(IRQ)irq當(dāng)一個低優(yōu)先級(normal)中斷產(chǎn)生時將會進入這種模式,一般用于通常的中斷處理特權(quán)模式(Supervisor)svc當(dāng)復(fù)位或軟中斷指令執(zhí)行時進入這種模式,是一種供操作系統(tǒng)使用的保護模式數(shù)據(jù)訪問中止模式(Abort)abt當(dāng)存取異常時將會進入這種模式,用于虛擬存儲或存儲保護未定義指令中止模式(Undef)und當(dāng)執(zhí)行未定義指令時

4、進入這種模式,有時用于通過軟件仿真協(xié)處理器硬件的工作方式系統(tǒng)模式(System)sys使用和User模式相同寄存器集的模式,用于運行特權(quán)級操作系統(tǒng)任務(wù). 除用戶方式外的其他6種處置器方式稱為特權(quán)方式Privileged Modes。在特權(quán)方式下,程序可以訪問一切的系統(tǒng)資源,也可以恣意地進展處置器方式切換。其中以下5種又稱為異常方式: 1快速中斷方式FIQ; 2外部中斷方式IRQ; 3特權(quán)方式Supervior; 4數(shù)據(jù)訪問中止方式Abort; 5未定義指令中止方式Undef。.2.3 存放器組織 ARM處置器有如下37個32位長的存放器: 130個通用存放器; 26個形狀存放器:1個CPSRC

5、urrent Program Status Register,當(dāng)前程序形狀存放器,5個SPSRSaved Program Status Register,備份程序形狀存放器; 31個PCProgram Counter,程序計數(shù)器。. ARM處置器共有7種不同的處置器方式,在每一種處置器方式中有一組相應(yīng)的存放器組。表2-2列出了ARM處置器的存放器組織概要。.表2-2 ARM處置器的存放器組織概要UserFIQIRQSVCUndefAbortR0User modeR0R7,R15和CPSRUser modeR0R12,R15和CPSRUser modeR0R12,R15和CPSRUser mod

6、eR0R12,R15和CPSRUser modeR0R12,R15和CPSRR1R2R3R4R5R6R7R8R8R9R9R10R10R11R11R12R12R13(SP)R13(SP)R13R13R13R13R14(LR)R14(LR)R14R14R14R14R15(PC)CPSRSPSRSPSRSPSRSPSRSPSR.2.3.1 通用存放器 通用存放器根據(jù)其分組與否可分為以下2類。 1未分組存放器the Unbanked Register,包括R0R7。 2分組存放器the Banked Register,包括R8R14。. 未分組存放器包括R0R7。 未分組存放器沒有被系統(tǒng)用于特殊的用途

7、,任何可采用通用存放器的運用場所都可以運用未分組存放器。1未分組存放器. 對于分組存放器R13和R14來說,每個存放器對應(yīng)6個不同的物理存放器。其中的一個是用戶方式和系統(tǒng)方式公用的,而另外5個分別用于5種異常方式。訪問時需求指定它們的方式。名字方式如下: 1R13_ 2R14_ 其中,可以是以下幾種方式之一:usr、svc、abt、und、irp及fiq。 2分組存放器. 存放器R14又被稱為銜接存放器Link Register,LR,在ARM體系構(gòu)造中具有下面兩種特殊的作用。 1每一種處置器方式用本人的R14存放當(dāng)前子程序的前往地址。. 2當(dāng)異常中斷發(fā)生時,該異常方式特定的物理存放器R14被

8、設(shè)置成該異常方式的前往地址,對于有些方式R14的值能夠與前往地址有一個常數(shù)的偏移量如數(shù)據(jù)異常運用SUB PC,LR,#8前往。 R14也可以被用做通用存放器運用。.2.3.2 形狀存放器 當(dāng)前程序形狀存放器Current Program Status Register,CPSR可以在任何處置器方式下被訪問,它包含以下內(nèi)容: 1ALUArithmetic Logic Unit,算術(shù)邏輯單元形狀標(biāo)志的備份; 2當(dāng)前的處置器方式; 3中斷使能標(biāo)志; 4設(shè)置處置器的形狀只在4T架構(gòu)。.圖2-1 程序形狀存放器格式. NNegative、ZZero、CCarry和VoVerflow通稱為條件標(biāo)志位。 1

9、N 2Z 3C 4V1標(biāo)志位. 在帶DSP指令擴展的ARM v5及更高版本中,bit27被指定用于指示加強的DAP指令能否發(fā)生了溢出,因此也就被稱為Q標(biāo)志位。同樣,在SPSR中bit27也被稱為Q標(biāo)志位,用于在異常中斷發(fā)生時保管和恢復(fù)CPSR中的Q標(biāo)志位。2Q標(biāo)志位. CPSR的低8位I、F、T及M40統(tǒng)稱為控制位。當(dāng)異常發(fā)生時,這些位的值將發(fā)生相應(yīng)的變化。另外,假設(shè)在特權(quán)方式下,也可以經(jīng)過軟件編程來修正這些位的值。 1中斷制止位 2形狀控制位 3方式控制位3控制位.表2-3 形狀控制位M40含義M40處理器模式可以訪問的寄存器0b10000UserPC,R14R0,CPSR0b10001FI

10、QPC,R14_fiqR8_fiq,R7R0,CPSR,SPSR_fiq0b10010IRQPC,R14_irqR13_irq,R12R0,CPSR,SPSR_irq 0b10011SupervisorPC,R14_svcR13_svc,R12R0,CPSR,SPSR_svc0b10111AbortPC,R14_abtR13_abt,R12R0,CPSR,SPSR_abt0b11011UndefinedPC,R14_undR13_und,R12R0,CPSR,SPSR_und0b11111SystemPC,R14R0,CPSR(ARM v4及更高版本).2.3.3 程序計數(shù)器 程序計數(shù)器R15

11、又被記為PC。 程序計數(shù)器在下面兩種情況下用于特殊的目的。 1讀程序計數(shù)器。 2寫程序計數(shù)器。.2.4 流 水 線2.4.1 流水線的概念與原理 處置器按照一系列步驟來執(zhí)行每一條指令,典型的步驟如下: 1從存儲器讀取指令fetch; 2譯碼以鑒別它是屬于哪一條指令decode; 3從指令中提取指令的操作數(shù)這些操作數(shù)往往存在于存放器中reg;. 4將操作數(shù)進展組合以得到結(jié)果或存儲器地址ALU; 5假設(shè)需求,那么訪問存儲器以存儲數(shù)據(jù)mem; 6將結(jié)果寫回到存放器堆res。.2.4.2 流水線的分類 到ARM7為止的ARM處置器運用簡單的3級流水線,它包括以下流水線級。 1取指令fetch:從存放器

12、裝載一條指令。 2譯碼decode:識別被執(zhí)行的指令,并為下一個周期預(yù)備數(shù)據(jù)通路的控制信號。在這一級,指令占有譯碼邏輯,不占用數(shù)據(jù)通路。 3執(zhí)行excute:處置指令并將結(jié)果寫回存放器。13級流水線ARM組織. 在ARM9TDMI中運用了典型的5級流水線,5級流水線包括下面的流水線級。 1取指令fetch:從存儲器中取出指令,并將其放入指令流水線。 2譯碼decode:指令被譯碼,從存放器堆中讀取存放器操作數(shù)。在存放器堆中有3個操作數(shù)讀端口,因此,大多數(shù)ARM指令能在1個周期內(nèi)讀取其操作數(shù)。25級流水線ARM組織. 3執(zhí)行execute:將其中1個操作數(shù)移位,并在ALU中產(chǎn)生結(jié)果。假設(shè)指令是L

13、oad或Store指令,那么在ALU中計算存儲器的地址。 4緩沖/數(shù)據(jù)buffer/data:假設(shè)需求那么訪問數(shù)據(jù)存儲器,否那么ALU只是簡單地緩沖1個時鐘周期。 5回寫write-back:將指令的結(jié)果回寫到存放器堆,包括任何從存放器讀出的數(shù)據(jù)。. 在ARM10中,將流水線的級數(shù)添加到6級,使系統(tǒng)的平均處置才干到達了1.3DMIPS/MHz。 36級流水線ARM組織.圖2-4 6級流水線指令的執(zhí)行過程.2.4.3 影響流水線性能的要素1互鎖2跳轉(zhuǎn)指令.2.5 ARM存儲系統(tǒng) 將某個分區(qū)或是設(shè)備掛載了以后才干運用,但是當(dāng)計算機重新啟動以后,又需求重新掛載,這個時候可以經(jīng)過修正/etc/fsta

14、b文件實現(xiàn)開機自動掛載文件系統(tǒng)。. ARM存儲系統(tǒng)有非常靈敏的體系構(gòu)造,可以順應(yīng)不同的嵌入式運用系統(tǒng)的需求。ARM存儲器系統(tǒng)可以運用簡單的平板式地址映射機制就像一些簡單的單片機一樣,地址空間的分配方式是固定的,系統(tǒng)中各部分都運用物理地址,也可以運用其他技術(shù)提供功能更為強大的存儲系統(tǒng)。 . 例如: 1系統(tǒng)能夠提供多種類型的存儲器件,如Flash、ROM、SRAM等; 2Cache技術(shù); 3寫緩存技術(shù)write buffers; 4虛擬內(nèi)存和I/O地址映射技術(shù)。. 大多數(shù)的系統(tǒng)經(jīng)過下面的方法之一可實現(xiàn)對復(fù)雜存儲系統(tǒng)的管理。 1運用Cache,減少處置器和存儲系統(tǒng)速度差別,從而提高系統(tǒng)的整體性能。

15、2運用內(nèi)存映射技術(shù)實現(xiàn)虛擬空間到物理空間的映射。 3引入存儲維護機制,加強系統(tǒng)的平安性。 4引入一些機制保證將I/O操作映射成內(nèi)存操作后,各種I/O操作可以得到正確的結(jié)果。. 1內(nèi)核級的存放器。 2芯片級的緊耦合存儲器TCM。 3芯片級的片上Cache存儲器的容量在832KB之間,訪問時間大約為10ns。 4板卡級的DRAM。 5外設(shè)級的后援存儲器,通常是硬盤,能夠從幾百MB到幾個GB,訪問時間為幾十ms。.2.5.1 協(xié)處置器CP15 ARM處置器支持16個協(xié)處置器。 CP15,即通常所說的系統(tǒng)控制協(xié)處置器System Control Coprocesssor,它擔(dān)任完成大部分的存儲系統(tǒng)管理

16、。 CP15包含16個32位存放器,其編號為015。 CP15中的存放器能夠是只讀的,也能夠是只寫的,還有一些是可讀可寫的。.2.5.2 存儲管理單元MMU 在創(chuàng)建多義務(wù)嵌入式系統(tǒng)時,最好有一個簡單的方式來編寫、裝載及運轉(zhuǎn)各自獨立的義務(wù)。目前大多數(shù)的嵌入式系統(tǒng)不再運用本人定制的控制系統(tǒng),而運用操作系統(tǒng)來簡化這個過程。較高級的操作系統(tǒng)采用基于硬件的存儲管理單元MMU來實現(xiàn)上述操作。. MMU提供的一個關(guān)鍵效力是使各個義務(wù)作為各自獨立的程序在其本人的私有存儲空間中運轉(zhuǎn)。在帶MMU的操作系統(tǒng)控制下,運轉(zhuǎn)的義務(wù)無須知道其他與之無關(guān)的義務(wù)的存儲需求情況,這就簡化了各個義務(wù)的設(shè)計。. MMU提供了一些資源

17、以允許運用虛擬存儲器將系統(tǒng)物理存儲器重新編址,可將其看成一個獨立于系統(tǒng)物理存儲器的存儲空間。MMU作為轉(zhuǎn)換器,將程序和數(shù)據(jù)的虛擬地址編譯時的銜接地址轉(zhuǎn)換成實踐的物理地址,即在物理主存中的地址。這個轉(zhuǎn)換過程允許運轉(zhuǎn)的多個程序運用一樣的虛擬地址,而各自存儲在物理存儲器的不同位置。 這樣存儲器就有兩種類型的地址:虛擬地址和物理地址。 .2.5.3 高速緩沖存儲器Cache Cache是一個容量小但存取速度非??斓拇鎯ζ鳎9茏罱玫降拇鎯ζ鲾?shù)據(jù)副本。Cache經(jīng)常與寫緩存器write buffer一同運用。 經(jīng)過引入Cache和寫緩存區(qū),存儲系統(tǒng)的性能得到了很大的提高,但同時也帶來了一些問題。.2

18、.6 異 常 ARM體系構(gòu)造中,存在7種異常處置。當(dāng)異常發(fā)生時,處置器會把PC設(shè)置為一個特定的存儲器地址。這一地址放在被稱為向量表vector table的特定地址范圍內(nèi)。向量表的入口是一些跳轉(zhuǎn)指令,跳轉(zhuǎn)到專門處置某個異?;蛑袛嗟淖映绦?。 2.6.1 異常的種類.表2-4 ARM的7種異常異 常 類 型處理器模式執(zhí)行低地址執(zhí)行高地址復(fù)位異常(Reset)特權(quán)模式0 x000000000 xFFFF0000未定義指令異常(Undefined interrupt)未定義指令中止模式0 x000000040 xFFFF0004軟中斷異常(Software Abort)特權(quán)模式0 x000000080

19、 xFFFF0008預(yù)取異常(Prefetch Abort)數(shù)據(jù)訪問中止模式0 x0000000C0 xFFFF000C數(shù)據(jù)異常(Data Abort)數(shù)據(jù)訪問中止模式0 x000000100 xFFFF0010外部中斷請求(IRQ)外部中斷請求模式0 x000000180 xFFFF0018快速中斷請求(FIQ)快速中斷請求模式0 x0000001C0 xFFFF001C.2.6.2 異常的優(yōu)先級表2-5 異常優(yōu)先級優(yōu) 先 級異 常最高 1復(fù)位異常 2數(shù)據(jù)中止 3快速中斷請求 4外部中斷請求 5預(yù)取指令異常 6軟中斷最低 7未定義指令.2.6.3 構(gòu)建異常向量表 當(dāng)處置器的復(fù)位引腳有效時,系

20、統(tǒng)產(chǎn)生復(fù)位異常中斷,程序跳轉(zhuǎn)到復(fù)位異常中斷處置程序處執(zhí)行。復(fù)位異常中斷通常用在下面兩種情況下: 1系統(tǒng)上電; 2系統(tǒng)復(fù)位。1復(fù)位異常.圖2-6 異常處置向量表. 當(dāng)ARM處置器執(zhí)行協(xié)處置器指令時,它必需等待一個外部協(xié)處置器應(yīng)對后,才干真正執(zhí)行這條指令。假設(shè)協(xié)處置器沒有呼應(yīng),那么發(fā)生未定義指令異常。2未定義指令異常. 軟中斷SWI異常發(fā)生時,處置器進入特權(quán)方式,執(zhí)行一些特權(quán)方式下的操作系統(tǒng)功能。3軟中斷. 預(yù)取指令異常是由系統(tǒng)存儲器報告的。當(dāng)處置器試圖去取一條被標(biāo)志為預(yù)取無效的指令時,發(fā)生預(yù)取指令異常。 假設(shè)系統(tǒng)中不包含MMU時,指令預(yù)取異常中斷處置程序只是簡單地報告錯誤并退出。假設(shè)包含MMU,

21、引起異常的指令的物理地址被存儲到內(nèi)存中。4預(yù)取指令異常. 數(shù)據(jù)訪問中止異常是由存儲器發(fā)出數(shù)據(jù)中止信號,它由存儲器訪問指令Load/Store產(chǎn)生。當(dāng)數(shù)據(jù)訪問指令的目的地址不存在或者該地址不允許當(dāng)前指令訪問時,處置器產(chǎn)生數(shù)據(jù)訪問中止異常。5數(shù)據(jù)訪問中止異常. 當(dāng)處置器的外部中斷懇求IRQ引腳有效,而且CPSR存放器的I控制位被去除時,處置器產(chǎn)生外部中斷IRQ異常。系統(tǒng)中各外部設(shè)備通常經(jīng)過該異常中斷懇求處置器效力。6外部中斷懇求. 當(dāng)處置器的快速中斷懇求FIQ引腳有效且CPSR存放器的F控制位被去除時,處置器產(chǎn)生快速中斷懇求FIQ異常。7快速中斷懇求.2.6.4 異常呼應(yīng)流程 當(dāng)異常發(fā)生時,處置器

22、自動切換到ARM形狀,所以在異常處置函數(shù)中要判別在異常發(fā)生前處置器是ARM形狀還是Thumb形狀。這可以經(jīng)過檢測SPSR的T位來判別。1判別處置器形狀. 通常情況下,只需在SWI處置函數(shù)中才需求知道異常發(fā)生前處置器的形狀。所以在Thumb形狀下,調(diào)用SWI軟中斷異常必需留意以下兩點。 1發(fā)生異常的指令地址為(lr2),而不是(lr4)。 2Thumb形狀下的指令是16位的,在判別中斷向量信號時運用半字加載指令LDRH。. 前面引見向量表時提到,每一個異常發(fā)生時總是從異常向量表開場跳轉(zhuǎn)。最簡單的一種情況是向量表里面的每一條指令直接跳向?qū)?yīng)的異常處置函數(shù)。其中快速中斷處置函數(shù)FIQ_handler

23、()可以直接從地址0 x1C處開場,省下一條跳轉(zhuǎn)指令,如圖2-7所示。 1MOV PC,imme_value 2LDR PC,PC+offset2向量表.圖2-7 異常處置向量表.2.6.5 從異常處置程序中前往 當(dāng)一個異常處置前往時,一共有3件事情需求處置:通用存放器的恢復(fù)、形狀存放器的恢復(fù)及PC指針的恢復(fù)。通用存放器的恢復(fù)采用普通的堆棧操作指令即可,下面重點引見形狀存放器的恢復(fù)及PC指針的恢復(fù)。. PC和CPSR的恢復(fù)可以經(jīng)過一條指令來實現(xiàn),下面是3個例子。 1MOVS PC,LR 2SUBS PC,LR,4 3LDMFD SP!,PC1恢復(fù)被中斷程序的處置器形狀. 異常前往時,另一個非常

24、重要的問題就是前往地址確實定。 2異常的前往地址.圖2-8 3級流水線例如.1軟中斷異常2IRQ或FIQ異常3Data Abort數(shù)據(jù)中止異常.表2-6 異常和前往地址異 常地 址用 途復(fù)位復(fù)位沒有定義LR數(shù)據(jù)中止LR8指向?qū)е聰?shù)據(jù)中止異常的指令FIQLR4指向發(fā)生異常時正在執(zhí)行的指令I(lǐng)RQLR4指向發(fā)生異常時正在執(zhí)行的指令預(yù)取指令中止LR4指向?qū)е骂A(yù)取指令異常的那條指令SWILR執(zhí)行SWI指令的下一條指令未定義指令LR指向未定義指令的下一條指令.2.7 ARM處置器的尋址方式 ARM指令集可以分為跳轉(zhuǎn)指令、數(shù)據(jù)處置指令、程序形狀存放器傳輸指令、Load/Store指令、協(xié)處置器指令和異常中斷

25、產(chǎn)生指令。根據(jù)運用的指令類型不同,指令的尋址方式分為數(shù)據(jù)處置指令尋址方式和內(nèi)存訪問指令尋址方式。.2.7.1 數(shù)據(jù)處置指令尋址方式 數(shù)據(jù)處置指令的根本語法格式如下: S , 其中,有11種方式,如表2-7所示。.表2-7 的尋址方式語 法尋 址 方 式1立即數(shù)尋址2寄存器尋址3, LSL #立即數(shù)邏輯左移4, LSL 寄存器邏輯左移5, LSR #立即數(shù)邏輯右移6, LSR 寄存器邏輯右移7, ASR #立即數(shù)算術(shù)右移8, ASR 寄存器算術(shù)右移9, ROR #立即數(shù)循環(huán)右移10, ROR 寄存器循環(huán)右移11, RRX寄存器擴展循環(huán)右移.數(shù)據(jù)處置指令尋址方式可以分為以下幾種。1立刻數(shù)尋址方式;

26、2存放器尋址方式;3存放器移位尋址方式 。. 指令中的立刻數(shù)是由一個8bit的常數(shù)挪動4bit偶數(shù)位0,2,4,26,28,30得到的。所以,每一條指令都包含一個8bit的常數(shù)X和移位值Y,得到的立刻數(shù)=X循環(huán)右移2Y。1立刻數(shù)尋址方式. 存放器的值可以被直接用于數(shù)據(jù)操作指令,這種尋址方式是各類處置器經(jīng)常采用的一種方式,也是一種執(zhí)行效率較高的尋址方式, 2存放器尋址方式. 存放器的值在被送到ALU之前,可以事先經(jīng)過桶形移位存放器的處置。預(yù)處置和移位發(fā)生在同一周期內(nèi),所以有效地運用移位存放器,可以添加代碼的執(zhí)行效率。3存放器移位尋址方式.2.7.2 內(nèi)存訪問指令尋址方式 內(nèi)存訪問指令的尋址方式可

27、以分為以下幾種。 1字及無符號字節(jié)的Load/Store指令的尋址方式; 2雜類Load/Store指令的尋址方式; 3批量Load/Store指令的尋址方式; 4協(xié)處置器Load/Store指令的尋址方式。 . 字及無符號字節(jié)的Load/Store指令語法格式如下: LDR|STRBT ,1字及無符號字節(jié)的Load/Store指令的尋址方式.表2-8 字及無符合字節(jié)的Load/Store指令的尋址方式格 式模 式1Rn,#立即數(shù)偏移尋址(Immediate offset)2Rn,Rm寄存器偏移尋址(Register offset)3Rn,Rm,#帶移位的寄存器偏移尋址(Scaled regi

28、ster offset)4Rn,#!立即數(shù)前索引尋址(Immediate pre-indexed)5Rn,Rm!寄存器前索引尋址(Register post-indexed)6Rn,Rm,#!帶移位的寄存器前索引尋址(Scaled register pre-indexed).格 式模 式7Rn,#立即數(shù)后索引尋址(Immediate post-indeded)8Rn,寄存器后索引尋址(Register post-indexed)9Rn,#帶移位的寄存器后索引尋址(Scaled register post-indexed). 運用該類尋址方式的指令的語法格式如下:LDR|STRH|SH|SB|D

29、 ,2雜類Load/Store指令的尋址方式.表2-9 雜類Load/Store指令的尋址方式格 式模 式1Rn,#立即數(shù)偏移尋址(Immediate offset)2Rn,Rm寄存器偏移尋址(Register offset)3Rn,#!立即數(shù)前索引尋址(Immediate pre-indexed)4Rn,Rm!寄存器前索引尋址(Register post-indexed)5Rn,#立即數(shù)后索引尋址(Immediate post-indeded)6Rn,寄存器后索引尋址(Register post-indexed). 批量Load/Store指令將一片延續(xù)內(nèi)存單元的數(shù)據(jù)加載到通用存放器組中或?qū)?/p>

30、一組通用存放器的數(shù)據(jù)存儲到內(nèi)存單元中。 該類指令的語法格式如下: LDM|STM !,3批量Load/Store指令尋址方式.表2-10 批量Load/Store指令的尋址方式格 式模 式1IA(Increment After)后遞增方式2IB(Increment Before)先遞增方式3DA(Decrement After)后遞減方式4DB(Decrement Before)先遞減方式. 堆棧操作尋址方式和批量Load/Store指令尋址方式非常類似。但對于堆棧的操作,數(shù)據(jù)寫入內(nèi)存和從內(nèi)存中讀出要運用不同的尋址方式,由于進棧操作pop和出棧操作push要在不同的方向上調(diào)整堆棧。4堆棧操作尋

31、址方式. 根據(jù)不同的尋址方式,將堆棧分為以下4種。 1Full棧:堆棧指針指向棧頂元素last used location。 2Empty棧:堆棧指針指向第一個可用元素the first unused location。 3遞減棧:堆棧向內(nèi)存地址減小的方向生長。 4遞增棧:堆棧向內(nèi)存地址添加的方向生長。. 根據(jù)堆棧的不同種類,將其尋址方式分為以下4種。 1滿遞減FDFull Descending。 2空遞減EDEmpty Descending。 3滿遞增FAFull Ascending。 4空遞增EAEmpty Ascending。.表2-11 堆棧尋址方式和批量Load/Store指令尋址方

32、式對應(yīng)關(guān)系批量數(shù)據(jù)尋址方式堆棧尋址方式L位P位U位LDMDALDMFA100LDMIALDMFD101LDMDBLDMEA110LDMIBLDMED111STMDASTMED000STMIASTMEA001STMDBSTMFD010STMIBSTMFA011. 協(xié)處置器Load/Store指令的語法格式如下: L ,5協(xié)處置器Load/Store尋址方式.2.8 ARM處置器的指令集 數(shù)據(jù)操作指令是指對存放在存放器中的數(shù)據(jù)進展操作的指令。主要包括數(shù)據(jù)傳送指令、算術(shù)指令、邏輯指令、比較與測試指令及乘法指令。2.8.1 數(shù)據(jù)操作指令.表2-12 數(shù)據(jù)處置指令列表助 記 符操 作行 為MOV數(shù)據(jù)傳送

33、MVN數(shù)據(jù)取反傳送AND邏輯與Rd:=Rn AND op2EOR邏輯異或Rd:=Rn EOR op2SUB減Rd:=Rn op2RSB翻轉(zhuǎn)減Rd:=op2 RnADD加Rd:=Rn + op2ADC帶進位的加Rd:=Rn + op2 + CSBC帶進位的減Rd:=Rn op2 + C 1RSC帶進位的翻轉(zhuǎn)減Rd:=op2 Rn + C 1TST測試Rn AND op2并更新標(biāo)志位TEQ測試相等Rn EOR op2并更新標(biāo)志位CMP比較Rnop2并更新標(biāo)志位CMN負(fù)數(shù)比較Rn+op2并更新標(biāo)志位ORR邏輯或Rd:=Rn OR op2BIC位清0Rd:=Rn AND NOT(op2). MOV指令

34、是最簡單的ARM指令,執(zhí)行的結(jié)果就是把一個數(shù)N送到目的存放器Rd,其中N可以是存放器,也可以是立刻數(shù)。 MOV指令多用于設(shè)置初始值或者在存放器間傳送數(shù)據(jù)。 MOV指令將移位碼shifter_operand表示的數(shù)據(jù)傳送到目的存放器Rd,并根據(jù)操作的結(jié)果更新CPSR中相應(yīng)的條件標(biāo)志位。 1MOV指令. 1指令的語法格式MOVS , 2指令舉例 3指令的運用. MVN是反相傳送Move Negative指令。它將操作數(shù)的反碼傳送到目的存放器。MVN指令多用于向存放器傳送一個負(fù)數(shù)或生成位掩碼。 MVN指令將shifter_operand表示的數(shù)據(jù)的反碼傳送到目的存放器Rd。并根據(jù)操作的結(jié)果更新CPS

35、R中相應(yīng)的條件標(biāo)志位。2MVN指令. 1指令的語法格式MVNS , 2指令舉例 3指令的運用. AND指令將shifter_operand表示的數(shù)值與存放器Rn的值按位bitwise做邏輯與操作,并將結(jié)果保管到目的存放器Rd中,同時根據(jù)操作的結(jié)果更新CPSR存放器。 1指令的語法格式 ANDS , 2指令舉例3AND指令. EORExclusive OR指令將存放器Rn中的值和shifter_operand的值執(zhí)行按位“異或操作,并將執(zhí)行結(jié)果存儲到目的存放器Rd中,同時根據(jù)指令的執(zhí)行結(jié)果更新CPSR中相應(yīng)的條件標(biāo)志位。 1指令的語法格式 EORS , 2指令舉例4EOR指令. SUBSubtr

36、act指令從存放器Rn中減去shifter_operand表示的數(shù)值,并將結(jié)果保管到目的存放器Rd中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置CPSR中相應(yīng)的標(biāo)志位。 1指令的語法格式 SUBS , 2SUB指令舉例5SUB指令. RSBReverse Subtract指令從存放器shifter_operand中減去Rn表示的數(shù)值,并將結(jié)果保管到目的存放器Rd中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置CPSR中相應(yīng)的標(biāo)志位。 1指令的語法格式 RSBS , 2RSB指令舉例6RSB指令. ADD指令將存放器shifter_operand的值加上Rn表示的數(shù)值,并將結(jié)果保管到目的存放器Rd中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置CPSR

37、中相應(yīng)的標(biāo)志位。 1指令的語法格式 ADDS , 2ADD指令舉例7ADD指令. ADC指令將存放器shifter_operand的值加上Rn表示的數(shù)值,再加上CPSR中的C條件標(biāo)志位的值,將結(jié)果保管到目的存放器Rd中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置CPSR中相應(yīng)的標(biāo)志位。 1指令的語法格式 ADCS , 2ADC指令舉例8ADC指令. SBCSubtract with Carry指令用于執(zhí)行操作數(shù)大于32位時的減法操作。該指令從存放器Rn中減去shifter_operand表示的數(shù)值,再減去存放器CPSR中C條件標(biāo)志位的反碼NOTCarry flag,并將結(jié)果保管到目的存放器Rd中,并根據(jù)指令的執(zhí)

38、行結(jié)果設(shè)置CPSR中相應(yīng)的標(biāo)志位。9SBC指令. RSCReverse Subtract with Carry指令用于從存放器shifter_operand中減去Rn表示的數(shù)值,再減去存放器CPSR中C條件標(biāo)志位的反碼NOTCarry Flag,并將結(jié)果保管到目的存放器Rd中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置CPSR中相應(yīng)的標(biāo)志位。 1指令的語法格式 RSCS , 2RSC指令舉例10RSC指令. TSTTest測試指令用于將一個存放器的值和一個算術(shù)值進展比較。條件標(biāo)志位根據(jù)兩個操作數(shù)做“邏輯與后的結(jié)果設(shè)置。 1指令的語法格式 TST , 2TST指令舉例11TST測試指令. TEQTest Equi

39、valence指令用于將一個存放器的值和一個算術(shù)值做比較。條件標(biāo)志位根據(jù)兩個操作數(shù)做“邏輯或后的結(jié)果設(shè)置。以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判別能否執(zhí)行。 1指令的語法格式 TEQ , 2TEQ指令舉例12TEQ指令. CMPCompare指令運用存放器Rn的值減去operand2的值,根據(jù)操作的結(jié)果更新CPSR中相應(yīng)的條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判別能否執(zhí)行。 1指令的語法格式 CMP , 2CMP指令舉例13CMP指令. CMNCompare Negative指令運用存放器Rn的值減去operand2的負(fù)數(shù)值加上operand2,根據(jù)操作的結(jié)果更新CPSR中相應(yīng)的條件標(biāo)志

40、位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判別能否執(zhí)行。 1指令的語法格式 CMN , 2CMN指令舉例14CMN指令. ORRLogical OR為邏輯或操作指令,它將第2個源操作數(shù)shifter_operand的值與存放器Rn的值按位做“邏輯或操作,結(jié)果保管到Rd中。 1指令的語法格式 ORRS , 2ORR指令舉例15ORR指令. BICBit Clear位清零指令,將存放器Rn的值與第2個源操作數(shù)shifter_operand的值的反碼按位做“邏輯與操作,結(jié)果保管到Rd中。 1指令的語法格式 BICS , 2BIC指令舉例16BIC位清零指令. ARM乘法指令完成兩個數(shù)據(jù)的乘法。兩個32位

41、二進制數(shù)相乘的結(jié)果是64位的積。在有些ARM的處置器版本中,將乘積的結(jié)果保管到兩個獨立的存放器中。另外一些版本只將最低有效32位存放到一個存放器中。2.8.2 乘法指令.表2-13 各種方式乘法指令的功能操作碼2321助記符意 義操 作000MUL乘(保留32位結(jié)果)Rd:=(RmRs)310001MLA乘累加(32位結(jié)果)Rd:=(RmRsRn)310100UMULL無符號數(shù)長乘RdHi:RdLo:=RmRs101UMLAL無符號長乘累加RdHi:RdLo:=RmRs110SMULL有符號數(shù)長乘RdHi:RdLo:=RmRs111SMLAL有符號數(shù)長乘累加RdHi:RdLo:=RmRs. M

42、ULMultiply32位乘法指令將Rm和Rs中的值相乘,結(jié)果的最低32位保管到Rd中。 1指令的語法格式 MULS , 2指令舉例1MUL指令. MLAMultiply Accumulate32位乘累加指令將Rm和Rs中的值相乘,再將乘積加上第3個操作數(shù),結(jié)果的最低32位保管到Rd中。 1指令的語法格式 MLAS , 2指令舉例2MLA乘累加指令. UMULLUnsigned Multiply Long為64位無符號乘法指令。它將Rm和Rs中的值做無符號數(shù)相乘,結(jié)果的低32位保管到RsLo中,高32位保管到RdHi中。 1指令的語法格式 UMULLS , 2指令舉例3UMULL指令. UML

43、ALUnsigned Multiply Accumulate Long為64位無符號長乘累加指令。指令將Rm和Rs中的值做無符號數(shù)相乘,64位乘積與RdHi、RdLo相加,結(jié)果的低32位保管到RsLo中,高32位保管到RdHi中。 1指令的語法格式 UMALLS , 2指令舉例4UMLAL指令. SMULLSigned Multiply Long為64位有符號長乘法指令。指令將Rm和Rs中的值做有符號數(shù)相乘,結(jié)果的低32位保管到RsLo中,高32位保管到RdHi中。 1指令的語法格式 SMULLS , 2指令舉例5SMULL指令. SMLALSigned Multiply Accumulate

44、 Long為64位有符號長乘累加指令。指令將Rm和Rs中的值做有符號數(shù)相乘,64位乘積與RdHi、RdLo相加,結(jié)果的低32位保管到RsLo中,高32位保管到RdHi中。 1指令的語法格式 SMLALS , 2指令舉例6SMLAL指令. Load/Store內(nèi)存訪問指令在ARM存放器和存儲器之間傳送數(shù)據(jù)。ARM指令中有3種根本的數(shù)據(jù)傳送指令。2.8.3 Load/Store指令. 這些指令在ARM存放器和存儲器之間提供更靈敏的單數(shù)據(jù)項傳送方式。數(shù)據(jù)項可以是字節(jié)、16位半字或32位字。1單存放器Load/Store指令Single Register. 這些指令的靈敏性比單存放器傳送指令差,但可以

45、使大量的數(shù)據(jù)更有效地傳送。它們用于進程的進入和退出、保管和恢復(fù)任務(wù)存放器以及復(fù)制存儲器中的一塊數(shù)據(jù)。2多存放器Load/Store內(nèi)存訪問指令. 這些指令允許存放器和存儲器中的數(shù)值進展交換,在一條指令中有效地完成Load/Store操作。它們在用戶級編程中很少用到。它的主要用途是在多處置器系統(tǒng)中實現(xiàn)信號量Semaphores的操作,以保證不會同時訪問公用的數(shù)據(jù)構(gòu)造。3單存放器交換指令Single Register Swap.2.8.3.1 單存放器的Load/Store指令表2-14 單存放器Load/Store指令指令作 用操 作LDR把一個字裝入一個寄存器Rdmem32addressSTR

46、將存儲器中的字保存到寄存器Rdmem32addressLDRB把一個字節(jié)裝入一個寄存器Rdmem8addressSTRB將寄存器中的低8位字節(jié)保存到存儲器Rdmem8addressLDRH把一個半字裝入一個寄存器Rdmem16addressSTRH將寄存器中的低16位半字保存到存儲器Rdmem16addressLDRBT用戶模式下將一個字節(jié)裝入寄存器Rdmem8address under user modeSTRBT用戶模式下將寄存器中的低8位字節(jié)保存到存儲器Rdmem8address under user modeLDRT用戶模式下把一個字裝入一個寄存器Rdmem32addressunder

47、 user modeSTRT用戶模式下將存儲器中的字保存到寄存器Rdmem32address under user modeLDRSB把一個有符號字節(jié)裝入一個寄存器Rdsignmem8addressLDRSH把一個有符號半字裝入一個寄存器Rdsignmem16address. LDR指令用于從內(nèi)存中將一個32位的字讀取到目的存放器。 1指令的語法格式 LDR , 2指令舉例1LDR指令. STR指令用于將一個32位的字?jǐn)?shù)據(jù)寫入到指令中指定的內(nèi)存單元。 1指令的語法格式 STR , 2指令舉例2STR指令. LDRB指令根據(jù)addr_mode所確定的地址方式將一個8位字節(jié)讀取到指令中的目的存放器

48、Rd。 指令的語法格式: LDRB ,3LDRB指令. STRB指令從存放器中取出指定的8位字節(jié)放入存放器的低8位,并將存放器的高位補0。 指令的語法格式: STRB ,4STRB指令. LDRH指令用于從內(nèi)存中將一個16位的半字讀取到目的存放器。 假設(shè)指令的內(nèi)存地址不是半字節(jié)對齊的,指令的執(zhí)行結(jié)果不可預(yù)知。 指令的語法格式: LDRH ,5LDRH指令. STRH指令從存放器中取出指定的16位半字放入存放器的低16位,并將存放器的高位補0。 指令的語法格式: STRH ,6STRH指令.2.8.3.2 多存放器的Load/Store內(nèi)存訪問指令表2-15 多存放器的Load/Store內(nèi)存訪

49、問指令指 令作 用操 作LDM裝載多個寄存器Rd*Nmem32start address+4*NSTM保存多個寄存器Rd*Nmem32start address+4*N. LDM指令將數(shù)據(jù)從延續(xù)的內(nèi)存單元中讀取到指令中指定的存放器列表中的各存放器中。當(dāng)PC包含在LDM指令的存放器列表中時,指令從內(nèi)存中讀取的字?jǐn)?shù)據(jù)將被作為目的地址值,指令執(zhí)行后程序?qū)哪康牡刂诽庨_場執(zhí)行,從而實現(xiàn)了指令的跳轉(zhuǎn)。 指令的語法格式: LDM !, 1LDM指令. LDM指令將數(shù)據(jù)從延續(xù)的內(nèi)存單元中讀取到指令中指定的存放器列表中的各存放器中。 指令的語法格式: LDM , . STM指令將指令中存放器列表中的各存放器數(shù)

50、值寫入到延續(xù)的內(nèi)存單元中。主要用于塊數(shù)據(jù)的寫入、數(shù)據(jù)棧操作及進入子程序時保管相關(guān)存放器的操作。 指令的語法格式: STM !, 2STM指令. STM指令將指令中存放器列表中的各存放器數(shù)值寫入到延續(xù)的內(nèi)存單元中。主要用于塊數(shù)據(jù)的寫入、數(shù)據(jù)棧操作及進入子程序時保管相關(guān)存放器等操作。 指令的語法格式: STM , . LDM/STM批量加載/存儲指令可以實如今一組存放器和一塊延續(xù)的內(nèi)存單元之間傳輸數(shù)據(jù)。LDM為加載多個存放器,STM為存儲多個存放器。允許一條指令傳送16個存放器的任何子集或一切存放器。指令格式如下: LDMcond Rn!,regist STMcond Rn!,regist2.8.

51、3.3 數(shù)據(jù)傳送指令運用.表2-16 多存放器的Load/Store內(nèi)存訪問指令映射向 上 生 長向 下 生 長滿空滿空增加之前STMIBLDMIBSTMFALDMED之后STMIALDMIASTMEALDMFD增加之前LDMDBSTMDBLDMEASTMFD之后LDMDASTMDALDMFASTMED. 交換指令是Load/Store指令的一種特例,它把一個存放器單元的內(nèi)容與存放器內(nèi)容交換。交換指令是一個原子操作Atomic Operation,也就是說,在延續(xù)的總線操作中讀/寫一個存儲單元,在操作期間阻止其他任何指令對該存儲單元的讀/寫。交換指令如表2-17所示。2.8.4 單數(shù)據(jù)交換指令.表2-17 交換指令SWP指 令作 用操 作SWP字交換tmp=men32Rnmem32Rn=RmRd=tmpSWPB字節(jié)交換tmp=men8Rnmem8Rn=RmRd=tmp. SWP指令用于將內(nèi)存中的一個字單元和一個指定存放器的值相交換。 指令的語法格式: SWP ,1SWP字交換指令. SWPB指令用于將內(nèi)存中的一個字節(jié)單元和一個指定存放器的低8位值相交換, 指令的語法格式: SWPB ,2SWPB字節(jié)交換指令. SWP指令用于將一個內(nèi)存單元該單元地址放在存放器Rn中的內(nèi)容讀取到一個存放器Rd中,同時將另一個存放器Rm的內(nèi)容寫到該內(nèi)存單元中,運

溫馨提示

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

評論

0/150

提交評論