4第四章 ARM匯編語言程序設(shè)計_第1頁
4第四章 ARM匯編語言程序設(shè)計_第2頁
4第四章 ARM匯編語言程序設(shè)計_第3頁
4第四章 ARM匯編語言程序設(shè)計_第4頁
4第四章 ARM匯編語言程序設(shè)計_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第四章 ARM匯編語言程序設(shè)計ADS1.2環(huán)境下的匯編語句格式1. ARM 匯編中,所有標號必須在一行的頂格書寫,其后面不要添加“:”,而所有指令均不能頂格書寫。2. ARM 匯編器對標識符大小寫敏感,書寫標號及指令時字母大小寫要一致,在ARM 匯編程序中,一個ARM 指令、偽指令、寄存器名可以全部為大寫字母,也可以全部為小寫字母,但不要大小寫混合使用(如果混合使用也能編譯通過,如mov SP, r6能編譯通過,但是moV SP, r6則出現(xiàn)錯誤)。3. 注釋可以在一行的頂格書寫。4.1偽偽操作在ARM匯編語語言程序序里,有有一些特特殊指令令助記符符,這些些助記符符與指令令系統(tǒng)的的助記符符不同

2、,沒有相對對應(yīng)的操操作碼,通常稱稱這些特特殊指令令助記符符為偽指指令他們所完完成的操操作稱為為偽操作。ARM指令系統(tǒng)統(tǒng)偽指令:由匯編器器處理偽指令是是由匯編編器對源源程序匯匯編期間間進行處處理的.偽指令僅僅在匯編編過程中中起作用用,一旦旦匯編結(jié)結(jié)束,偽偽指令的的使命就就完成。指令: 由ARM處處理器執(zhí)執(zhí)行ARM指令系統(tǒng)統(tǒng)在ARM的匯編編程序中中,有如如下幾種種偽指令令:符號定義義偽指令令、數(shù)據(jù)定義義偽指令令、匯編控制制偽指令令、宏指令以以及其他他偽指令令。ARM指令系統(tǒng)統(tǒng)4.1.1符號定義義偽指令令符號定義義偽指令令用于定定義ARM匯編編程序中中的變量量、對變變量賦值值以及定定義寄存存器的別別

3、名等操操作。ARM指令系統(tǒng)統(tǒng)4.1.1符號定義義偽指令令常見的符符號定義義偽指令令有如下下幾種:用于于定義全全局變量量的GBLA、GBLL和GBLS。用于于定義局局部變量量的LCLA、LCLL和LCLS。用于于對變量量賦值的的SETA、SETL、SETS。為通通用寄存存器列表表定義名名稱的RLIST。ARM指令系統(tǒng)統(tǒng)1、GBLA、GBLL和和GBLS語法格式式:GBLA(GBLL或或GBLS)全全局變變量名GBLA、GBLL和和GBLS偽指指令用于于定義一一個ARM程序中的全全局變量量,并將將其初始始化。GBLA偽指令令用于定定義一個個全局的的數(shù)字變變量,并并初始化化為0;GBLL偽指令令用于

4、定定義一個個全局的的邏輯變變量,并并初始化化為F(假);GBLS偽指令令用于定定義一個個全局的的字符串串變量,并初始始化為空空;由于以上上三條偽偽指令用用于定義義全局變變量,因因此在整整個程序序范圍內(nèi)內(nèi)變量名必必須唯一一。GBLATest1;定義一一個全局局的數(shù)字字變量,變量名名為Test1Test1SETA0 xaa;將該變變量賦值值為0 xaaGBLLTest2;定義一一個全局局的邏輯輯變量,變量名名為Test2Test2SETLTRUE;將該變變量賦值值為真GBLSTest3;定義一一個全局局的字符符串變量量,變量量名為Test3Test3SETSTesting;將該變變量賦值值為Tes

