AR指令集大全_第1頁
AR指令集大全_第2頁
AR指令集大全_第3頁
AR指令集大全_第4頁
AR指令集大全_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、ARM 匯編指令集FoldTable of Contents跳轉(zhuǎn)指令B 指令BL 指令BX 指令BLX 指令數(shù)據(jù)處理指令MOV 傳送MVN 求反CMP 比較CMN 負數(shù)比較TST 測試(按位的與運算)TEQ 測試相等(按位的異或運算)ADD 相加ADC 帶進位相加SUB 相減SBC 帶進位減法RSB 逆向減法RSC 逆向帶進位減AND 邏輯位與ORR 邏輯位或EOR 指令 邏輯位 異或BIC 位清零DCD 分配一個或者多個內(nèi)存word,四字節(jié)對齊乘法指令與乘加指令程序狀態(tài)寄存器訪問指令MRS 將程序狀態(tài)寄存器的內(nèi)容傳送到通用寄存器中MSR 將操作數(shù)的內(nèi)容傳送到程序狀態(tài)寄存器的特定域中加載/存儲

2、指令LDRLDRBLDRH 指令異常產(chǎn)生指令SWIBKPT跳轉(zhuǎn)指令跳轉(zhuǎn)指令用于實現(xiàn)程序流程的跳轉(zhuǎn)在 ARM 程序中有以下兩種方法可以實現(xiàn)程序流程的跳轉(zhuǎn):1 .使用專門的跳轉(zhuǎn)指令2 .直接向程序計數(shù)器PC(R15)寫入跳轉(zhuǎn)地址值。通過向程序計數(shù)器PC寫入跳轉(zhuǎn)地址值可以實現(xiàn)在 4GB 的地址空間中的任意跳轉(zhuǎn)在跳轉(zhuǎn)之前結(jié)合使用MOV LRPC 等類似指令可以保存將來的返回地址值從而實現(xiàn)在4GB 連續(xù)的線性地址空間的子程序調(diào)用。ARM 指令集中的跳轉(zhuǎn)指令可以完成從當前指令向前或向后的32MB 的地址空間的跳轉(zhuǎn)包括以下 4 條指令:B 指令B 指令的格式為:B 條件 目標地址B 指令是最簡單的跳轉(zhuǎn)指令。

3、一旦遇到一個B 指令 ARM 處理器將立即跳轉(zhuǎn)到給定的目標地址從那里繼續(xù)執(zhí)行。注意存儲在跳轉(zhuǎn)指令中的實際值是相對當前PC值的一個偏移量而不是一個絕對地址它的值由匯編器來計算(參考尋址方式中的相對尋址)。?它是24 位有符號數(shù)左移兩位后有符號擴展為32 位表示的有效偏移為26 位 (前后32MB 的地址空間)。 ?以下指令:B Label ; 程序無條件跳轉(zhuǎn)到標號Label 處執(zhí)行CMP R1 #0;當 CPSR寄存器中的Z條件碼置位時程序跳轉(zhuǎn)到標號Label 處執(zhí)行BEQ LabelBL 指令BL 指令的格式為:BL 條件 目標地址BL 是另一個跳轉(zhuǎn)指令但跳轉(zhuǎn)之前會在寄存器R14中保存 PC的

4、當前內(nèi)容因此可以通過將R14的內(nèi)容重新加載到PC中來返回到跳轉(zhuǎn)指令之后的那個指令處執(zhí)行。該指令是實現(xiàn)子程序調(diào)用的一個基本但常用的手 段。 以下指令:BL Label ; 當程序無條件跳轉(zhuǎn)到標號Label 處執(zhí)行時同時將* 當前的PC值 * 保存到 R14( LR)中BX 指令BX 指令的格式為:BX 條件 目標地址BX 指令跳轉(zhuǎn)到指令中所指定的目標地址目標地址處的指令既可以是ARM 指令也可以是Thumb 指令。BLX 指令BLX 指令的格式為:BLX 目標地址BLX 指令從 ARM 指令集跳轉(zhuǎn)到指令中所指定的目標地址并將處理器的工作狀態(tài)有ARM 狀態(tài)切換到Thumb 狀態(tài)該指令同時將PC的當

