ARM指令系統(tǒng)._第1頁
ARM指令系統(tǒng)._第2頁
免費預覽已結(jié)束,剩余31頁可下載查看

下載本文檔

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

文檔簡介

1、第三章ARM指令系統(tǒng)3.1數(shù)據(jù)處理指令3.2數(shù)據(jù)傳送指令3.3控制流指令3.4匯編語言程序R0R1R25AR3nR4sR5R65R7DR8cR9R10/R11R12oMBR13(SP)3R14(LP)丿cR15(PC)NMCPSRzUsor模式RAMI/OARM編程模型匯編語言的源語句行的一般格式是: label instruct ion I direct iveI pseudo-ins truet ion; comment注意:即使沒有標號,指令、偽指令和命令前面也必須有一個空白, 例如一個空格或制表符。源語句行的所有三部分都是可選的??梢允褂每招衼硎勾a 更具可讀性大小寫規(guī)則指令記憶碼、命

2、令和符號寄存器名稱可以用大寫或小寫編寫, 但不能混合使用大小寫。標號:標號是表示地址的符號。在匯編時計算由標號指定的地址。 匯編器計算標號的地址,該地址是相對于所定義標號所在 段的原點的。引用相同段內(nèi)的一個標號時,可以使用程序 計數(shù)器加上或減去一個偏移量。這被稱為相對程序的尋址。其它段中的標號地址是在鏈接時計算的,此時鏈 接程序已在存儲器中為每個段分配了具體的位置。注釋: 一行中的第一個分號用于標記注釋的開始,但不包括出現(xiàn) 在一個字符串常數(shù)內(nèi)的分號。行的末尾就是注釋的結(jié)束。一個注釋本身就是一個有效的行。匯編程序?qū)⒑雎运凶?釋。常數(shù):常數(shù)可以數(shù)值、布爾值、字符或字符串 數(shù)字可以接受下列形式的數(shù)

3、字常數(shù):十進制數(shù),如 123 十六進制數(shù),如,0 x7B布爾值布爾常數(shù) TRUE 和 FALSE 必須書寫為TRUE和FALSE。字符字符常數(shù)由左、右單引號組成,中間括住單個字符或一個轉(zhuǎn)義字符, 采用標準的 C 轉(zhuǎn)義字符。字符串字符串由左、右雙引號括住多個字符或空格而組成。如果在一個字 符串內(nèi)使用了雙引號或美元字符作為文字文本字符,則必須用一對適 當?shù)淖址麃肀硎舅鼈儭@?,如果需要在字符串?nèi)使用單個$,則必 須使用$。在字符串常數(shù)內(nèi)可以使用標準的 C 轉(zhuǎn)義序列。 ARM匯編語言模塊的示例AREA ARMex, CODE, READONLY;Name this block of code ARM

4、exENTRY;Mark first instruction to executestartMOVrO, #10;Set up parametersMOVr1,#3ADDrO, rO, r1;rO = rO + r1stopMOVrO, #0 x18;angel_SWIreason_ReportExceptionLDRr1, =0 x20026;ADP_Stopped_ApplicationExitSVC#0 x123456;ARM semihosting (formerly SWI)END;Mark end of file3.1數(shù)據(jù)處理指令 AR M的數(shù)據(jù)處理指令使得程序員能夠完成等存器中數(shù)

5、據(jù)的 算術(shù)和邏輯操作。其他指令只是傳送數(shù)據(jù)和控制程序的順序。數(shù)據(jù)處理指令的典型特征是需要兩個操作數(shù),產(chǎn)生單個結(jié) 果。所有的操作數(shù)是32位,或來自寄存器、或是指令中定義的 立即數(shù)。如果有結(jié)果,則結(jié)果為32位寬并只能在寄存器中。每一個操作數(shù)寄存器和結(jié)果寄存器都在指令中獨立指定, 也即ARM指令使用3地址模式。ADD rO, r1, r2; rO := r1 + r2注意指令中操作數(shù)的順序,rO是結(jié)果寄存器,然后是第一操作數(shù)(門),最后是第二操作數(shù)(r2)。當指令執(zhí)行后,對系統(tǒng)狀態(tài)而言唯一的變化是目的寄存器rO的值。CPSR中的標志位(N、Z、C、V)也可有選擇地變化。1、算術(shù)操作這類指令對兩個32

6、位操作數(shù)進行二進制算術(shù)操作。ADD rO , r1 , r2;rO := r1 + r2ADC rO , r1 , r2;rO := r1 + r2 + CSUB rO , r1 , r2;rO := r1r2SBC rO , r1 , r2;rO := r1r2 + C12、邏輯操作這類指令對輸入操作數(shù)的對應(yīng)位進行指定的布爾邏輯操作。 AND rO , r1 , r2;r0 i := r1 i and r2 i ORR rO , r1 , r2;r0 := r1 or r2EOR rO , r1 , r2;r0 := r1 xor r2BIC rO , r1 , r2;r0 := r1 an