5、ting2、LCLA、LCLL和和LCLS語法格式式:LCLA(LCLL或或LCLS)局局部變變量名LCLA、LCLL和和LCLS偽指指令用于于定義一一個ARM程序中的局局部變量量,并將將其初始始化。其其中:LCLA偽指令令用于定定義一個個局部的的數(shù)字變變量,并并初始化化為0;LCLL偽指令令用于定定義一個個局部的的邏輯變變量,并并初始化化為F(假);LCLS偽指令令用于定定義一個個局部的的字符串串變量,并初始始化為空空;以上三條條偽指令令用于聲聲明局部部變量ARM指令系統(tǒng)統(tǒng)使用示例例:LCLATest4;聲明明一個局局部的數(shù)數(shù)字變量量,變量量名為Test4Test3SETA0 xaa;將將該

6、變量量賦值為為0 xaaLCLLTest5;聲聲明一個個局部的的邏輯變變量,變變量名為為Test5Test4SETLTRUE;將將該變量量賦值為為真LCLSTest6;定定義一個個局部的的字符串串變量,變量名名為Test6Test6SETS“Testing”;將該變變量賦值值為“Testing”3、SETA、SETL和和SETS語法格式式:變量名SETA(SETL或SETS)表達式式偽指令SETA、SETL、SETS給一一個已經(jīng)經(jīng)定義的的全局變變量或局局部變量量賦值。SETA偽指令令用于給給一個數(shù)數(shù)學(xué)變量量賦值;SETL偽指令令用于給給一個邏邏輯變量量賦值;SETS偽指令令用于給給一個字字符串

7、變變量賦值值;其中,變變量名為為已經(jīng)定定義過的的全局變變量或局局部變量量,表達達式為將將要賦給給變量的的值。使用示例例:LCLATest3;聲明一一個局部部的數(shù)字字變量,變量名名為Test3Test3SETA0 xaa;將該變變量賦值值為0 xaaLCLLTest4;聲明一一個局部部的邏輯輯變量,變量名名為Test4Test4SETLTRUE;將該變變量賦值值為真ARM指令系統(tǒng)統(tǒng)4、RLIST名稱RLIST寄存存器列表表RLIST偽指指令可用用于對一一個通用用寄存器器列表定定義名稱稱,使用用該偽指指令定義義的名稱稱可在ARM指指令LDM/STM中中使用。在LDM/STM指令令中,列列表中的的寄

8、存器器訪問次次序為根根據(jù)寄存存器的編編號由低低到高,而與列列表中的的寄存器器排列次次序無關(guān)關(guān)。RLIST使用示例例:RegListRLISTR0-R5,R8,R10將寄存器器列表名名稱定義義為RegList,可在ARM指指令LDM/STM中中通過該該名稱訪訪問寄存存器列表表。例:RegListRLISTr1-r13;必須頂格格開始寫寫LDMIAr0,RegList4.1.2數(shù)數(shù)據(jù)定定義(Data Definition)偽指令令數(shù)據(jù)定義義偽指令令一般用用于為特特定的數(shù)數(shù)據(jù)分配配存儲單單元,同同時可完完成已分分配存儲儲單元的的初始化化。常見見的數(shù)據(jù)據(jù)定義偽偽指令有有如下幾幾種:DCB用用于分分配一

9、片片連續(xù)的的字節(jié)存存儲單元元并用指指定的數(shù)數(shù)據(jù)初始始化。DCW(DCWU)用用于分配配一片連連續(xù)的半半字存儲儲單元并并用指定定的數(shù)據(jù)據(jù)初始化化。DCFD(DCFDU)用于為為雙精度度的浮點點數(shù)分配配一片連連續(xù)的字字存儲單單元并用用指定的的數(shù)據(jù)初初始化。ARM指令系統(tǒng)統(tǒng)DCFS(DCFSU)用于于為單精精度的浮浮點數(shù)分分配一片片連續(xù)的的字存儲儲單元并并用指定定的數(shù)據(jù)據(jù)初始化化。DCQ(DCQU)用用于分配配一片以以8字節(jié)節(jié)為單位位的連續(xù)續(xù)的存儲儲單元并并用指定定的數(shù)據(jù)據(jù)初始化化。DCD(DCDU)用用于分配配一片連連續(xù)的字字存儲單單元并用用指定的的數(shù)據(jù)初初始化。SPACE用用于分配配一片連連續(xù)的