5、前內(nèi)容保存到寄存器R14中。因此當子程序使用Thumb 指令集而調(diào)用者使用 ARM 指令集時可以通過BLX 指令實現(xiàn)子程序的調(diào)用和處理器工作狀態(tài)的切換。同時子程序的返回可以通過將寄存器R14 值復制到PC中來完成。數(shù)據(jù)處理指令數(shù)據(jù)處理指令可分為數(shù)據(jù)傳送指令、算術(shù)邏輯運算指令和比較指令等:?數(shù)據(jù)傳送指令用于在寄存器和存儲器之間進行數(shù)據(jù)的雙向傳輸。?算術(shù)邏輯運算指令完成常用的算術(shù)與邏輯的運算該類指令不但將運算結(jié)果保存在目的寄存器中同時更新CPSR中的相應(yīng)條件標志位。?比較指令不保存運算結(jié)果只更新CPSR中相應(yīng)的條件標志位。MOV 傳送MOV 指令的格式為:MOV 條件 S 目的寄存器源操作數(shù)MOV

6、 指令可完成從另一個寄存器、被移位的寄存器或?qū)⒁粋€立即數(shù)加載到目的寄存器。其中 S選項決定指令的操作是否影響CPSR中條件標志位的值當沒有S時指令不更新CPSR中條件標志位的值。指令示例:MOV R1R0; 將寄存器R0 的值傳送到寄存器R1MOV PCR14; 將寄存器R14的值傳送到PC常用于子程序返回MOV R1R0LSL#3 ; 將寄存器R0 的值左移3位后傳送到R1MVN 求反MVN 指令的格式為:MVN 條件 S 目的寄存器源操作數(shù)MVN 指令可完成從另一個寄存器、被移位的寄存器、或?qū)⒁粋€立即數(shù)加載到目的寄存器。與 MOV 指令不同之處是在傳送之前按位被取反了即把一個被取反的值傳送

7、到目的寄存器中。其中 S決定指令的操作是否影響CPSR中條件標志位的值當沒有S時指令不更新CPSR中條件標志位的值。指令示例:MVN R0#0; 將立即數(shù)0 取反傳送到寄存器R0中完成后R0=-1CMP 比較CMP 指令的格式為:CMP 條件 操作數(shù) 1 操作數(shù) 2CMP 指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)進行比較同時更新CPSR 中條件標志位的值。該指令進行一次減法運算但不存儲結(jié)果只更改條件標志位。標志位表示的是操作數(shù)1 與操作數(shù)2的關(guān)系(大、小、相等)例如當操作數(shù)1 大于操作操作數(shù)2 則此后的有GT 后綴的指令將可以執(zhí)行。指令示例:CMP R1R0 ;將寄存器R1 的值

8、與寄存器R0 的值相減并根據(jù)結(jié)果設(shè)置CPSR的標志位CMP R1#100;將寄存器R1 的值與立即數(shù)100相減并根據(jù)結(jié)果設(shè)置CPSR的標志位CMN 負數(shù)比較CMN 指令的格式為:CMN 條件 操作數(shù) 1 操作數(shù) 2CMN 指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)取反后進行比較同時更新CPSR 中條件標志位的值。該指令實際完成操作數(shù)1 和操作數(shù)2相加并根據(jù)結(jié)果更改條件標志位。指令示例:CMN R1R0 ; 將寄存器R1 的值與寄存器R0 的值相加并根據(jù)結(jié)果設(shè)置CPSR的標志位CMN R1#100; 將寄存器R1 的值與立即數(shù)100相加并根據(jù)結(jié)果設(shè)置CPSR的標志位TST 測試(按位

9、的與運算)TST指令的格式為:TST條件 操作數(shù) 1 操作數(shù) 2TST 指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)進行按位的與運算并根據(jù)運算結(jié)果更新CPSR中條件標志位的值。操作數(shù) 1 是要測試的數(shù)據(jù)而操作數(shù)2 是一個位掩碼該指令一般用來檢測是否設(shè)置了特定的位。指令示例:TST R1# 1 ;用于測試在寄存器R1 中是否設(shè)置了最低位(表示二進制數(shù))TST R1#0xffe ; 將寄存器R1 的值與立即數(shù)0xffe 按位與并根據(jù)結(jié)果設(shè)置CPSR的標志位TEQ 測試相等(按位的異或運算)TEQ 指令的格式為:TEQ 條件 操作數(shù) 1 操作數(shù) 2TEQ 指令用于把一個寄存器的內(nèi)容和另一個