7、d not r23、 寄存器傳送操作這些指令無第一操作數(shù)(省略),只是簡單的將第二操作數(shù)傳送到結(jié)果寄存器。MOVrO , r2:rO:= r2MVNrO, r2;r0 := not r24、 比較操作這類指令不產(chǎn)生結(jié)果(省略結(jié)果寄存器),僅影響CPSR中的相應(yīng)位(N、Z、C. V)。CMPr1 , r2:r1r2 ccCMNr1 , r2:r1+ r2 T ccTSTr1 , r2:r1and r2 T ccTEQr1 , r2:r1xor r2 T cc5、立即數(shù)操作因為立即數(shù)是在32位指令中編碼,所以不可能將32位都作 為立即數(shù),只能是一個8位數(shù)并按兩位數(shù)為邊界進行的調(diào) 整。立即數(shù)=(0-

8、255)x22nADD r3 , r3 , #1AND r8 , r7 , #& ff6、寄存器移位操作這類指個允許第二個操作數(shù)(寄存器)在同第一個操作數(shù)(寄存器)運算之前完成移位操作。ADD r3 , r2 , r1 , LSL #3 ;r3 := r2 + r1 x 8這是一條在單個時鐘周期內(nèi)執(zhí)行的ARM指令,許多處理器 采用獨立的移位操作指令。LSL(邏輯左移)、LSR(邏輯右移)ASL(算術(shù)左移)、ASR(算術(shù)右移)ROR(循環(huán)右移)0=n1018|6r9多寄存器傳送尋址模式16r9 -100C16100016LDMDA r9!, r0 , rl ,r5 STMIB r9!,

9、rO , rl ,r5 LDMIB r9!, rO , rl ,r5 STMDB r9!, rO , rl ,r5 LDMDB r9!, rO, rl ,r5 例如:把8個字從rO指向的位置拷貝到門指向的位置,即LDMIArO ! , r2 - r9 STM IAr1 , r2 - r9 執(zhí)行后,rO增加了32。這是由于“!”使其自動變址8個字 節(jié),而rl沒有改變。如果r2r9含有有用的數(shù)據(jù),則可以先把它們壓入堆棧,即STMFDr13!,r2-r9;將寄存器壓棧LDMIArO !, r2 - r9STMIAr1, r2 - r9LDMFDr13 ! , r2-r9;從堆棧中恢復后綴“FD”表示

10、滿遞減堆棧尋址模式。注意,在堆棧操作 中幾乎總是要指定自動變址,以便保證堆棧指針具有一致 的行為。多寄存器Load和Store指令為保存和恢復處理器狀態(tài)以及 在存儲器中移動數(shù)據(jù)塊提供了一種有效方式。它節(jié)省代碼 空間,并且其執(zhí)行速度提高了4倍。這個重要的優(yōu)點說明,值得認真考慮數(shù)據(jù)在存儲器中的組 織方式,以便增大使用多寄存器傳送指令去訪問存儲器的 潛力。遞增A(入棧時)遞減D(入棧時)滿空滿空增 值先增STMIBSTMFALDMIBLDMED后增STMIASTMEALDMIALDMFD減 值先減LDMDBLDMEASTMDBSTMFD后減LDMDALDMFASTMDASTMED3.3控制流指令控制

11、流指令既不處理數(shù)據(jù),也不存釵數(shù)據(jù),它只是確定下 一步執(zhí)行哪一條指令。轉(zhuǎn)移指令條件轉(zhuǎn)移條件執(zhí)行轉(zhuǎn)移鏈接子程序返回監(jiān)控程序調(diào)用跳轉(zhuǎn)表轉(zhuǎn)移指令(無條件轉(zhuǎn)移)將程序的執(zhí)行從一個位置切換到另一個位置最常用的方法 是使用轉(zhuǎn)移(branch )指令,B LABEL LABEL.或LABEL. B LABEL條件轉(zhuǎn)移 有時想讓微處理器決定是否進行轉(zhuǎn)移。MOVr0,#0;計數(shù)器初始化LOOP ADDrO , rO, #1;循環(huán)計數(shù)器加一CMPr0,#10;與循環(huán)的限制比較BNELOOP;如不相等則返回;否則循環(huán)終止轉(zhuǎn)移解釋一般應(yīng)用B無條件總是執(zhí)行轉(zhuǎn)移BEQ相等BNE不等BPL正BMI負BCC BLO無進位、低于

12、無符號婁攵比較BCS BHS有進位、高于或相等無符號數(shù)比較BVC無溢出有符號數(shù)比較BVS有溢出有符號數(shù)比較BGT大于有符號數(shù)比較BGE大于或相等有符號數(shù)比較BLT小于有符號數(shù)比較BLE小于或相等有符號數(shù)比較BHI高于無符號數(shù)比較BLS低于或相等無符號數(shù)比較列在表中同一行的一對條件(如和)的含義相同,并得到 同樣的二進制代碼。但兩者都是有用的,因在特定的環(huán)境 中,每一種條件都可能使匯編語言源代碼的編譯更加容易。當表中提到有符號數(shù)和無符號數(shù)的比較時,它并不是要選 擇比較指令本身,而只是支持操作數(shù)選擇的解釋。條件執(zhí)行 ARM指令集有一條不尋常的特征,就是條件執(zhí)行不僅應(yīng)用 于轉(zhuǎn)移指令,也應(yīng)用于所有的A

