版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第四章 ARM匯編語言程序設(shè)計(jì)ADS1.2環(huán)境下的匯編語句格式1. ARM 匯編中,所有標(biāo)號(hào)必須在一行的頂格書寫,其后面不要添加“:”,而所有指令均不能頂格書寫。2. ARM 匯編器對(duì)標(biāo)識(shí)符大小寫敏感,書寫標(biāo)號(hào)及指令時(shí)字母大小寫要一致,在ARM 匯編程序中,一個(gè)ARM 指令、偽指令、寄存器名可以全部為大寫字母,也可以全部為小寫字母,但不要大小寫混合使用(如果混合使用也能編譯通過,如mov SP, r6能編譯通過,但是moV SP, r6則出現(xiàn)錯(cuò)誤)。3. 注釋可以在一行的頂格書寫。4.1偽偽操作在ARM匯編語語言程序序里,有有一些特特殊指令令助記符符,這些些助記符符與指令令系統(tǒng)的的助記符符不同
2、,沒有相對(duì)對(duì)應(yīng)的操操作碼,通常稱稱這些特特殊指令令助記符符為偽指指令他們所完完成的操操作稱為為偽操作。ARM指令系統(tǒng)統(tǒng)偽指令:由匯編器器處理偽指令是是由匯編編器對(duì)源源程序匯匯編期間間進(jìn)行處處理的.偽指令僅僅在匯編編過程中中起作用用,一旦旦匯編結(jié)結(jié)束,偽偽指令的的使命就就完成。指令: 由ARM處處理器執(zhí)執(zhí)行ARM指令系統(tǒng)統(tǒng)在ARM的匯編編程序中中,有如如下幾種種偽指令令:符號(hào)定義義偽指令令、數(shù)據(jù)定義義偽指令令、匯編控制制偽指令令、宏指令以以及其他他偽指令令。ARM指令系統(tǒng)統(tǒng)4.1.1符號(hào)定義義偽指令令符號(hào)定義義偽指令令用于定定義ARM匯編編程序中中的變量量、對(duì)變變量賦值值以及定定義寄存存器的別別
3、名等操操作。ARM指令系統(tǒng)統(tǒng)4.1.1符號(hào)定義義偽指令令常見的符符號(hào)定義義偽指令令有如下下幾種:用于于定義全全局變量量的GBLA、GBLL和GBLS。用于于定義局局部變量量的LCLA、LCLL和LCLS。用于于對(duì)變量量賦值的的SETA、SETL、SETS。為通通用寄存存器列表表定義名名稱的RLIST。ARM指令系統(tǒng)統(tǒng)1、GBLA、GBLL和和GBLS語法格式式:GBLA(GBLL或或GBLS)全全局變變量名GBLA、GBLL和和GBLS偽指指令用于于定義一一個(gè)ARM程序中的全全局變量量,并將將其初始始化。GBLA偽指令令用于定定義一個(gè)個(gè)全局的的數(shù)字變變量,并并初始化化為0;GBLL偽指令令用于
4、定定義一個(gè)個(gè)全局的的邏輯變變量,并并初始化化為F(假);GBLS偽指令令用于定定義一個(gè)個(gè)全局的的字符串串變量,并初始始化為空空;由于以上上三條偽偽指令用用于定義義全局變變量,因因此在整整個(gè)程序序范圍內(nèi)內(nèi)變量名必必須唯一一。GBLATest1;定義一一個(gè)全局局的數(shù)字字變量,變量名名為Test1Test1SETA0 xaa;將該變變量賦值值為0 xaaGBLLTest2;定義一一個(gè)全局局的邏輯輯變量,變量名名為Test2Test2SETLTRUE;將該變變量賦值值為真GBLSTest3;定義一一個(gè)全局局的字符符串變量量,變量量名為Test3Test3SETSTesting;將該變變量賦值值為Tes
5、ting2、LCLA、LCLL和和LCLS語法格式式:LCLA(LCLL或或LCLS)局局部變變量名LCLA、LCLL和和LCLS偽指指令用于于定義一一個(gè)ARM程序中的局局部變量量,并將將其初始始化。其其中:LCLA偽指令令用于定定義一個(gè)個(gè)局部的的數(shù)字變變量,并并初始化化為0;LCLL偽指令令用于定定義一個(gè)個(gè)局部的的邏輯變變量,并并初始化化為F(假);LCLS偽指令令用于定定義一個(gè)個(gè)局部的的字符串串變量,并初始始化為空空;以上三條條偽指令令用于聲聲明局部部變量ARM指令系統(tǒng)統(tǒng)使用示例例:LCLATest4;聲明明一個(gè)局局部的數(shù)數(shù)字變量量,變量量名為Test4Test3SETA0 xaa;將將該
6、變量量賦值為為0 xaaLCLLTest5;聲聲明一個(gè)個(gè)局部的的邏輯變變量,變變量名為為Test5Test4SETLTRUE;將將該變量量賦值為為真LCLSTest6;定定義一個(gè)個(gè)局部的的字符串串變量,變量名名為Test6Test6SETS“Testing”;將該變變量賦值值為“Testing”3、SETA、SETL和和SETS語法格式式:變量名SETA(SETL或SETS)表達(dá)式式偽指令SETA、SETL、SETS給一一個(gè)已經(jīng)經(jīng)定義的的全局變變量或局局部變量量賦值。SETA偽指令令用于給給一個(gè)數(shù)數(shù)學(xué)變量量賦值;SETL偽指令令用于給給一個(gè)邏邏輯變量量賦值;SETS偽指令令用于給給一個(gè)字字符串
7、變變量賦值值;其中,變變量名為為已經(jīng)定定義過的的全局變變量或局局部變量量,表達(dá)達(dá)式為將將要賦給給變量的的值。使用示例例:LCLATest3;聲明一一個(gè)局部部的數(shù)字字變量,變量名名為Test3Test3SETA0 xaa;將該變變量賦值值為0 xaaLCLLTest4;聲明一一個(gè)局部部的邏輯輯變量,變量名名為Test4Test4SETLTRUE;將該變變量賦值值為真ARM指令系統(tǒng)統(tǒng)4、RLIST名稱RLIST寄存存器列表表RLIST偽指指令可用用于對(duì)一一個(gè)通用用寄存器器列表定定義名稱稱,使用用該偽指指令定義義的名稱稱可在ARM指指令LDM/STM中中使用。在LDM/STM指令令中,列列表中的的寄
8、存器器訪問次次序?yàn)楦鶕?jù)寄存存器的編編號(hào)由低低到高,而與列列表中的的寄存器器排列次次序無關(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ù)分配配存儲(chǔ)單單元,同同時(shí)可完完成已分分配存儲(chǔ)儲(chǔ)單元的的初始化化。常見見的數(shù)據(jù)據(jù)定義偽偽指令有有如下幾幾種:DCB用用于分分配一
9、片片連續(xù)的的字節(jié)存存儲(chǔ)單元元并用指指定的數(shù)數(shù)據(jù)初始始化。DCW(DCWU)用用于分配配一片連連續(xù)的半半字存儲(chǔ)儲(chǔ)單元并并用指定定的數(shù)據(jù)據(jù)初始化化。DCFD(DCFDU)用于為為雙精度度的浮點(diǎn)點(diǎn)數(shù)分配配一片連連續(xù)的字字存儲(chǔ)單單元并用用指定的的數(shù)據(jù)初初始化。ARM指令系統(tǒng)統(tǒng)DCFS(DCFSU)用于于為單精精度的浮浮點(diǎn)數(shù)分分配一片片連續(xù)的的字存儲(chǔ)儲(chǔ)單元并并用指定定的數(shù)據(jù)據(jù)初始化化。DCQ(DCQU)用用于分配配一片以以8字節(jié)節(jié)為單位位的連續(xù)續(xù)的存儲(chǔ)儲(chǔ)單元并并用指定定的數(shù)據(jù)據(jù)初始化化。DCD(DCDU)用用于分配配一片連連續(xù)的字字存儲(chǔ)單單元并用用指定的的數(shù)據(jù)初初始化。SPACE用用于分配配一片連連續(xù)的
10、存存儲(chǔ)單元元MAP用用于于定義一一個(gè)結(jié)構(gòu)構(gòu)化的內(nèi)內(nèi)存表首首地址FIELD用用于定定義一個(gè)個(gè)結(jié)構(gòu)化化的內(nèi)存存表的數(shù)數(shù)據(jù)域1、DCB(DCB也可用“=”代代替)語法格式式:標(biāo)號(hào)DCB表達(dá)式DCB偽指令用用于分配配一片連連續(xù)的字字節(jié)存儲(chǔ)儲(chǔ)單元并并用偽指指令中指指定的表表達(dá)式初初始化。其中,表達(dá)式式可以為為0255的的數(shù)字或或字符串串。使用示例例:StrDCBThisisa test!;分配一片片連續(xù)的的字節(jié)存存儲(chǔ)單元元并初始始化。2、DCD(或DCDU,DCD也可用“&”代代替)語法格式式:標(biāo)號(hào)DCD(或DCDU)表達(dá)式DCD(或DCDU)偽指令用用于分配配一片連連續(xù)的字字存儲(chǔ)單單元并用用偽指令令中
11、指定定的表達(dá)達(dá)式初始始化。其其中,表表達(dá)式可可以為程程序標(biāo)號(hào)號(hào)或數(shù)字字表達(dá)式式。用DCD分配的字字存儲(chǔ)單單元是字字對(duì)齊的的,而用DCDU分配的字字存儲(chǔ)單單元并不不嚴(yán)格字字對(duì)齊。使用示例例:DataTestDCD4,5,6;分配一片片連續(xù)的的字存儲(chǔ)儲(chǔ)單元并并初始化化。3、SPACE(SPACE也可用“”代代替)語法格式式:標(biāo)號(hào)SPACE表達(dá)式SPACE偽指令用用于分配配一片連連續(xù)的存存儲(chǔ)區(qū)域域并初始始化為0。其中中,表達(dá)達(dá)式為要要分配的的字節(jié)數(shù)數(shù)。使用示例例:DataSpaceSPACE100;分配連續(xù)續(xù)100字節(jié)的的存儲(chǔ)單單元并初初始化為為0。4、MAP,MAP也可用用“”代替。語法格式式:M
12、AP表表達(dá)達(dá)式,基址寄寄存器MAP偽偽指令用用于定義義一個(gè)結(jié)結(jié)構(gòu)化的的內(nèi)存表表的首地地址。表達(dá)式可可以為程程序中的的標(biāo)號(hào)或或數(shù)學(xué)表表達(dá)式,基址寄寄存器為為可選項(xiàng)項(xiàng),當(dāng)基基址寄存存器選項(xiàng)項(xiàng)不存在在時(shí),表表達(dá)式的的值即為為內(nèi)存表表的首地地址,當(dāng)當(dāng)該選項(xiàng)項(xiàng)存在時(shí)時(shí),內(nèi)存存表的首首地址為為表達(dá)式式的值與與基址寄寄存器的的和。MAP偽指令通通常與FIELD偽指令配配合使用用來定義義結(jié)構(gòu)化化的內(nèi)存存表。使用示例例:MAP0 x100,R0;定義結(jié)構(gòu)構(gòu)化內(nèi)存存表首地地址的值值為0 x100R0。5、FILEDFILED也可用用“#”代替。語法格式式:標(biāo)號(hào)FIELD表表達(dá)式式FIELD偽指指令用于于定義一一個(gè)
13、結(jié)構(gòu)構(gòu)化內(nèi)存存表中的的數(shù)據(jù)域域。表達(dá)式的的值為當(dāng)當(dāng)前數(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)存表中中的各個(gè)個(gè)數(shù)據(jù)域域,并可可以為每每個(gè)數(shù)據(jù)據(jù)域指定定一個(gè)標(biāo)標(biāo)號(hào)供其其他的指指令引用用。注意MAP和FIELD偽指令僅僅用于定定義數(shù)據(jù)據(jù)結(jié)構(gòu),并不實(shí)實(shí)際分配配存儲(chǔ)單單元。使用示例例: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(等價(jià)價(jià)于 |)語法格式式:IF邏邏輯表達(dá)達(dá)式指令序列列1ELSE指令序列列2ENDIFIF、ELSE、ENDIF偽指令令能根據(jù)據(jù)條件的的成立與與否決定定是否執(zhí)執(zhí)行某個(gè)個(gè)指令序序列。當(dāng)當(dāng)IF后后面的邏邏輯表達(dá)達(dá)式為真真,則執(zhí)執(zhí)行指令令序列1,否則則執(zhí)行指指令序列列2。其其中,ELSE及指令令序列2可以沒沒有,此此時(shí),當(dāng)當(dāng)IF后后面的邏邏輯表達(dá)達(dá)式為真真,則執(zhí)執(zhí)行指令令序列1,否則則繼續(xù)執(zhí)執(zhí)行后面面的指令令。IF、ELSE、ENDIF偽指令令可以嵌嵌套使用用。使用示例例:GBLLTest;聲明一一個(gè)全
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邏邏輯表達(dá)達(dá)式指令序列列WENDWHILE、WEND偽指令令可以嵌嵌套使用用。WHILE、WEND偽指令令能根據(jù)據(jù)條件的的成立與與否決定定是否循循環(huán)執(zhí)行行某個(gè)指指令序列列。當(dāng)WHILE后面面的邏輯輯表達(dá)式式為真,則執(zhí)行行指令序序列,該該指令序序列執(zhí)行行完畢后后,再判判斷邏輯輯表達(dá)式式的值,若為真真則繼續(xù)續(xù)執(zhí)行,一直到到邏輯表表達(dá)式的的值為假假。使用示例例:GBLACounter;聲明一一個(gè)全局局的數(shù)學(xué)學(xué)變量,變量名名為CounterCounterSETA3;由變量量Counter控制制
18、循環(huán)次次數(shù)WHILECounter 10指令序列列WEND3、MACRO、MEND語法格式式:MACRO$標(biāo)號(hào)宏宏名$參數(shù)1,$參參數(shù)2,指令序列列MENDMACRO、MEND偽指令令可以將將一段代代碼定義義為一個(gè)個(gè)整體,稱為宏宏指令,然后就就可以在在程序中中通過宏宏指令多多次調(diào)用用該段代代碼。其其中,$標(biāo)號(hào)在在宏指令令被展開開時(shí),標(biāo)標(biāo)號(hào)會(huì)被被替換為為用戶定定義的符符號(hào);宏指令可可以使用用一個(gè)或或多個(gè)參參數(shù),當(dāng)當(dāng)宏指令令被展開開時(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時(shí)時(shí)堆棧的的情況圖2執(zhí)行stmfdsp!,r0,將R0壓入入堆棧后綴“!”表示示最后的的地址寫寫回到sp中中圖3執(zhí)行strr0,sp,#4,將R0壓入入堆棧(R0)=HandleXXX處處的內(nèi)容容,不改改變SP的值。圖4ldmfdsp!,r0,pc;彈出兩個(gè)個(gè)字,分分別送到到R0,PC4、MEXIT語法格式式:MEXITMEXIT用于于從宏定定義中跳跳轉(zhuǎn)出去去。ARM指令系統(tǒng)統(tǒng)4.1.6其其他常常用的偽偽指令還有一些些其他的的偽指令令,在匯匯編程序序中經(jīng)常常會(huì)被使使用,包包括以下下幾條:AREAALIGNCODE16、COD
21、E32ENTRYENDEQUEXPORT(或GLOBAL)IMPORTEXTERNGET(或INCLUDE)INCBIN RNROUT1、AREA語法格式式:AREA段名名屬屬性性1,屬屬性2,AREA偽指令令用于定定義一個(gè)個(gè)代碼段段或數(shù)據(jù)據(jù)段。其其中,段段名若以以數(shù)字開開頭,則則該段名名需用“|”括括起來,如|1_test|。屬性字段段表示該該代碼段段(或數(shù)數(shù)據(jù)段)的相關(guān)關(guān)屬性,多個(gè)屬屬性用逗逗號(hào)分隔隔。常用用的屬性性如下:CODE屬性:用用于定義義代碼段段,默認(rèn)認(rèn)為READONLY。DATA屬性:用用于定義義數(shù)據(jù)段段,默認(rèn)認(rèn)為READWRITE。READONLY屬性:指指定本段段為只讀讀,
22、代碼碼段默認(rèn)認(rèn)為READONLY。READWRITE屬性:指指定本段段為可讀讀可寫,數(shù)據(jù)段段的默認(rèn)認(rèn)屬性為為READWRITE。ALIGN屬性:使使用方式式為ALIGN 表達(dá)達(dá)式。在在默認(rèn)時(shí)時(shí),ELF(可可執(zhí)行連連接文件件)的代代碼段和和數(shù)據(jù)段段是按字字對(duì)齊的的,表達(dá)達(dá)式的取取值范圍圍為031,相應(yīng)的的對(duì)齊方方式為2表達(dá)式式次方。This is notthesameastheway thattheALIGNdirectiveisspecified.Donotuse ALIGN=0orALIGN=1forcodesections. 使用示例例:AREAInit,CODE,READONLY;該偽指
23、指令定義義了一個(gè)個(gè)代碼段段,段名名為Init,屬性為為只讀 AREAMyDATA,DATA,READONLY,ALIGN=14;(以214字節(jié)對(duì)齊齊.)2、ALIGN語法格式式:ALIGN表達(dá)式式,偏偏移量ALIGN偽指指令可通通過添加加填充字字節(jié)的方方式,使使當(dāng)前位位置滿足足一定的的對(duì)其方方式|。其中,表表達(dá)式的的值用于于指定對(duì)對(duì)齊方式式,可能能的取值值為2的的冪,如如1、2、4、8、16等。若未指定定表達(dá)式式,則將將當(dāng)前位位置對(duì)齊齊到下一一個(gè)字的的位置。偏移量也也為一個(gè)個(gè)數(shù)字表表達(dá)式,如果不不是用在在AREA里的的,應(yīng)該該是表表達(dá)式偏移移量.將兩個(gè)字字節(jié)的數(shù)數(shù)據(jù)放在在同一個(gè)個(gè)字的第第一個(gè)字
24、字節(jié)和第第四個(gè)字字節(jié)中,帶offset的的ALIGN對(duì)對(duì)齊:AREAoffsetFxample,CODEDCB0 x31;第一個(gè)個(gè)字節(jié)保保存0 x31ALIGN4,3;字對(duì)齊齊DCB0 x32;第四四個(gè)字節(jié)節(jié)保存0 x32內(nèi)容是:0 x32000031上面的語語句ALIGN 4,3意義義是:字字對(duì)齊,然后再再加上偏偏移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指指令。若在匯編編源程序序中同時(shí)時(shí)包含ARM指指令和Thumb指令令時(shí),可可用CODE16偽指指令通知知編譯器器其后的的指令序序列為16位的的Thumb指指令,CODE32偽偽指令通通知編譯譯器其后后的指令令序列為為32位位的ARM指令令。因此此,在使使用ARM指令令和Thumb指令混混合編程程的代碼碼里,可可用這兩兩條偽指
26、指令進(jìn)行行切換注意:他們只通通知編譯譯器其后后指令的的類型,并不能能對(duì)處理理器進(jìn)行行狀態(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偽指指令用于于指定匯匯編程序序的入口口點(diǎn)。在在一個(gè)完完整的匯匯編程序序中至少少要有一一個(gè)ENTRY
27、(也可可以有多多個(gè),當(dāng)當(dāng)有多個(gè)個(gè)ENTRY時(shí)時(shí),程序序的真正正入口點(diǎn)點(diǎn)由鏈接接器指定定),但但在一個(gè)個(gè)源文件件里最多多只能有有一個(gè)ENTRY(可可以沒有有)。使用示例例:AREAInit,CODE,READONLYENTRY;指定應(yīng)應(yīng)用程序序的入口口點(diǎn)5、END語法格式式:ENDEND偽偽指令用用于通知知編譯器器已經(jīng)到到了源程程序的結(jié)結(jié)尾,用于指示示匯編編編譯器源源文件已已結(jié)束.每一個(gè)個(gè)匯編源源文件均均要使用用一個(gè).使用示例例:AREAInit,CODE,READONLYEND;指指定應(yīng)用用程序的的結(jié)尾6、EQU,可用“*”代替替。語法格式式:名稱EQU表達(dá)達(dá)式,類型名稱必須頂格格寫EQU偽偽
28、指令用用于為程程序中的的常量、標(biāo)號(hào)等等定義一一個(gè)等效效的字符符名稱,類似于于C語言言中的define。名稱為EQU偽偽指令定定義的字字符名稱稱,當(dāng)表表達(dá)式為為32位位的常量量時(shí),可可以指定定表達(dá)式式的數(shù)據(jù)據(jù)類型,可以有有以下三三種類型型:CODE16、CODE32和DATA使用示例例:TestEQU50;定定義標(biāo)號(hào)號(hào)Test的值值為50AddrEQU0 x55,CODE32;定義Addr的值為為0 x55,且且該處為為32位位的ARM指令令。7、EXPORT(或GLOBAL)語法格式式:EXPORT標(biāo)標(biāo)號(hào)號(hào)WEAKEXPORT偽偽指令用用于在程程序中聲聲明一個(gè)個(gè)全局的的標(biāo)號(hào),該標(biāo)號(hào)號(hào)可在其其他
29、的文文件中引引用。EXPORT可可用GLOBAL代替替。標(biāo)號(hào)在程程序中區(qū)區(qū)分大小小寫WEAK選選項(xiàng)聲明明其他的的同名標(biāo)標(biāo)號(hào)優(yōu)先先于該標(biāo)標(biāo)號(hào)被引引用。使用示例例:AREAInit,CODE,READONLYEXPORTStest;聲明一一個(gè)可全全局引用用的標(biāo)號(hào)號(hào)StestEND8、IMPORT語法格式式:IMPORT標(biāo)標(biāo)號(hào)號(hào)WEAKIMPORT偽偽指令用用于通知知編譯器器要使用用的標(biāo)號(hào)號(hào)在其他他的源文文件中定定義,但但要在當(dāng)當(dāng)前源文文件中引引用,而且無論論當(dāng)前源源文件是是否引用用該標(biāo)號(hào)號(hào),該標(biāo)標(biāo)號(hào)均會(huì)會(huì)被加入入到當(dāng)前前源文件件的符號(hào)號(hào)表中。WEAK選選項(xiàng)表示示當(dāng)所有有的源文文件都沒沒有定義義這樣
30、一一個(gè)標(biāo)號(hào)號(hào)時(shí),編編譯器也也不給出出錯(cuò)誤信信息,在在多數(shù)情情況下將將該標(biāo)號(hào)號(hào)置為0,若該該標(biāo)號(hào)為為B或BL指令令引用,則將B或BL指令置置為NOP操作作。使用示例例:AREAInit,CODE,READONLYIMPORTMain;通知編譯譯器當(dāng)前前文件要要引用標(biāo)標(biāo)號(hào)Main,但Main在在其他源源文件中中定義END9、EXTERN語法格式式:EXTERN標(biāo)標(biāo)號(hào)號(hào)WEAKEXTERN偽偽指令用用于通知知編譯器器要使用用的標(biāo)號(hào)號(hào)在其他他的源文文件中定定義,但但要在當(dāng)當(dāng)前源文文件中引引用,如果當(dāng)前前源文件件實(shí)際并并未引用用該標(biāo)號(hào)號(hào),該標(biāo)標(biāo)號(hào)就不不會(huì)被加加入到當(dāng)當(dāng)前源文文件的符符號(hào)表中中。使用示例例
31、:AREAInit,CODE,READONLYEXTERNMain;通通知編譯譯器當(dāng)前前文件要要引用標(biāo)標(biāo)號(hào)Main,但Main在在其他源源文件中中定義END10、GET(或INCLUDE)語法格式式:GET文文件件名GET偽偽指令用用于將一一個(gè)源文文件包含含到當(dāng)前前的源文文件中,并將被被包含的的源文件件在當(dāng)前前位置進(jìn)進(jìn)行匯編編處理。使用方法法與C語語言中的的“include”相似。GET偽偽指令只只能用于于包含源文件,包含目目標(biāo)文件件需要使使用INCBIN偽指指令使用示例例:AREAInit,CODE,READONLYGETa1.s;通通知編譯譯器當(dāng)前前源文件件包含源源文件a1.sGETC:a
32、2.s;通通知編譯譯器當(dāng)前前源文件件包含源源文件C:a2.s END11、INCBIN語法格式式:INCBIN文文件件名INCBIN偽偽指令用用于將一一個(gè)目標(biāo)標(biāo)文件或或數(shù)據(jù)文文件包含含到當(dāng)前前的源文文件中,被包含含的文件件不作任任何變動(dòng)動(dòng)的存放放在當(dāng)前前文件中中,編譯譯器從其其后開始始繼續(xù)處處理。使用示例例:AREAInit,CODE,READONLYINCBINa1.dat;通知編編譯器當(dāng)當(dāng)前源文文件包含含文件a1.datINCBINC:a2.txt;通知編譯譯器當(dāng)前前源文件件包含文文件C:a2.txtEND12、RN語法格式式:名稱RN表表達(dá)達(dá)式RN偽指指令用于于給一個(gè)個(gè)寄存器器定義一一個(gè)
33、別名名。采用用這種方方式可以以方便程程序員記記憶該寄寄存器的的功能。其中,名稱為為給寄存存器定義義的別名名,表達(dá)達(dá)式為寄寄存器的的編碼。名稱必須須頂格寫寫.使用示例例:TempRNR0;將R0定義一一個(gè)別名名Temp13、ROUT語法格式式:名稱ROUTROUT偽指令令用于給給一個(gè)局局部變量量定義作作用范圍圍。在程程序中未未使用該該偽指令令時(shí),局局部變量量的作用用范圍為為所在的的AREA,而而使用ROUT后,局局部變量量的作為為范圍為為當(dāng)前ROUT和下一一個(gè)ROUT之之間。14、NOP語法格式式:NOP空操作,不影響響CPSR中的的條件標(biāo)標(biāo)志位4.4匯匯編語語言程序序格式1)在ARM(Thumb)匯編語語言程序序中,以以程序段段為單位位組織代代碼。2)段是是相對(duì)獨(dú)獨(dú)立的指指令或數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit5 What does he do單元測(cè)試 02-人教PEP版英語6年級(jí)上冊(cè)
- 塑料網(wǎng)套行業(yè)深度研究報(bào)告
- 物流園可行性報(bào)告
- Unit 2 Ways to go to school 單元測(cè)試 01-人教PEP版(2024)英語6年級(jí)上冊(cè)
- 2024招投標(biāo)實(shí)訓(xùn)心得匯編與招投標(biāo)合同履行管理3篇
- 無水高氯酸鋰項(xiàng)目可行性研究報(bào)告建議書
- 非機(jī)動(dòng)車項(xiàng)目立項(xiàng)報(bào)告
- 2025版戶外運(yùn)動(dòng)場(chǎng)地租賃及賽事組織服務(wù)合同3篇
- 2025版跨境電商知識(shí)產(chǎn)權(quán)保護(hù)服務(wù)貿(mào)易總協(xié)定3篇
- 鋁質(zhì)天花板新建項(xiàng)目可行性研究報(bào)告建議書申請(qǐng)格式范文
- 醫(yī)療行業(yè)銷售內(nèi)勤工作匯報(bào)
- 光伏電站運(yùn)維課件
- 浙江省杭州市西湖區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末考試語文試卷+
- 江蘇省蘇州市2023-2024學(xué)年高一上學(xué)期期末學(xué)業(yè)質(zhì)量陽光指標(biāo)調(diào)研試題+物理 含解析
- 兼職客服簽約合同范例
- 【初中地理】《世界的聚落》課件-2024-2025學(xué)年湘教版地理七年級(jí)上冊(cè)
- 2鍋爐爐膛內(nèi)腳手架搭設(shè)及拆除施工方案
- 注冊(cè)安全工程師管理制度
- 2023年黑龍江民族職業(yè)學(xué)院招聘工作人員筆試真題
- 以諾書-中英對(duì)照
- 卵巢黃體破裂的護(hù)理
評(píng)論
0/150
提交評(píng)論