10、存存儲單元元MAP用用于于定義一一個結(jié)構(gòu)構(gòu)化的內(nèi)內(nèi)存表首首地址FIELD用用于定定義一個個結(jié)構(gòu)化化的內(nèi)存存表的數(shù)數(shù)據(jù)域1、DCB(DCB也可用“=”代代替)語法格式式:標號DCB表達式DCB偽指令用用于分配配一片連連續(xù)的字字節(jié)存儲儲單元并并用偽指指令中指指定的表表達式初初始化。其中,表達式式可以為為0255的的數(shù)字或或字符串串。使用示例例:StrDCBThisisa test??;分配一片片連續(xù)的的字節(jié)存存儲單元元并初始始化。2、DCD(或DCDU,DCD也可用“&”代代替)語法格式式:標號DCD(或DCDU)表達式DCD(或DCDU)偽指令用用于分配配一片連連續(xù)的字字存儲單單元并用用偽指令令中

11、指定定的表達達式初始始化。其其中,表表達式可可以為程程序標號號或數(shù)字字表達式式。用DCD分配的字字存儲單單元是字字對齊的的,而用DCDU分配的字字存儲單單元并不不嚴格字字對齊。使用示例例:DataTestDCD4,5,6;分配一片片連續(xù)的的字存儲儲單元并并初始化化。3、SPACE(SPACE也可用“”代代替)語法格式式:標號SPACE表達式SPACE偽指令用用于分配配一片連連續(xù)的存存儲區(qū)域域并初始始化為0。其中中,表達達式為要要分配的的字節(jié)數(shù)數(shù)。使用示例例:DataSpaceSPACE100;分配連續(xù)續(xù)100字節(jié)的的存儲單單元并初初始化為為0。4、MAP,MAP也可用用“”代替。語法格式式:M

12、AP表表達達式,基址寄寄存器MAP偽偽指令用用于定義義一個結(jié)結(jié)構(gòu)化的的內(nèi)存表表的首地地址。表達式可可以為程程序中的的標號或或數(shù)學(xué)表表達式,基址寄寄存器為為可選項項,當基基址寄存存器選項項不存在在時,表表達式的的值即為為內(nèi)存表表的首地地址,當當該選項項存在時時,內(nèi)存存表的首首地址為為表達式式的值與與基址寄寄存器的的和。MAP偽指令通通常與FIELD偽指令配配合使用用來定義義結(jié)構(gòu)化化的內(nèi)存存表。使用示例例:MAP0 x100,R0;定義結(jié)構(gòu)構(gòu)化內(nèi)存存表首地地址的值值為0 x100R0。5、FILEDFILED也可用用“#”代替。語法格式式:標號FIELD表表達式式FIELD偽指指令用于于定義一一個

13、結(jié)構(gòu)構(gòu)化內(nèi)存存表中的的數(shù)據(jù)域域。表達式的的值為當當前數(shù)據(jù)據(jù)域在內(nèi)內(nèi)存表中中所占的的字節(jié)數(shù)數(shù)。FIELD偽指指令常與與MAP偽指令令配合使使用來定定義結(jié)構(gòu)構(gòu)化的內(nèi)內(nèi)存表。MAP偽指令令定義內(nèi)內(nèi)存表的的首地址址,F(xiàn)IELD偽指令令定義內(nèi)內(nèi)存表中中的各個個數(shù)據(jù)域域,并可可以為每每個數(shù)據(jù)據(jù)域指定定一個標標號供其其他的指指令引用用。注意MAP和FIELD偽指令僅僅用于定定義數(shù)據(jù)據(jù)結(jié)構(gòu),并不實實際分配配存儲單單元。使用示例例:MAP0 x100;定義結(jié)構(gòu)構(gòu)化內(nèi)存存表首地地址的值值為0 x100。AFIELD16;定義A的長度為為16字字節(jié),位位置為0 x100BFIELD32;定義B的長度為為32字字節(jié),