10、寄存器的內(nèi)容或立即數(shù)進行按位的異或運算并根據(jù)運算結(jié)果更新CPSR中條件標志位的值。該指令通常用于比較操作數(shù)1 和操作數(shù)2 是否相等。指令示例:TEQ R1R2 ;將寄存器R1 的值與寄存器R2的值按位異或并根據(jù)結(jié)果設(shè)置CPSR的標志位ADD 相加ADD 指令的格式為:ADD 條件 S 目的寄存器操作數(shù)1 操作數(shù) 2ADD 指令用于把兩個操作數(shù)相加并將結(jié)果存放到目的寄存器中。操作數(shù) 1 應(yīng)是一個寄存器操作數(shù)2 可以是一個寄存器被移位的寄存器或一個立即數(shù)。指令示例:ADDADDADDR0R1R2R0R1#256R0R2R3LSL#1; R0 = R1 + R2; R0 = R1 + 256; R0

11、 = R2 + (R3 << 1)ADC帶進位相加ADC 指令的格式為:ADC 條件 S 目的寄存器操作數(shù)1 操作數(shù) 2ADC 指令用于把兩個操作數(shù)相加再加上CPSR中的C條件標志位的值并將結(jié)果存放到目的寄存器中。它使用一個進位標志位這樣就可以做比32 位大的數(shù)的加法注意不要忘記設(shè)置S后綴來更改進位標志。操作數(shù) 1 應(yīng)是一個寄存器操作數(shù)2 可以是一個寄存器被移位的寄存器或一個立即數(shù)。128 位數(shù)的加法第一個數(shù)由高到低存放在寄存器R7 R4 第二個數(shù)由R11 R8 運算結(jié)果由高到低存放在寄存器R3 R0:ADDS R0R4R8ADCS R1R5R9ADCS R2R6R10ADC R3

12、R7R11; 加低端的字 ; 加第二個字帶進位 ; 加第三個字帶進位 ; 加第四個字帶進位SUB 相減SUB 指令的格式為:SUB 條件 S 目的寄存器操作數(shù)1 操作數(shù) 2SUB 指令用于把操作數(shù)1 減去操作數(shù)2并將結(jié)果存放到目的寄存器中。操作數(shù) 1 應(yīng)是一個寄存器操作數(shù)2 可以是一個寄存器被移位的寄存器或一個立即數(shù)。該指令可用于有符號數(shù)或無符號數(shù)的減法運算。指令示例:SUB R0R1R2SUB R0R1#256SUB R0R2R3LSL#1; R0 = R1 - R2; R0 = R1 - 256; R0 = R2 - (R3 << 1)SBC 帶進位減法SBC指令的格式為:SB

13、C條件S 目的寄存器操作數(shù)1 操作數(shù) 2SBC指令用于把操作數(shù)1 減去操作數(shù)2再減去CPSR中的C條件標志位的反碼并將結(jié)果存放到目的寄存器中。操作數(shù)1 應(yīng)是一個寄存器操作數(shù)2 可以是一個寄存器被移位的寄存器或一個立即數(shù)。該指令使用進位標志來表示借位這樣就可以做大于32 位的減法注意不要忘記設(shè)置S 后綴來更改進位標志。該指令可用于有符號數(shù)或無符號數(shù)的減法運算。指令示例:SUBC R0R1R2 ;R0 = R1 - R2 - ! C并根據(jù)結(jié)果設(shè)置CPSR的進位標志位RSB 逆向減法RSB 指令的格式為:RSB條件 S 目的寄存器操作數(shù)1 操作數(shù) 2RSB 指令稱為逆向減法指令用于把操作數(shù)2 減去操

14、作數(shù)1 并將結(jié)果存放到目的寄存器中。操作數(shù) 1 應(yīng)是一個寄存器操作數(shù)2 可以是一個寄存器被移位的寄存器或一個立即數(shù)。該指令可用于有符號數(shù)或無符號數(shù)的減法運算。指令示例:RSB R0R1R2 ; R0 = R2 R1RSB R0R1#256 ; R0 = 256 R1RSB R0R2R3LSL#1 ; R0 = (R3 ? 1) - R2RSC 逆向帶進位減RSC指令的格式為:RSC條件 S 目的寄存器操作數(shù)1 操作數(shù) 2RSC指令用于把操作數(shù) 2減去操作數(shù)1 再減去 CPSR中的 C條件標志位的反碼并將結(jié)果存放到目的寄存器中。操作數(shù)1 應(yīng)是一個寄存器操作數(shù)2 可以是一個寄存器被移位的寄存器或一

