-ARM應(yīng)用系統(tǒng)開發(fā)詳解筆記_第1頁
-ARM應(yīng)用系統(tǒng)開發(fā)詳解筆記_第2頁
-ARM應(yīng)用系統(tǒng)開發(fā)詳解筆記_第3頁
-ARM應(yīng)用系統(tǒng)開發(fā)詳解筆記_第4頁
-ARM應(yīng)用系統(tǒng)開發(fā)詳解筆記_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第第頁—ARM應(yīng)用系統(tǒng)開發(fā)詳解筆記一跳轉(zhuǎn)指令跳轉(zhuǎn)指令用于實現(xiàn)程序流程的跳轉(zhuǎn),在ARM程序中有兩種方法可以實現(xiàn)程序流程的跳轉(zhuǎn):—使用專門的跳轉(zhuǎn)指令?!苯酉虺绦蛴嫈?shù)器PC寫入跳轉(zhuǎn)地址值。ARM指令集中的跳轉(zhuǎn)指令可以完成從當(dāng)前指令向前或向后的32MB的地址空間的跳轉(zhuǎn),包括以下4條指令:—B跳轉(zhuǎn)指令—BL帶返回的跳轉(zhuǎn)指令—BLX帶返回和狀態(tài)切換的跳轉(zhuǎn)指令—BX帶狀態(tài)切換的跳轉(zhuǎn)指令BB{條件}目標地址

B指令是最簡單的跳轉(zhuǎn)指令。注意存儲在跳轉(zhuǎn)指令中的實際值是相對當(dāng)前PC值的一個偏移量,而不是一個絕對地址,它的值由匯編器來計算(參考尋址方式中的相對尋址)它是24位有符號數(shù),左移兩位后有符號擴展為32位,表示的有效偏移為26位(前后32MB的地址空間)。

BL指令BL{條件}目標地址

BL是另一個跳轉(zhuǎn)指令,但跳轉(zhuǎn)之前,會在寄存器R14中保存PC的當(dāng)前內(nèi)容,因此,可以通過將R14的內(nèi)容重新加載到PC中,來返回到跳轉(zhuǎn)指令之后的那個指令處執(zhí)行。該指令是實現(xiàn)子程序調(diào)用的一個基本但常用的手段。例:

BLLabel;當(dāng)程序無條件跳轉(zhuǎn)到標號Label處執(zhí)行時,同時將當(dāng)前的PC值保存到R14中。

BLX指令BLX指令從ARM指令集跳轉(zhuǎn)到指令中所指定的目標地址,并將處理器的工作狀態(tài)有ARM狀態(tài)切換到Thumb狀態(tài)。該指令同時將PC的當(dāng)前內(nèi)容保存到寄存器R14中。

BX指令BX指令跳轉(zhuǎn)到指令中所指定的目標地址,目標地址處的指令既可以是ARM指令,也可以是Thumb指令。

二數(shù)據(jù)處理指令數(shù)據(jù)處理指令可分為數(shù)據(jù)傳送指令、算術(shù)邏輯運算指令和比較指令等。數(shù)據(jù)處理指令包括:MOV數(shù)據(jù)傳送指令、MVN數(shù)據(jù)取反傳送指令、CMP比較指令、CMN反值比較指令、TST位測試指令、TEQ相等測試指令、ADD加法指令、ADC帶進位加法指令、SUB減法指令、SBC帶借位減法指令、RSB逆向減法指令、RSC帶借位的逆向減法指令、AND邏輯與指令、ORR邏輯或指令、EOR邏輯異或指令、BIC位清除指令。MOV指令MOV{條件}{S}目的寄存器,源操作數(shù)

MOV指令將源操作數(shù)加載到目的寄存器。其中S選項決定指令的操作是否影響CPSR中條件標志位的值,當(dāng)沒有S時指令不更新CPSR中條件標志位的值。例:MOVR1,R0,LSL#3;將寄存器R0的值左移3位后傳送到R1。

MVN指令MVN{條件}{S}目的寄存器,源操作數(shù)

MOV指令不同之處是在傳送之前將源操作數(shù)按位被取反。例:

MVNR0,#0;將立即數(shù)0取反傳送到寄存器R0中,完成后R0=-1。

CMP指令CMP{條件}操作數(shù)1,操作數(shù)2

比較操作數(shù)1和操作數(shù)2,更新CSPR不保存結(jié)果。標志位表示的是操作數(shù)1與操作數(shù)2的關(guān)系(大、小、相等)。例如,當(dāng)操作數(shù)1大于操作操作數(shù)2,則此后的有GT后綴的指令將可以執(zhí)行。例:CMPR1,#100;將寄存器R1的值與立即數(shù)100相減,并根據(jù)結(jié)果設(shè)置CPSR的標志位