14、位位置為0 x110SFIELD256;定義S的長度為為256字節(jié),位置為為0 x130s3c44b0 xARM芯片的初初始化源源程序:AREA RamData, DATA, READWRITE (_IRQ_BASEADDRESS);即MAPHandleReset#4; #即DCDHandleUndef#4HandleSWI#4HandlePabort#4HandleDabort#4HandleReserved#4HandleIRQ#4HandleFIQ#44.1.3匯匯編控控制偽指指令匯編控制制偽指令令用于控控制匯編編程序的的執(zhí)行流流程常用的匯匯編控制制偽指令令包括:IF、ELSE、ENDI

15、FWHILE、WENDMACRO、MENDMEXITARM指令系統(tǒng)統(tǒng)1IF、ELSE、ENDIF(等價價于 |)語法格式式:IF邏邏輯表達達式指令序列列1ELSE指令序列列2ENDIFIF、ELSE、ENDIF偽指令令能根據(jù)據(jù)條件的的成立與與否決定定是否執(zhí)執(zhí)行某個個指令序序列。當當IF后后面的邏邏輯表達達式為真真,則執(zhí)執(zhí)行指令令序列1,否則則執(zhí)行指指令序列列2。其其中,ELSE及指令令序列2可以沒沒有,此此時,當當IF后后面的邏邏輯表達達式為真真,則執(zhí)執(zhí)行指令令序列1,否則則繼續(xù)執(zhí)執(zhí)行后面面的指令令。IF、ELSE、ENDIF偽指令令可以嵌嵌套使用用。使用示例例:GBLLTest;聲明一一個全

16、局局的邏輯輯變量,變量名名為TestIFTest =TRUE指令序列列1ELSE指令序列列2ENDIFs3c44b0 xARM芯片的的初始化化源程序序:GBLLTHUMBCODE;global logicalvariable, init. to false CONFIG =16;=if,CONFIG:build-invariabledefinedbyARM;assembler,16=assembingThumbcode.THUMBCODESETLTRUE;SETL:setthe logic variableCODE32;changingfrom Thumb state to Armstate|

17、;|=elseTHUMBCODESETLFALSE;=endif2、WHILE、WEND語法格式式:WHILE邏邏輯表達達式指令序列列WENDWHILE、WEND偽指令令可以嵌嵌套使用用。WHILE、WEND偽指令令能根據(jù)據(jù)條件的的成立與與否決定定是否循循環(huán)執(zhí)行行某個指指令序列列。當WHILE后面面的邏輯輯表達式式為真,則執(zhí)行行指令序序列,該該指令序序列執(zhí)行行完畢后后,再判判斷邏輯輯表達式式的值,若為真真則繼續(xù)續(xù)執(zhí)行,一直到到邏輯表表達式的的值為假假。使用示例例:GBLACounter;聲明一一個全局局的數(shù)學(xué)學(xué)變量,變量名名為CounterCounterSETA3;由變量量Counter控制制

18、循環(huán)次次數(shù)WHILECounter 10指令序列列WEND3、MACRO、MEND語法格式式:MACRO$標號宏宏名$參數(shù)1,$參參數(shù)2,指令序列列MENDMACRO、MEND偽指令令可以將將一段代代碼定義義為一個個整體,稱為宏宏指令,然后就就可以在在程序中中通過宏宏指令多多次調(diào)用用該段代代碼。其其中,$標號在在宏指令令被展開開時,標標號會被被替換為為用戶定定義的符符號;宏指令可可以使用用一個或或多個參參數(shù),當當宏指令令被展開開時,這這些參數(shù)數(shù)被相應(yīng)應(yīng)的值替替換。MACRO、MEND偽指令令可以嵌嵌套使用用。s3c44b0 x初始始化程序序里的例例子:MACRO$HandlerLabelHAN