15、個立即數(shù)。該指令使用進位標志來表示借位這樣就可以做大于32 位的減法注意不要忘記設(shè)置S 后綴來更改進位標志。該指令可用于有符號數(shù)或無符號數(shù)的減法運算。指令示例:RSC R0R1R2 ;R0 = R2 R1 - ! CAND 邏輯位與AND 指令的格式為:AND 條件 S 目的寄存器操作數(shù)1 操作數(shù) 2AND 指令用于在兩個操作數(shù)上進行邏輯與運算并把結(jié)果放置到目的寄存器中。操作數(shù) 1 應(yīng)是一個寄存器操作數(shù)2 可以是一個寄存器被移位的寄存器或一個立即數(shù)。該指令常用于屏蔽操作數(shù)1 的某些位。指令示例:AND R0R0 3 ;該指令保持R0的 0、 1 位其余位清零。ORR 邏輯位或ORR 指令的格式

16、為:ORR條件S 目的寄存器操作數(shù)1 操作數(shù) 2ORR 指令用于在兩個操作數(shù)上進行邏輯或運算并把結(jié)果放置到目的寄存器中。操作數(shù)1 應(yīng)是一個寄存器操作數(shù)2 可以是一個寄存器被移位的寄存器或一個立即數(shù)。該指令常用于設(shè)置操作數(shù) 1 的某些位。指令示例:ORR R0R0 3 ;該指令設(shè)置R0的 0、 1 位其余位保持不變。EOR 指令邏輯位 異或EOR 指令的格式為:EOR 條件 S 目的寄存器操作數(shù)1 操作數(shù) 2EOR 指令用于在兩個操作數(shù)上進行邏輯異或運算并把結(jié)果放置到目的寄存器中。操作數(shù) 1 應(yīng)是一個寄存器操作數(shù)2 可以是一個寄存器被移位的寄存器或一個立即數(shù)。該指令常用于反轉(zhuǎn)操作數(shù)1 的某些位。

17、指令示例:EOR R0R0 3 ;該指令反轉(zhuǎn)R0的 0、 1 位其余位保持不變。BIC 位清零BIC 指令的格式為:BIC 條件 S 目的寄存器操作數(shù)1 操作數(shù) 2BIC 指令用于清除操作數(shù)1 的某些位并把結(jié)果放置到目的寄存器中。操作數(shù)1 應(yīng)是一個寄存器操作數(shù)2 可以是一個寄存器被移位的寄存器或一個立即數(shù)。操作數(shù)2 為 32位的掩碼如果在掩碼中設(shè)置了某一位則清除這一位。未設(shè)置的掩碼位保持不變。指令示例:BIC R0R01011 ;該指令清除R0 中的位 0、 1、和3 其余的位保持不變。DCD 分配一個或者多個內(nèi)存word,四字節(jié)對齊ltorgdata1 DCD 1520data2 DCD m

18、em06 + 4 ;mem06 是一個 label 的地址* DCDU ,同 DCD ,但是不做對齊處理乘法指令與乘加指令A(yù)RM 微處理器支持的乘法指令與乘加指令共有6 條可分為運算結(jié)果為32 位和運算結(jié)果為64位兩類與前面的數(shù)據(jù)處理指令不同指令中的所有操作數(shù)、目的寄存器必須為通用寄存器不能對操作數(shù)使用立即數(shù)或被移位的寄存器同時目的寄存器和操作數(shù)1 必須是不同的寄存器。乘法指令與乘加指令共有以下6 條:1、 MUL 指令(相乘)MUL 指令的格式為:MUL 條件 S 目的寄存器操作數(shù)1 操作數(shù) 2MUL 指令完成將操作數(shù)1 與操作數(shù)2 的乘法運算并把結(jié)果放置到目的寄存器中同時可以根據(jù)運算結(jié)果設(shè)

19、置CPSR中相應(yīng)的條件標志位。其中操作數(shù)1 和操作數(shù)2均為 32位的有符號數(shù)或無符號數(shù)。 指令示例:MUL R0R1R2 ;R0 = R1 ×R2MULS R0R1R2 ;R0 = R1 × R2同時設(shè)置CPSR中的相關(guān)條件標志位2、 MLA 指令(帶累加的相乘)MLA 指令的格式為:MLA 條件 S 目的寄存器操作數(shù)1 操作數(shù) 2 操作數(shù) 3MLA 指令完成將操作數(shù)1 與操作數(shù)2 的乘法運算再將乘積加上操作數(shù)3 并把結(jié)果放置到目的寄存器中同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標志位。其中操作數(shù)1 和操作數(shù)2 均為32 位的有符號數(shù)或無符號數(shù)。指令示例:MLA R0R