13、RM指令。CMPr0,#5BEQBYPASS:if (rO != 5 ) ADDr1 , r1 ,r0;r1 := r1+ r0r2SUBr1 , r1 ,r2;BYPASS 替代為CMPr0,#5;if (rO != 5 ) ADDNEr1 , r1 ,r0;r1 := r1+ rOr2SUBNEr1 , r1 ,r2;要激活條件執(zhí)行,須在3字符的操作碼之后增加2字符的條 件碼(條件碼應(yīng)在其它任何修正碼之前)。:if ( a = b) & ( c= d) e+;CMPrO , r1CMPEQr2 , r3ADDEQr4 , r4 ,#1由于第二個比較指令使用了條件執(zhí)行,從而實現(xiàn)了if

14、語句 中的邏輯“與”。使用條件執(zhí)行的示例Euclid(歐幾里德)的最大公因子(gcd)算法的兩種實現(xiàn) 方法。它說明了如何能使用條件執(zhí)行來改進代碼密度和執(zhí) 行速度。在C語言中,該算法可以表示如下:int gcd (int a, int b) while (a != b) if (a b)a = a - b;elseb = b - a;return a;采用下列代碼,可以只用帶條件跳轉(zhuǎn)來實現(xiàn)gcd函數(shù):gcd CMPrO, rlBEQendBLTlessSUBSrO, rO, rl;could be SUB rO, rO, rl for ARMBgcdless SUBSrl, rl, rO;cou

15、ld be SUB r1, r1, rO for ARMBgcdend由于跳轉(zhuǎn)數(shù)目的原因, 該代碼的長度是七條指令。 每次獲 得一個跳轉(zhuǎn)時,處理器必須重填流水線并從新位置繼續(xù)執(zhí) 行。其它指令和未執(zhí)行的跳轉(zhuǎn)各使用一個周期。通過使用ARM指令集的條件執(zhí)行功能,可以僅用四個指 令實現(xiàn)gcd函數(shù):gcd CMP rO, rlSUBGT rO, rO, rlSUBLE rl, rl, rOBNE gcdEND除了減小了代碼大小之外,此代碼在大多數(shù)情況下執(zhí)行速 度更快。在這種情況下,用條件執(zhí)行的所有指令來代替跳 轉(zhuǎn)后,可節(jié)省三個周期。當rO = rl時兩種代碼的執(zhí)行周期數(shù)相等。在其他情況下, 代碼的條件執(zhí)

16、行的執(zhí)行周期數(shù)最少。所有指令為條件跳轉(zhuǎn)R0:aR1 :b12121212121111所有指令為條件執(zhí)行R0R1 :Instructio nCycles(7)轉(zhuǎn)移鏈接指令:通常要調(diào)用子程序,并且當子程序執(zhí)行完時能夠恢復到原 來的代碼位置,這就需要把執(zhí)行轉(zhuǎn)移之前程序計數(shù)器門5的值保存下來。 ARM使用轉(zhuǎn)移鏈接指令BL來提供這一功能。該指令完全 像轉(zhuǎn)移指令一樣執(zhí)行轉(zhuǎn)移,并將轉(zhuǎn)移后面緊接的一條指令 的地址保存到連接寄存器門4中。BL SUBR;轉(zhuǎn)移到SUBR.;返回到這里,SUBR.;子程序入口 MOV pc , r14;返回注意:由于返回地址保存在門4寄存器里,子程序不應(yīng)嵌 套,否則,新的返回地址將

17、覆蓋原來的返回地址。常規(guī)做 法是將門4入棧。BLSUB1;轉(zhuǎn)移到SUB1.;返回到這里SUB1STMFD r13! , r0-r2, r14;保存現(xiàn)場BL SUB2 SUB2.子程序返回指令:為了返回調(diào)用程序,必須將轉(zhuǎn)移鏈接指令保存在n 4中的程序計數(shù)器值拷貝到程序寄存器。SUBR ;子程序入口 MOV pc,r14;把和4拷貝到門5來返回對子程序嵌套返回SUB1STMFDr13 !, r0-r2 , r14BLSUB2 LDMFDr13 !, r0-r2 , pcAREAsubrout, CODE, READONLY;Name this block of codeENTRY;Mark fir

18、st instruction to executestartMOVrO, #10;Set up parametersMOVr1,#3BLdoadd;Call subroutinestopMOVr0, #0 x18;angel_SWIreason_ReportExceptionLDRr1, =0 x20026; ADP_Stopped_ApplicationExitSVC#0 x123456;ARM semihosting (formerly SWI)doadd ADDrO, rO, r1;Subroutine codeBXlr;Return from subroutineEND;Mark end of file監(jiān)控程序調(diào)用監(jiān)控程序提供了委托訪

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論