19、DLER$HandleLabel$HandlerLabelsubsp,sp,#4stmfdsp!,r0ldrr0,=$HandleLabelldrr0,r0strr0,sp,#4ldmfdsp!,r0,pcMENDHandlerEINT4567HANDLERHandleEINT4567將被匯編編成如下下語句:HandlerEINT4567subsp,sp,#4stmfdsp!,r0ldrr0,=HandleEINT4567;ldrr0,r0strr0,sp,#4ldmfdsp!,r0,pcHandleEINT4567的定定義: (_IRQ_BASEADDRESS+0 x100)HandleAD

20、C#4.HandleEINT4567#4圖1執(zhí)行subsp,sp,#4時時堆棧的的情況圖2執(zhí)行stmfdsp!,r0,將R0壓入入堆棧后綴“!”表示示最后的的地址寫寫回到sp中中圖3執(zhí)行strr0,sp,#4,將R0壓入入堆棧(R0)=HandleXXX處處的內(nèi)容容,不改改變SP的值。圖4ldmfdsp!,r0,pc;彈出兩個個字,分分別送到到R0,PC4、MEXIT語法格式式:MEXITMEXIT用于于從宏定定義中跳跳轉(zhuǎn)出去去。ARM指令系統(tǒng)統(tǒng)4.1.6其其他常常用的偽偽指令還有一些些其他的的偽指令令,在匯匯編程序序中經(jīng)常常會被使使用,包包括以下下幾條:AREAALIGNCODE16、COD

21、E32ENTRYENDEQUEXPORT(或GLOBAL)IMPORTEXTERNGET(或INCLUDE)INCBIN RNROUT1、AREA語法格式式:AREA段名名屬屬性性1,屬屬性2,AREA偽指令令用于定定義一個個代碼段段或數(shù)據(jù)據(jù)段。其其中,段段名若以以數(shù)字開開頭,則則該段名名需用“|”括括起來,如|1_test|。屬性字段段表示該該代碼段段(或數(shù)數(shù)據(jù)段)的相關(guān)關(guān)屬性,多個屬屬性用逗逗號分隔隔。常用用的屬性性如下:CODE屬性:用用于定義義代碼段段,默認認為READONLY。DATA屬性:用用于定義義數(shù)據(jù)段段,默認認為READWRITE。READONLY屬性:指指定本段段為只讀讀,

22、代碼碼段默認認為READONLY。READWRITE屬性:指指定本段段為可讀讀可寫,數(shù)據(jù)段段的默認認屬性為為READWRITE。ALIGN屬性:使使用方式式為ALIGN 表達達式。在在默認時時,ELF(可可執(zhí)行連連接文件件)的代代碼段和和數(shù)據(jù)段段是按字字對齊的的,表達達式的取取值范圍圍為031,相應(yīng)的的對齊方方式為2表達式式次方。This is notthesameastheway thattheALIGNdirectiveisspecified.Donotuse ALIGN=0orALIGN=1forcodesections. 使用示例例:AREAInit,CODE,READONLY;該偽指

23、指令定義義了一個個代碼段段,段名名為Init,屬性為為只讀 AREAMyDATA,DATA,READONLY,ALIGN=14;(以214字節(jié)對齊齊.)2、ALIGN語法格式式:ALIGN表達式式,偏偏移量ALIGN偽指指令可通通過添加加填充字字節(jié)的方方式,使使當前位位置滿足足一定的的對其方方式|。其中,表表達式的的值用于于指定對對齊方式式,可能能的取值值為2的的冪,如如1、2、4、8、16等。若未指定定表達式式,則將將當前位位置對齊齊到下一一個字的的位置。偏移量也也為一個個數(shù)字表表達式,如果不不是用在在AREA里的的,應(yīng)該該是表表達式偏移移量.將兩個字字節(jié)的數(shù)數(shù)據(jù)放在在同一個個字的第第一個字