20、1R2R3 ;R0 = R1 × R2 + R3MLAS R0R1R2R3 ;R0 = R1 × R2 + R3 同時設(shè)置CPSR中的相關(guān)條件標志位3、 SMULL 指令SMULL 指令的格式為:SMULL 條件 S 目的寄存器Low 目的寄存器High 操作數(shù) 1 操作數(shù) 2SMULL 指令完成將操作數(shù)1 與操作數(shù)2 的乘法運算并把結(jié)果的低32 位放置到目的寄存器Low 中結(jié)果的高32 位放置到目的寄存器High 中同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標志位。其中操作數(shù)1 和操作數(shù)2 均為32位的有符號數(shù)。指令示例:SMULL R0R1R2R3 ;R0 = ( R

21、2 × R3)的低32位;R1 = ( R2 × R3)的高32位4、 SMLAL 指令SMLAL 指令的格式為:SMLAL 條件 S 目的寄存器Low 目的寄存器High 操作數(shù) 1 操作數(shù) 2SMLAL 指令完成將操作數(shù)1 與操作數(shù)2 的乘法運算并把結(jié)果的低 32 位同目的寄存器Low中的值相加后又放置到目的寄存器Low 中結(jié)果的高32位同目的寄存器High 中的值相加后又放置到目的寄存器High 中同 時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標志位。其中操作數(shù) 1 和操作數(shù)2均為 32位的有符號數(shù)。對于目的寄存器Low 在指令執(zhí)行前存放64 位加數(shù)的低32 位指令執(zhí)

22、行后存放結(jié)果的低32 位。對于目的寄存器High 在指令執(zhí)行前存放64位加數(shù)的高32位指令執(zhí)行后存放結(jié)果的高32位。指令示例:SMLAL R0R1R2R3 ;R0 = ( R2 × R3)的低32位 R0;R1 = ( R2 × R3)的高32位 R15、 UMULL 指令UMULL 指令的格式為:UMULL 條件 S 目的寄存器Low 目的寄存器High 操作數(shù) 1 操作數(shù) 2UMULL 指令完成將操作數(shù)1 與操作數(shù)2 的乘法運算并把結(jié)果的低32 位放置到目的寄存器Low 中結(jié)果的高32 位放置到目的寄存器High 中同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標志位。其

23、中操作數(shù)1 和操作數(shù)2 均為32位的無符號數(shù)。指令示例:UMULL R0R1R2R3 ;R0 = ( R2 × R3)的低32位;R1 = ( R2 × R3)的高32位6、 UMLAL 指令UMLAL 指令的格式為:UMLAL 條件 S 目的寄存器Low 目的寄存器High 操作數(shù) 1 操作數(shù) 2UMLAL 指令完成將操作數(shù)1 與操作數(shù)2 的乘法運算并把結(jié)果的低 32 位同目的寄存器Low中的值相加后又放置到目的寄存器Low 中結(jié)果的高32位同目的寄存器High 中的值相加后又放置到目的寄存器High 中同 時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標志位。其中操作數(shù) 1

24、 和操作數(shù)2均為32位的無符號數(shù)。對于目的寄存器Low 在指令執(zhí)行前存放64 位加數(shù)的低32 位指令執(zhí)行后存放結(jié)果的低32 位。對于目的寄存器High 在指令執(zhí)行前存放64位加數(shù)的高32位指令執(zhí)行后存放結(jié)果的高32位。指令示例:UMLAL R0R1R2R3 ;R0 = ( R2 × R3)的低 32位 R0;R1 = ( R2 × R3)的高 32位 R1程序狀態(tài)寄存器訪問指令MRS 將程序狀態(tài)寄存器的內(nèi)容傳送到通用寄存器中MRS 指令的格式為:MRS條件 通用寄存器程序狀態(tài)寄存器(CPSR或 SPSR)MRS 指令用于將程序狀態(tài)寄存器的內(nèi)容傳送到通用寄存器中。該指令一般用

25、在以下兩種情況: . 當需要改變程序狀態(tài)寄存器的內(nèi)容時可用MRS 將程序狀態(tài)寄存器的內(nèi)容讀入通用寄存器修改后再寫回程序狀態(tài)寄存器。 . 當在異常處理或進程切換時需要保存程序狀態(tài)寄存器的值可先用該指令讀出程序狀態(tài)寄存器的值然后保存。指令示例:MRS R0CPSR ;傳送CPSR的內(nèi)容到R0MRS R0SPSR ;傳送SPSR的內(nèi)容到R0MSR 將操作數(shù)的內(nèi)容傳送到程序狀態(tài)寄存器的特定域中MSR 指令的格式為:MSR條件 程序狀態(tài)寄存器(CPSR或 SPSR) _域 操作數(shù)MSR 指令用于將操作數(shù)的內(nèi)容傳送到程序狀態(tài)寄存器的特定域中。其中操作數(shù)可以為通用寄存器或立即數(shù)。域 用于設(shè)置程序狀態(tài)寄存器中