CMN指令CMN{條件}操作數(shù)1,操作數(shù)2

實際完成操作數(shù)1和操作數(shù)2相加,并根據(jù)結(jié)果更改條件標志位。例:CMNR1,R0;將寄存器R1的值與寄存器R0的值相加,并根據(jù)結(jié)果設(shè)置CPSR

TST指令TST{條件}操作數(shù)1,操作數(shù)2

TST指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)進行按位的與運算,并根據(jù)運算結(jié)果更新CPSR中條件標志位的值。操作數(shù)1是要測試的數(shù)據(jù),而操作數(shù)2是一個位掩碼,該指令一般用來檢測是否設(shè)置了特定的位。例:

TSTR1,#0xffe;將寄存器R1的值與立即數(shù)0xffe按位與,并根據(jù)結(jié)果設(shè)置CPSR

TEQ指令TEQ{條件}操作數(shù)1,操作數(shù)2TEQ指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)進行按位的異或運算,并根據(jù)運算結(jié)果更新CPSR中條件標志位的值。該指令通常用于比較操作數(shù)1和操作數(shù)2是否相等。例:

TEQR1,R2;將寄存器R1的值與寄存器R2的值按位異或,并根據(jù)結(jié)果設(shè)置CPSR

ADD指令A(yù)DD{條件}{S}目的寄存器,操作數(shù)1,操作數(shù)2

ADDR0,R2,R3,LSL#1;R0=R2+(R3,操作數(shù)

MSR指令用于將操作數(shù)的內(nèi)容傳送到程序狀態(tài)寄存器的特定域中。其中,操作數(shù)可以為通用寄存器或立即數(shù)。用于設(shè)置程序狀態(tài)寄存器中需要操作的位,32位的程序狀態(tài)寄存器可分為4個域:位[31:24]為條件標志位域,用f表示;位[23:16]為狀態(tài)位域,用s表示;位[15:8]為擴展位域,用x表示;位[7:0]為控制位域,用c表示;該指令通常用于恢復(fù)或改變程序狀態(tài)寄存器的內(nèi)容,在使用時,一般要在MSR指令中指明將要操作的域。MSRCPSR_c,R0;傳送R0的內(nèi)容到SPSR,但僅僅修改CPSR中的控制位域五加載/存儲指令LDR指令LDR{條件}目的寄存器,LDRR0,[R1,R2];將存儲器地址為R1+R2的字數(shù)據(jù)讀入寄存器R0。LDRR0,[R1,#8];將存儲器地址為R1+8的字數(shù)據(jù)讀入寄存器R0。LDRR0,[R1,R2]!;將存儲器地址為R1+R2的字數(shù)據(jù)讀入寄存器R0,并將新地址R1+R2寫入R1。LDRR0,[R1,#8]!;將存儲器地址為R1+8的字數(shù)據(jù)讀入寄存器R0,并將新地址R1+8寫入R1。LDRR0,[R1],R2;將存儲器地址為R1的字數(shù)據(jù)讀入寄存器R0,并將新地址R1+R2寫入R1。LDRR0,[R1,R2,LSL#2]!;將存儲器地址為R1+R2×4的字數(shù)據(jù)讀入寄存器R0,并將新地址R1+R2×4寫入R1。LDRR0,[R1],R2,LSL#2;將存儲器地址為R1的字數(shù)據(jù)讀入寄存器R0,并將新地址R1+R2×4寫入R1。帶!號的指令和[]外有寄存器的指令,都要將新地址寫入R1六批量數(shù)據(jù)加載/存儲指令LDM(或STM)指令

LDM(或STM){條件}{類型}基址寄存器{!},寄存器列表{}LDM(或STM)指令用于從由基址寄存器所指示的一片連續(xù)存儲器到寄存器列表所指示的多個寄存器之間傳送數(shù)據(jù),該指令的常見用途是將多個寄存器的內(nèi)容入?;虺鰲?。其中,{類型}為以下幾種情況:*IA每次傳送后地址加1;*IB每次傳送前地址加1;*DA每次傳送后地址減1;*DB每次傳送前地址減1;*FD滿遞減堆棧;*ED空遞減堆棧;*FA滿遞增堆棧;*EA空遞增堆棧;*{!}為可選后綴,若選用該后綴,則當(dāng)數(shù)據(jù)傳送

溫馨提示

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

最新文檔

評論

0/150

提交評論