24、字節(jié)和第第四個字字節(jié)中,帶offset的的ALIGN對對齊:AREAoffsetFxample,CODEDCB0 x31;第一個個字節(jié)保保存0 x31ALIGN4,3;字對齊齊DCB0 x32;第四四個字節(jié)節(jié)保存0 x32內(nèi)容是:0 x32000031上面的語語句ALIGN 4,3意義義是:字字對齊,然后再再加上偏偏移3ExamplesAREA cacheable,CODE,ALIGN=3rout1; code;aligned on 8-byteboundary; codeMOVpc,lr;aligned onlyon4-byte boundaryALIGN8 ;now alignedon8-

25、byte boundaryrout2;code3、CODE16、CODE32語法格式式:CODE16(或CODE32)CODE16偽偽指令通通知編譯譯器,其其后的指指令序列列為16位的Thumb指令令。CODE32偽偽指令通通知編譯譯器,其其后的指指令序列列為32位的ARM指指令。若在匯編編源程序序中同時時包含ARM指指令和Thumb指令令時,可可用CODE16偽指指令通知知編譯器器其后的的指令序序列為16位的的Thumb指指令,CODE32偽偽指令通通知編譯譯器其后后的指令令序列為為32位位的ARM指令令。因此此,在使使用ARM指令令和Thumb指令混混合編程程的代碼碼里,可可用這兩兩條偽指

26、指令進行行切換注意:他們只通通知編譯譯器其后后指令的的類型,并不能能對處理理器進行行狀態(tài)的的切換。AREAInit,CODE,READONLYCODE32;通知編編譯器其其后的指指令為32位的的ARM指令LDRR0,NEXT1;將跳轉(zhuǎn)轉(zhuǎn)地址放放入寄存存R0BXR0;程序跳跳轉(zhuǎn)到新新的位置置執(zhí)行,并將處處理器切切換到Thumb工作作狀態(tài)CODE16;通通知編譯譯器其后后的指令令為16位的Thumb指令令NEXTLDRR3,0 x3FFEND;程程序結(jié)束束4、ENTRY語法格式式:ENTRYENTRY偽指指令用于于指定匯匯編程序序的入口口點。在在一個完完整的匯匯編程序序中至少少要有一一個ENTRY

27、(也可可以有多多個,當當有多個個ENTRY時時,程序序的真正正入口點點由鏈接接器指定定),但但在一個個源文件件里最多多只能有有一個ENTRY(可可以沒有有)。使用示例例:AREAInit,CODE,READONLYENTRY;指定應(yīng)應(yīng)用程序序的入口口點5、END語法格式式:ENDEND偽偽指令用用于通知知編譯器器已經(jīng)到到了源程程序的結(jié)結(jié)尾,用于指示示匯編編編譯器源源文件已已結(jié)束.每一個個匯編源源文件均均要使用用一個.使用示例例:AREAInit,CODE,READONLYEND;指指定應(yīng)用用程序的的結(jié)尾6、EQU,可用“*”代替替。語法格式式:名稱EQU表達達式,類型名稱必須頂格格寫EQU偽偽

28、指令用用于為程程序中的的常量、標號等等定義一一個等效效的字符符名稱,類似于于C語言言中的define。名稱為EQU偽偽指令定定義的字字符名稱稱,當表表達式為為32位位的常量量時,可可以指定定表達式式的數(shù)據(jù)據(jù)類型,可以有有以下三三種類型型:CODE16、CODE32和DATA使用示例例:TestEQU50;定定義標號號Test的值值為50AddrEQU0 x55,CODE32;定義Addr的值為為0 x55,且且該處為為32位位的ARM指令令。7、EXPORT(或GLOBAL)語法格式式:EXPORT標標號號WEAKEXPORT偽偽指令用用于在程程序中聲聲明一個個全局的的標號,該標號號可在其其他