26、需要操作的位32位的程序狀態(tài)寄存器可分為 4個域:位31 :24為條件位域用f表示;位23:16為狀態(tài)位域用s表示;位15:8 為擴展位域用x表示;位 7: 0 為控制位域用c表示 ;該指令通常用于恢復或改變程序狀態(tài)寄存器的內(nèi)容在使用時一般要在MSR 指令中指明將要操作的域。指令示例:MSR CPSRR0 ;傳送R0的內(nèi)容到CPSRMSR SPSRR0 ;傳送R0的內(nèi)容到SPSRMSR CPSR_cR0 ;傳送R0的內(nèi)容到SPSR但僅僅修改CPSR中的控制位域加載/存儲指令A(yù)RM 微處理器支持加載/存儲指令用于在寄存器和存儲器之間傳送數(shù)據(jù)加載指令用于將存儲器中的數(shù)據(jù)傳送到寄存器存儲指令則完成相

27、反的操作。常用的加載存儲指令如下:LDRLDR 指令的格式為:LDR 條件 目的寄存器<存儲器地址> <存儲器地址調(diào)整>LDR 指令用于從存儲器中將一個32 位的字數(shù)據(jù)傳送到目的寄存器中。該指令通常用于從存儲器中讀取32 位的字數(shù)據(jù)到通用寄存器然后對數(shù)據(jù)進行處理。當程序計數(shù)器PC作為目的寄存器時指令從存儲器中讀取的字數(shù)據(jù)被當作目的地址從而可以實現(xiàn)程序流程的跳轉(zhuǎn)。該指令在程序設(shè)計中比較常用且尋址方式靈活多樣請讀者認真掌握。指令示例:LDR R0R1; 將存儲器地址為R1 的字數(shù)據(jù)讀入寄存器R0。LDR R0R1R2; 將存儲器地址為R1+R2 的字數(shù)據(jù)讀入寄存器R0。LD

28、R R0R1#8; 將存儲器地址為R1+8 的字數(shù)據(jù)讀入寄存器R0。LDR R0R1R2 !;將存儲器地址為R1+R2 的字數(shù)據(jù)讀入寄存器R0并將新地址R1 R2寫入 R1 。LDR R0R1 8 !;將存儲器地址為R1+8的字數(shù)據(jù)讀入寄存器R0并將新地址R1 8寫入R1。LDR R0R1R2; 將存儲器地址為R1 的字數(shù)據(jù)讀入寄存器R0并將新地址R1 R2寫入 R1LDR R0R1R2LSL 2! ;將存儲器地址為R1 R2× 4的字數(shù)據(jù)讀入寄存器R0并將新地址R1 R2× 4 寫入R1 。LDR R0R1R2LSL 2;將存儲器地址為R1 的字數(shù)據(jù)讀入寄存器R0并將新地

29、址R1 R2×4寫入 R1。LDRBLDRB 指令的格式為:LDR 條件 B 目的寄存器<存儲器地址>LDRB 指令用于從存儲器中將一個8 位的字節(jié)數(shù)據(jù)傳送到目的寄存器中同時將寄存器的高24位清零。該指令通常用于從存儲器中讀取8 位的字節(jié)數(shù)據(jù)到通用寄存器然后對數(shù)據(jù)進行處理。當程序計數(shù)器PC作為目的寄存器時指令從存儲器中讀取的字數(shù)據(jù)被當作目的地址從而可以實現(xiàn)程序流程的跳轉(zhuǎn)。指令示例:LDRB R0R1 ; 將存儲器地址為R1 的字節(jié)數(shù)據(jù)讀入寄存器R0并將 R0 的高 24位清零。LDRB R0R1 8 ;將存儲器地址為R1 8的字節(jié)數(shù)據(jù)讀入寄存器R0并將 R0 的高 24位

30、清零。LDRH 指令LDRH 指令的格式為:LDR 條件 H 目的寄存器<存儲器地址>LDRH 指令用于從存儲器中將一個16 位的半字數(shù)據(jù)傳送到目的寄存器中同時將寄存器的高16 位清零。該指令通常用于從存儲器中讀取16 位的半字數(shù)據(jù)到通用寄存器然后對數(shù)據(jù)進行處理。當程序計數(shù)器PC 作為目的寄存器時指令從存儲器中讀取的字數(shù)據(jù)被當作目的地址從而可以實現(xiàn)程序流程的跳轉(zhuǎn)。指令示例:LDRH R0R1 ; 將存儲器地址為R1 的半字數(shù)據(jù)讀入寄存器R0并將 R0 的高16位清零。LDRH R0R1 8 ;將存儲器地址為R1 8的半字數(shù)據(jù)讀入寄存器R0并將 R0的高 16位清零。LDRH R0R

