

下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rè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注意:即使沒有標(biāo)號,指令、偽指令和命令前面也必須有一個(gè)空白, 例如一個(gè)空格或制表符。源語句行的所有三部分都是可選的??梢允褂每招衼硎勾a 更具可讀性大小寫規(guī)則指令記憶碼、命
2、令和符號寄存器名稱可以用大寫或小寫編寫, 但不能混合使用大小寫。標(biāo)號:標(biāo)號是表示地址的符號。在匯編時(shí)計(jì)算由標(biāo)號指定的地址。 匯編器計(jì)算標(biāo)號的地址,該地址是相對于所定義標(biāo)號所在 段的原點(diǎn)的。引用相同段內(nèi)的一個(gè)標(biāo)號時(shí),可以使用程序 計(jì)數(shù)器加上或減去一個(gè)偏移量。這被稱為相對程序的尋址。其它段中的標(biāo)號地址是在鏈接時(shí)計(jì)算的,此時(shí)鏈 接程序已在存儲器中為每個(gè)段分配了具體的位置。注釋: 一行中的第一個(gè)分號用于標(biāo)記注釋的開始,但不包括出現(xiàn) 在一個(gè)字符串常數(shù)內(nèi)的分號。行的末尾就是注釋的結(jié)束。一個(gè)注釋本身就是一個(gè)有效的行。匯編程序?qū)⒑雎运凶?釋。常數(shù):常數(shù)可以數(shù)值、布爾值、字符或字符串 數(shù)字可以接受下列形式的數(shù)
3、字常數(shù):十進(jìn)制數(shù),如 123 十六進(jìn)制數(shù),如,0 x7B布爾值布爾常數(shù) TRUE 和 FALSE 必須書寫為TRUE和FALSE。字符字符常數(shù)由左、右單引號組成,中間括住單個(gè)字符或一個(gè)轉(zhuǎn)義字符, 采用標(biāo)準(zhǔn)的 C 轉(zhuǎn)義字符。字符串字符串由左、右雙引號括住多個(gè)字符或空格而組成。如果在一個(gè)字 符串內(nèi)使用了雙引號或美元字符作為文字文本字符,則必須用一對適 當(dāng)?shù)淖址麃肀硎舅鼈?。例如,如果需要在字符串?nèi)使用單個(gè)$,則必 須使用$。在字符串常數(shù)內(nèi)可以使用標(biāo)準(zhǔn)的 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ù)處理指令的典型特征是需要兩個(gè)操作數(shù),產(chǎn)生單個(gè)結(jié) 果。所有的操作數(shù)是32位,或來自寄存器、或是指令中定義的 立即數(shù)。如果有結(jié)果,則結(jié)果為32位寬并只能在寄存器中。每一個(gè)操作數(shù)寄存器和結(jié)果寄存器都在指令中獨(dú)立指定, 也即ARM指令使用3地址模式。ADD rO, r1, r2; rO := r1 + r2注意指令中操作數(shù)的順序,rO是結(jié)果寄存器,然后是第一操作數(shù)(門),最后是第二操作數(shù)(r2)。當(dāng)指令執(zhí)行后,對系統(tǒng)狀態(tài)而言唯一的變化是目的寄存器rO的值。CPSR中的標(biāo)志位(N、Z、C、V)也可有選擇地變化。1、算術(shù)操作這類指令對兩個(gè)32
6、位操作數(shù)進(jìn)行二進(jìn)制算術(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)位進(jìn)行指定的布爾邏輯操作。 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ù)操作因?yàn)榱⒓磾?shù)是在32位指令中編碼,所以不可能將32位都作 為立即數(shù),只能是一個(gè)8位數(shù)并按兩位數(shù)為邊界進(jìn)行的調(diào) 整。立即數(shù)=(0-
8、255)x22nADD r3 , r3 , #1AND r8 , r7 , #& ff6、寄存器移位操作這類指個(gè)允許第二個(gè)操作數(shù)(寄存器)在同第一個(gè)操作數(shù)(寄存器)運(yùn)算之前完成移位操作。ADD r3 , r2 , r1 , LSL #3 ;r3 := r2 + r1 x 8這是一條在單個(gè)時(shí)鐘周期內(nèi)執(zhí)行的ARM指令,許多處理器 采用獨(dú)立的移位操作指令。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個(gè)字從rO指向的位置拷貝到門指向的位置,即LDMIArO ! , r2 - r9 STM IAr1 , r2 - r9 執(zhí)行后,rO增加了32。這是由于“!”使其自動變址8個(gè)字 節(jié),而rl沒有改變。如果r2r9含有有用的數(shù)據(jù),則可以先把它們壓入堆棧,即STMFDr13!,r2-r9;將寄存器壓棧LDMIArO !, r2 - r9STMIAr1, r2 - r9LDMFDr13 ! , r2-r9;從堆棧中恢復(fù)后綴“FD”表示
10、滿遞減堆棧尋址模式。注意,在堆棧操作 中幾乎總是要指定自動變址,以便保證堆棧指針具有一致 的行為。多寄存器Load和Store指令為保存和恢復(fù)處理器狀態(tài)以及 在存儲器中移動數(shù)據(jù)塊提供了一種有效方式。它節(jié)省代碼 空間,并且其執(zhí)行速度提高了4倍。這個(gè)重要的優(yōu)點(diǎn)說明,值得認(rèn)真考慮數(shù)據(jù)在存儲器中的組 織方式,以便增大使用多寄存器傳送指令去訪問存儲器的 潛力。遞增A(入棧時(shí))遞減D(入棧時(shí))滿空滿空增 值先增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í)行從一個(gè)位置切換到另一個(gè)位置最常用的方法 是使用轉(zhuǎn)移(branch )指令,B LABEL LABEL.或LABEL. B LABEL條件轉(zhuǎn)移 有時(shí)想讓微處理器決定是否進(jìn)行轉(zhuǎn)移。MOVr0,#0;計(jì)數(shù)器初始化LOOP ADDrO , rO, #1;循環(huán)計(jì)數(shù)器加一CMPr0,#10;與循環(huán)的限制比較BNELOOP;如不相等則返回;否則循環(huán)終止轉(zhuǎn)移解釋一般應(yīng)用B無條件總是執(zhí)行轉(zhuǎn)移BEQ相等BNE不等BPL正BMI負(fù)BCC BLO無進(jìn)位、低于
12、無符號婁攵比較BCS BHS有進(jìn)位、高于或相等無符號數(shù)比較BVC無溢出有符號數(shù)比較BVS有溢出有符號數(shù)比較BGT大于有符號數(shù)比較BGE大于或相等有符號數(shù)比較BLT小于有符號數(shù)比較BLE小于或相等有符號數(shù)比較BHI高于無符號數(shù)比較BLS低于或相等無符號數(shù)比較列在表中同一行的一對條件(如和)的含義相同,并得到 同樣的二進(jìn)制代碼。但兩者都是有用的,因在特定的環(huán)境 中,每一種條件都可能使匯編語言源代碼的編譯更加容易。當(dāng)表中提到有符號數(shù)和無符號數(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由于第二個(gè)比較指令使用了條件執(zhí)行,從而實(shí)現(xiàn)了if
14、語句 中的邏輯“與”。使用條件執(zhí)行的示例Euclid(歐幾里德)的最大公因子(gcd)算法的兩種實(shí)現(xiàn) 方法。它說明了如何能使用條件執(zhí)行來改進(jìn)代碼密度和執(zhí) 行速度。在C語言中,該算法可以表示如下:int gcd (int a, int b) while (a != b) if (a b)a = a - b;elseb = b - a;return a;采用下列代碼,可以只用帶條件跳轉(zhuǎn)來實(shí)現(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ù)目的原因, 該代碼的長度是七條指令。 每次獲 得一個(gè)跳轉(zhuǎn)時(shí),處理器必須重填流水線并從新位置繼續(xù)執(zhí) 行。其它指令和未執(zhí)行的跳轉(zhuǎn)各使用一個(gè)周期。通過使用ARM指令集的條件執(zhí)行功能,可以僅用四個(gè)指 令實(shí)現(xiàn)gcd函數(shù):gcd CMP rO, rlSUBGT rO, rO, rlSUBLE rl, rl, rOBNE gcdEND除了減小了代碼大小之外,此代碼在大多數(shù)情況下執(zhí)行速 度更快。在這種情況下,用條件執(zhí)行的所有指令來代替跳 轉(zhuǎn)后,可節(jié)省三個(gè)周期。當(dāng)rO = rl時(shí)兩種代碼的執(zhí)行周期數(shù)相等。在其他情況下, 代碼的條件執(zhí)
16、行的執(zhí)行周期數(shù)最少。所有指令為條件跳轉(zhuǎn)R0:aR1 :b12121212121111所有指令為條件執(zhí)行R0R1 :Instructio nCycles(7)轉(zhuǎn)移鏈接指令:通常要調(diào)用子程序,并且當(dāng)子程序執(zhí)行完時(shí)能夠恢復(fù)到原 來的代碼位置,這就需要把執(zhí)行轉(zhuǎn)移之前程序計(jì)數(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中的程序計(jì)數(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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 探究實(shí)踐:“EC”混合式教學(xué)
- 內(nèi)蒙古辦酒類管理辦法
- 機(jī)器人運(yùn)動學(xué)建模與控制研究
- 冬季取暖安全管理辦法
- 基于“崗課賽證”視角的高職模塊化教學(xué)改革研究與實(shí)踐
- 動物基因表達(dá)研究
- 創(chuàng)新驅(qū)動:產(chǎn)品設(shè)計(jì)全流程管控體系構(gòu)建與實(shí)踐
- 交通事故和解協(xié)議書正式版-1
- 及時(shí)如實(shí)報(bào)告生產(chǎn)安全事故是誰的責(zé)任
- 通信網(wǎng)絡(luò)建設(shè)安全管理體系與實(shí)施細(xì)節(jié)
- 數(shù)與代數(shù)課件
- 工會審計(jì)實(shí)務(wù)課件
- 預(yù)防艾滋病、梅毒和乙肝母嬰傳播相關(guān)報(bào)表、上報(bào)流程和要求
- 《鐵路技術(shù)管理規(guī)程》(普速鐵路部分)-14年新版
- 食用油儲存期品質(zhì)變化的太赫茲光譜無損識別
- 胎盤早剝預(yù)案演練腳本
- 五山文學(xué)全集第一卷
- 聚磷腈功能高分子材料的合成及應(yīng)用
- 中國鐵路總公司《鐵路技術(shù)管理規(guī)程》(高速鐵路部分)2014年7月
- 鈣加維生素Dppt課件(PPT 14頁)
- TRD深基坑止水帷幕施工方案(22頁)
評論
0/150
提交評論