29、的文文件中引引用。EXPORT可可用GLOBAL代替替。標號在程程序中區(qū)區(qū)分大小小寫WEAK選選項聲明明其他的的同名標標號優(yōu)先先于該標標號被引引用。使用示例例:AREAInit,CODE,READONLYEXPORTStest;聲明一一個可全全局引用用的標號號StestEND8、IMPORT語法格式式:IMPORT標標號號WEAKIMPORT偽偽指令用用于通知知編譯器器要使用用的標號號在其他他的源文文件中定定義,但但要在當當前源文文件中引引用,而且無論論當前源源文件是是否引用用該標號號,該標標號均會會被加入入到當前前源文件件的符號號表中。WEAK選選項表示示當所有有的源文文件都沒沒有定義義這樣

30、一一個標號號時,編編譯器也也不給出出錯誤信信息,在在多數(shù)情情況下將將該標號號置為0,若該該標號為為B或BL指令令引用,則將B或BL指令置置為NOP操作作。使用示例例:AREAInit,CODE,READONLYIMPORTMain;通知編譯譯器當前前文件要要引用標標號Main,但Main在在其他源源文件中中定義END9、EXTERN語法格式式:EXTERN標標號號WEAKEXTERN偽偽指令用用于通知知編譯器器要使用用的標號號在其他他的源文文件中定定義,但但要在當當前源文文件中引引用,如果當前前源文件件實際并并未引用用該標號號,該標標號就不不會被加加入到當當前源文文件的符符號表中中。使用示例例

31、:AREAInit,CODE,READONLYEXTERNMain;通通知編譯譯器當前前文件要要引用標標號Main,但Main在在其他源源文件中中定義END10、GET(或INCLUDE)語法格式式:GET文文件件名GET偽偽指令用用于將一一個源文文件包含含到當前前的源文文件中,并將被被包含的的源文件件在當前前位置進進行匯編編處理。使用方法法與C語語言中的的“include”相似。GET偽偽指令只只能用于于包含源文件,包含目目標文件件需要使使用INCBIN偽指指令使用示例例:AREAInit,CODE,READONLYGETa1.s;通通知編譯譯器當前前源文件件包含源源文件a1.sGETC:a

32、2.s;通通知編譯譯器當前前源文件件包含源源文件C:a2.s END11、INCBIN語法格式式:INCBIN文文件件名INCBIN偽偽指令用用于將一一個目標標文件或或數(shù)據(jù)文文件包含含到當前前的源文文件中,被包含含的文件件不作任任何變動動的存放放在當前前文件中中,編譯譯器從其其后開始始繼續(xù)處處理。使用示例例:AREAInit,CODE,READONLYINCBINa1.dat;通知編編譯器當當前源文文件包含含文件a1.datINCBINC:a2.txt;通知編譯譯器當前前源文件件包含文文件C:a2.txtEND12、RN語法格式式:名稱RN表表達達式RN偽指指令用于于給一個個寄存器器定義一一個

33、別名名。采用用這種方方式可以以方便程程序員記記憶該寄寄存器的的功能。其中,名稱為為給寄存存器定義義的別名名,表達達式為寄寄存器的的編碼。名稱必須須頂格寫寫.使用示例例:TempRNR0;將R0定義一一個別名名Temp13、ROUT語法格式式:名稱ROUTROUT偽指令令用于給給一個局局部變量量定義作作用范圍圍。在程程序中未未使用該該偽指令令時,局局部變量量的作用用范圍為為所在的的AREA,而而使用ROUT后,局局部變量量的作為為范圍為為當前ROUT和下一一個ROUT之之間。14、NOP語法格式式:NOP空操作,不影響響CPSR中的的條件標標志位4.4匯匯編語語言程序序格式1)在ARM(Thumb)匯編語語言程序序中,以以程序段段為單位位組織代代碼。2)段是是相對獨獨立的指指令或數(shù)

溫馨提示

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

評論

0/150

提交評論