31、1R2 ; 將存儲器地址為R1 R2 的半字數(shù)據(jù)讀入寄存器R0 并將 R0的高 16位清零。4、 STR 指令STR 指令的格式為:STR條件 源寄存器<存儲器地址>STR 指令用于從源寄存器中將一個32 位的字數(shù)據(jù)傳送到存儲器中。該指令在程序設(shè)計中比較常用且尋址方式靈活多樣使用方式可參考指令LDR 。指令示例:STR R0R1 8 ;將R0中的字數(shù)據(jù)寫入以R1 為地址的存儲器中并將新地址R18寫入R1。STR R0R1 8 ;將R0中的字數(shù)據(jù)寫入以R18為地址的存儲器中。5、 STRB 指令STRB 指令的格式為:STR條件 B 源寄存器<存儲器地址>STRB 指令用

32、于從源寄存器中將一個8 位的字節(jié)數(shù)據(jù)傳送到存儲器中。該字節(jié)數(shù)據(jù)為源寄存器中的低8 位。指令示例:STRB R0R1 ; 將寄存器R0 中的字節(jié)數(shù)據(jù)寫入以R1 為地址的存儲器中。STRB R0R1 8 ; 將寄存器R0 中的字節(jié)數(shù)據(jù)寫入以R1 8 為地址的存儲器中。6、 STRH 指令STRH 指令的格式為:STR條件 H 源寄存器<存儲器地址>STRH 指令用于從源寄存器中將一個16 位的半字數(shù)據(jù)傳送到存儲器中。該半字數(shù)據(jù)為源寄存器中的低16 位。指令示例:STRH R0R1 ; 將寄存器R0 中的半字數(shù)據(jù)寫入以R1 為地址的存儲器中。STRH R0R1 8 ; 將寄存器R0 中的

33、半字數(shù)據(jù)寫入以R1 8 為地址的存儲器中。六、批量數(shù)據(jù)加載/存儲指令。ARM 微處理器所支持批量數(shù)據(jù)加載/存儲指令可以一次在一片連續(xù)的存儲器單元和多個寄存器之間傳送數(shù)據(jù)批量加載指令用于將一片連續(xù)的存儲器中的數(shù)據(jù)傳送到多個寄存器批量數(shù)據(jù)存儲指令則完成相反的操作。常用的加載存儲指令如下:LDM(或STM )指令LDM (或STM)指令的格式為:LDM (或 STM) 條件 類型 基址寄存器! 寄存器列表 LDM (或STM)指令用于從由基址寄存器所指示的一片連續(xù)存儲器到寄存器列表所指示的多個寄存器之間傳送數(shù)據(jù)該指令的常見用途是將多個寄存器的內(nèi)容入?;虺鰲?。其中 類型 為以下幾種情況:IA 每次傳送

34、后地址加1;IB 每次傳送前地址加1;DA 每次傳送后地址減1;DB 每次傳送前地址減1;FD 滿遞減堆棧;ED 空遞減堆棧;FA 滿遞增堆棧;EA 空遞增堆棧; ! 為可選后綴若選用該后綴則當數(shù)據(jù)傳送完畢之后將最后的地址寫入基址寄存器否則基址寄存器的內(nèi)容不改變。基址寄存器不允許為R15 寄存器列表可以為R0 R15 的任意組合。 為可選后綴當指令為LDM 且寄存器列表中包含R15選用該后綴時表示:除了正常的數(shù)據(jù)傳送之外還將SPSR復制到CPSR。同時該后綴還表示傳入或傳出的是用戶模式下的寄存器而不是當前模式下的寄存器。指令示例:STMFD R13!R0R4-R12LR ; 將寄存器列表中的寄

35、存器(R0R4到 R12LR)存入堆棧。LDMFD R13!R0R4-R12PC ; 將堆棧內(nèi)容恢復到寄存器(R0R4到 R12LR)。七、數(shù)據(jù)交換指令1、 SWP 指令SWP 指令的格式為:SWP條件 目的寄存器源寄存器1源寄存器2SWP 指令用于將源寄存器2 所指向的存儲器中的字數(shù)據(jù)傳送到目的寄存器中同時將源寄存器1 中的字數(shù)據(jù)傳送到源寄存器2 所指向的存儲器中。顯然當源寄存器1 和目的寄存器為同一個寄存器時指令交換該寄存器和存儲器的內(nèi)容。指令示例:SWP R0R1R2 ; 將 R2 所指向的存儲器中的字數(shù)據(jù)傳送到R0 同時將 R1 中的字數(shù)據(jù)傳送到R2 所指向的存儲單元。SWP R0R0

36、R1 ; 該指令完成將R1 所指向的存儲器中的字數(shù)據(jù)與R0中的數(shù)據(jù)交換。2、 SWPB 指令SWPB 指令的格式為:SWP條件 B 目的寄存器源寄存器1源寄存器2SWPB 指令用于將源寄存器2所指向的存儲器中的字節(jié)數(shù)據(jù)傳送到目的寄存器中目的寄存器的高24清零同時將源寄存器1 中的字節(jié)數(shù)據(jù)傳送到源寄存器2所指向的存儲器中。顯然當源寄存器 1 和目的寄存器為同一個寄存器時指令交換該寄存器和存儲器的內(nèi)容。指令示例:SWPB R0R1R2 ; 將 R2 所指向的存儲器中的字節(jié)數(shù)據(jù)傳送到R0R0的高24位清零同時將R1中的低 8 位數(shù)據(jù)傳送到R2 所指向的存儲單元。SWPB R0R0R1 ;該指令完成將

37、R1 所指向的存儲器中的字節(jié)數(shù)據(jù)與R0 中的低 8位數(shù)據(jù)交換。八、移位指令1、 LSL(或 ASL)LSL (或ASL )的格式為:通用寄存器LSL (或ASL ) 操作數(shù)LSL (或ASL )可完成對通用寄存器中的內(nèi)容進行邏輯(或算術(shù))的左移操作按操作數(shù)所指定的數(shù)量向左移位低位用零來填充。其中操作數(shù)可以是通用寄存器也可以是立即數(shù)(031)。操作示例MOV R0 R1 LSL #2 ; 將 R1 中的內(nèi)容左移兩位后傳送到R0 中。2、 LSRLSR 的格式為:通用寄存器LSR 操作數(shù)LSR 可完成對通用寄存器中的內(nèi)容進行右移的操作按操作數(shù)所指定的數(shù)量向右移位左端用零來填充。其中操作數(shù)可以是通用

38、寄存器也可以是立即數(shù)(0 31)。操作示例:MOV R0 R1 LSR #2 ; 將 R1 中的內(nèi)容右移兩位后傳送到R0 中左端用零來填充。3、 ASRASR 的格式為:通用寄存器ASR 操作數(shù)ASR 可完成對通用寄存器中的內(nèi)容進行右移的操作按操作數(shù)所指定的數(shù)量向右移位左端用第31 位的值來填充。其中操作數(shù)可以是通用寄存器也可以是立即數(shù)(0 31)。操作示例:MOV R0 R1 ASR #2 ; 將 R1 中的內(nèi)容右移兩位后傳送到R0中左端用第31 位的值來填充。4、 RORROR的格式為:通用寄存器ROR 操作數(shù)ROR可完成對通用寄存器中的內(nèi)容進行循環(huán)右移的操作按操作數(shù)所指定的數(shù)量向右循環(huán)移

39、位左端用右端移出的位來填充。其中操作數(shù)可以是通用寄存器也可以是立即數(shù)(0 31)。顯然當進行32 位的循環(huán)右移操作時通用寄存器中的值不改變。操作示例:MOV R0 R1 ROR #2 ; 將 R1 中的內(nèi)容循環(huán)右移兩位后傳送到R0中。5、 RRXRRX 的格式為:通用寄存器RRX 操作數(shù)RRX 可完成對通用寄存器中的內(nèi)容進行帶擴展的循環(huán)右移的操作按操作數(shù)所指定的數(shù)量向右循環(huán)移位左端用進位標志位C 來填充。其中操作數(shù)可以是通用寄存器也可以是立即數(shù)( 0 31)。 操作示例: MOV R0 R1 RRX #2 ; 將 R1 中的內(nèi)容進行帶擴展的循環(huán)右移兩位后傳送到R0中。九、協(xié)處理器指令1、 CDP 指令CDP 指令的格式為:CDP 條件 協(xié)處理器編碼協(xié)處理器操作碼1 目的寄存器源寄存器1 源寄存器2 協(xié)處理器操作碼 2。CDP 指令用于ARM 處理器通知ARM 協(xié)處理器執(zhí)行特定的操作若協(xié)處理器不能成功完成特定的操

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論