ARM匯編語(yǔ)言程序設(shè)計(jì)_第1頁(yè)
ARM匯編語(yǔ)言程序設(shè)計(jì)_第2頁(yè)
ARM匯編語(yǔ)言程序設(shè)計(jì)_第3頁(yè)
ARM匯編語(yǔ)言程序設(shè)計(jì)_第4頁(yè)
ARM匯編語(yǔ)言程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、ARM匯編語(yǔ)言程序設(shè)計(jì)偽指令與與偽操作作定義:在ARM匯編語(yǔ)語(yǔ)言程序序里,有有一些特特殊指令令助記符符,這些些助記符符與指令令系統(tǒng)的的助記符符不同,沒(méi)有相相對(duì)應(yīng)的的操作碼碼,通常常稱這些些特殊指指令助記記符為偽偽指令,他們所所完成的的操作稱稱為偽操操作。 ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)ARM匯編語(yǔ)言言程序設(shè)設(shè)計(jì)作用:偽指令在在源程序序中的作作用是為為完成匯匯編程序序作各種種準(zhǔn)備工工作的,這些偽偽指令僅僅在匯編編過(guò)程中中起作用用,一旦旦匯編結(jié)結(jié)束,偽偽指令的的使命就就完成ARM匯編語(yǔ)言言程序設(shè)設(shè)計(jì)偽指令的的分類符號(hào)定義義偽指令令數(shù)據(jù)定義義偽指令令匯編控制制偽指令令和宏指指令其他偽指指令。ARM匯匯

2、編語(yǔ)言言程序設(shè)設(shè)計(jì)符號(hào)定義義(SymbolDefinition)偽指令令: 符號(hào)定義義偽指令令用于定定義ARM匯編程序序中的變變量、對(duì)對(duì)變量賦賦值以及及定義寄寄存器的的別名等等操作。常見(jiàn)的的符號(hào)定定義偽指指令有如如下幾種種:用于定義義全局變變量的GBLA、GBLL和GBLS。用于定義義局部變變量的LCLA、LCLL和LCLS。用于對(duì)變變量賦值值的SETA、SETL、SETS。為通用寄寄存器列列表定義義名稱的的RLIST。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)1、GBLA、GBLL和和GBLS語(yǔ)法格式式:GBLA(GBLL或或GBLS)全全局變變量名作用:GBLA、GBLL和和GBLS偽指指令用于于定義一

3、一個(gè)ARM程序序中的全全局變量量,并將將其初始始化。其其中:GBLA偽指令令用于定定義一個(gè)個(gè)全局的的數(shù)字變變量,并并初始化化為0;GBLL偽指令令用于定定義一個(gè)個(gè)全局的的邏輯變變量,并并初始化化為F(假);GBLS偽指令令用于定定義一個(gè)個(gè)全局的的字符串串變量,并初始始化為空空; 由于以上上三條偽偽指令用用于定義義全局變變量,因因此在整整個(gè)程序序范圍內(nèi)內(nèi)變量名名必須唯唯一。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)1、GBLA、GBLL和和GBLS示例:GBLATest1;定義一一個(gè)全局局的數(shù)字字變量,變量名名為Test1Test1SETA 0 xaa;將該該變量賦賦值為0 xaaGBLLTest2;定義一一

4、個(gè)全局局的邏輯輯變量,變量名名為Test2Test2SETL TRUE;將該變變量賦值值為真GBLSTest3;定義一一個(gè)全局局的字符符串變量量,變量量名為Test3Test3 SETS“Testing” ;將將該變量量賦值為為“Testing”ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)2.LCLA、LCLL和和LCLS語(yǔ)法格式式:LCLA(LCLL或或LCLS)局局部變變量名作用:LCLA、LCLL和和LCLS偽指指令用于于定義一一個(gè)ARM程序序中的局局部變量量,并將將其初始始化。其其中:LCLA偽指令令用于定定義一個(gè)個(gè)局部的的數(shù)字變變量,并并初始化化為0;LCLL偽指令令用于定定義一個(gè)個(gè)局部的的邏輯變變

5、量,并并初始化化為F(假);LCLS偽指令令用于定定義一個(gè)個(gè)局部的的字符串串變量,并初始始化為空空; 以上三條條偽指令令用于聲聲明局部部變量,在其作作用范圍圍內(nèi)變量量名必須須唯一。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)2、LCLA、LCLL和和LCLS示例:LCLATest4;聲明一一個(gè)局部部的數(shù)字字變量,變量名名為Test4Test4SETA 0 xaa;將該該變量賦賦值為0 xaaLCLLTest5;聲明一一個(gè)局部部的邏輯輯變量,變量名名為Test5Test5SETL TRUE;將該變變量賦值值為真LCLSTest6;定義一一個(gè)局部部的字符符串變量量,變量量名為Test6Test6SETS “Tes

6、ting”;將該變變量賦值值為“Testing”ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)3、SETA、SETL和和SETS語(yǔ)法格式式:變量名SETA(SETL或SETS) 表達(dá)達(dá)式作用:偽指令SETA、SETL、SETS用于于給一個(gè)個(gè)已經(jīng)定定義的全全局變量量或局部部變量賦賦值。SETA偽指令令用于給給一個(gè)數(shù)數(shù)學(xué)變量量賦值;SETL偽指令令用于給給一個(gè)邏邏輯變量量賦值;SETS偽指令令用于給給一個(gè)字字符串變變量賦值值;其中,變變量名為為已經(jīng)定定義過(guò)的的全局變變量或局局部變量量,表達(dá)達(dá)式為將將要賦給給變量的的值。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)3、SETA、SETL和和SETS示例:LCLATest3;聲明一一個(gè)

7、局部部的數(shù)字字變量,變量名名為Test3Test3SETA 0 xaa;將該該變量賦賦值為0 xaaLCLLTest4;聲明一一個(gè)局部部的邏輯輯變量,變量名名為Test4Test4SETL TRUE;將該變變量賦值值為真ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)4、RLIST語(yǔ)法格式式:名稱RLIST寄存器器列表作用:RLIST偽指指令可用用于對(duì)一一個(gè)通用用寄存器器列表定定義名稱稱,使用用該偽指指令定義義的名稱稱可在ARM指指令LDM/STM中中使用。在LDM/STM指指令中,列表中中的寄存存器訪問(wèn)問(wèn)次序?yàn)闉楦鶕?jù)寄寄存器的的編號(hào)由由低到高高,而與與列表中中的寄存存器排列列次序無(wú)無(wú)關(guān)。使用示例例:RegLis

8、t RLIST R0-R5,R8,R10 ;將將寄存器器列表名名稱定義義為RegList,可在ARM指指令LDM/STM中中通過(guò)該該名稱訪訪問(wèn)寄存存器列表表。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)符號(hào)定義義偽指令令數(shù)據(jù)定義義偽指令令匯編控制制偽指令令和宏指指令其他偽指指令。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)數(shù)據(jù)定義義(Data Definition)偽指令令: 數(shù)據(jù)定義義偽指令令一般用用于為特特定的數(shù)數(shù)據(jù)分配配存儲(chǔ)單單元,同同時(shí)可完完成已分分配存儲(chǔ)儲(chǔ)單元的的初始化化。常見(jiàn)見(jiàn)的數(shù)據(jù)據(jù)定義偽偽指令有有如下幾幾種:DCB用用于于分配一一片連續(xù)續(xù)的字節(jié)節(jié)存儲(chǔ)單單元并用用指定的的數(shù)據(jù)初初始化。DCW(DCWU)用用于分

9、分配一片片連續(xù)的的半字存存儲(chǔ)單元元并用指指定的數(shù)數(shù)據(jù)初始始化。DCD(DCDU)用用于分配配一片連連續(xù)的字字存儲(chǔ)單單元并用用指定的的數(shù)據(jù)初初始化。DCFD(DCFDU)用于于為雙精精度的浮浮點(diǎn)數(shù)分分配一片片連續(xù)的的字存儲(chǔ)儲(chǔ)單元并并用指定定 的數(shù)數(shù)據(jù)初始始化。DCFS(DCFSU)用用于為單單精度的的浮點(diǎn)數(shù)數(shù)分配一一片連續(xù)續(xù)的字存存儲(chǔ)單元元并用指指定的的數(shù)據(jù)初初始化。DCQ(DCQU)用用于分分配一片片以8字字節(jié)為單單位的連連續(xù)的存存儲(chǔ)單元元并用指指定的數(shù)數(shù)據(jù)初始始化。SPACE用用于于分配一一片連續(xù)續(xù)的存儲(chǔ)儲(chǔ)單元MAP用用于定定義一個(gè)個(gè)結(jié)構(gòu)化化的內(nèi)存存表首地地址FIELD用用于定定義一個(gè)個(gè)結(jié)構(gòu)

10、化化的內(nèi)存存表的數(shù)數(shù)據(jù)域ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)1、DCB語(yǔ)法格式式:標(biāo)號(hào)DCB表表達(dá)式式作用:DCB偽偽指令用用于分配配一片連連續(xù)的字字節(jié)存儲(chǔ)儲(chǔ)單元并并用偽指指令中指指定的表表達(dá)式初初始化。其中,表達(dá)式式可以為為0255的的數(shù)字或或字符串串。DCB也可可用“=”代替替。使用示例例:StrDCB “This is atest!” ;分分配一片片連續(xù)的的字節(jié)存存儲(chǔ)單元元并初始始化。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)2、DCW(或DCWU)語(yǔ)法格式式:標(biāo)號(hào)DCW(或DCWU) 表達(dá)達(dá)式作用:DCW(或DCWU)偽指令令用于分分配一片片連續(xù)的的半字存存儲(chǔ)單元元并用偽偽指令中中指定的的表達(dá)式式初始化化。

11、其中中,表達(dá)達(dá)式可以以為程序序標(biāo)號(hào)或或數(shù)字表表達(dá)式。用DCW分配的字字存儲(chǔ)單單元是半半字對(duì)齊齊的,而而用DCWU分配的字字存儲(chǔ)單單元并不不嚴(yán)格半半字對(duì)齊齊。使用示例例:DataTestDCW1,2,3;分配一一片連續(xù)續(xù)的半字字存儲(chǔ)單單元并初初始化。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)3、DCD(或DCDU)語(yǔ)法格式式:標(biāo)號(hào)DCD(或DCDU) 表達(dá)達(dá)式作用:DCD(或DCDU)偽指令令用于分分配一片片連續(xù)的的字存儲(chǔ)儲(chǔ)單元并并用偽指指令中指指定的表表達(dá)式初初始化。其中,表達(dá)式式可以為為程序標(biāo)標(biāo)號(hào)或數(shù)數(shù)字表達(dá)達(dá)式。DCD也也可用“&”代代替。用DCD分配的的字存儲(chǔ)儲(chǔ)單元是是字對(duì)齊齊的,而而用DCDU分分配

12、的字字存儲(chǔ)單單元并不不嚴(yán)格字字對(duì)齊。使用示例例:DataTestDCD4,5,6;分配配一片連連續(xù)的字字存儲(chǔ)單單元并初初始化。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)4、DCFD(或DCFDU)語(yǔ)法格式式:標(biāo)號(hào)DCFD(或DCFDU)表表達(dá)式式作用:DCFD(或DCFDU)偽偽指令用用于為雙雙精度的的浮點(diǎn)數(shù)數(shù)分配一一片連續(xù)續(xù)的字存存儲(chǔ)單元元并用偽偽指令中中指定的的表達(dá)式式初始化化。每個(gè)個(gè)雙精度度的浮點(diǎn)點(diǎn)數(shù)占據(jù)據(jù)兩個(gè)字字單元。用DCFD分配配的字存存儲(chǔ)單元元是字對(duì)對(duì)齊的,而用DCFDU分配配的字存存儲(chǔ)單元元并不嚴(yán)嚴(yán)格字對(duì)對(duì)齊。使用示例例:FDataTestDCFD2E115,-5E7 ;分分配一片片連續(xù)的的

13、字存儲(chǔ)儲(chǔ)單元并并初始化化為指定定的雙精精度數(shù)。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)5、DCFS(或DCFSU)語(yǔ)法格式式:標(biāo)號(hào)DCFS(或DCFSU)表表達(dá)式式作用:DCFS(或DCFSU)偽偽指令用用于為單單精度的的浮點(diǎn)數(shù)數(shù)分配一一片連續(xù)續(xù)的字存存儲(chǔ)單元元并用偽偽指令中中指定的的表達(dá)式式初始化化。每個(gè)個(gè)單精度度的浮點(diǎn)點(diǎn)數(shù)占據(jù)據(jù)一個(gè)字字單元。用DCFS分配配的字存存儲(chǔ)單元元是字對(duì)對(duì)齊的,而用DCFSU分配配的字存存儲(chǔ)單元元并不嚴(yán)嚴(yán)格字對(duì)對(duì)齊。使用示例例:FDataTestDCFS2E5,-5E7;分配配一片連連續(xù)的字字存儲(chǔ)單單元并初初始化為為指定的的單精度度數(shù)。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)6、DCQ(

14、或DCQU)語(yǔ)法格式式:標(biāo)號(hào)DCQ(或DCQU) 表達(dá)達(dá)式作用:DCQ(或DCQU)偽指令令用于分分配一片片以8個(gè)個(gè)字節(jié)為為單位的的連續(xù)存存儲(chǔ)區(qū)域域并用偽偽指令中中指定的的表達(dá)式式初始化化。用DCQ分配的的存儲(chǔ)單單元是字字對(duì)齊的的,而用用DCQU分配配的存儲(chǔ)儲(chǔ)單元并并不嚴(yán)格格字對(duì)齊齊。使用示例例:DataTestDCQ100 ;分分配一片片連續(xù)的的存儲(chǔ)單單元并初初始化為為指定的的值。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)7、SPACE語(yǔ)法格式式:標(biāo)號(hào)SPACE表表達(dá)式作用:SPACE偽指指令用于于分配一一片連續(xù)續(xù)的存儲(chǔ)儲(chǔ)區(qū)域并初始化化為0。其中,表達(dá)式式為要分分配的字字節(jié)數(shù)。SPACE也也可用“”代代替

15、。使用示例例:DataSpaceSPACE100 ;分分配連續(xù)續(xù)100字節(jié)的的存儲(chǔ)單單元并初初始化為為0。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)8、MAP語(yǔ)法格式式:MAP表表達(dá)式式,基基址寄存存器作用:MAP偽偽指令用用于定義義一個(gè)結(jié)結(jié)構(gòu)化的的內(nèi)存表表的首地地址。MAP也也可用“”代代替。表達(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偽指指令配合合使用來(lái)來(lái)定義結(jié)結(jié)構(gòu)化的的內(nèi)存表表。使用示例例

16、:MAP0 x100,R0;定義義結(jié)構(gòu)化化內(nèi)存表表首地址址的值為為0 x100R0。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)9、FILED語(yǔ)法格式式:標(biāo)號(hào)FIELD表表達(dá)式作用:FIELD偽指指令用于于定義一一個(gè)結(jié)構(gòu)構(gòu)化內(nèi)存存表中的的數(shù)據(jù)域域。FILED也可用用“#”代替。表達(dá)式的的值為當(dāng)當(dāng)前數(shù)據(jù)據(jù)域在內(nèi)內(nèi)存表中中所占的的字節(jié)數(shù)數(shù)。FIELD偽指指令常與與MAP偽指令令配合使使用來(lái)定定義結(jié)構(gòu)構(gòu)化的內(nèi)內(nèi)存表。MAP偽偽指令定定義內(nèi)存存表的首首地址,F(xiàn)IELD偽偽指令定定義內(nèi)存存表中的的各個(gè)數(shù)數(shù)據(jù)域,并可以以為每個(gè)個(gè)數(shù)據(jù)域域指定一一個(gè)標(biāo)號(hào)號(hào)供其他他的指令令引用。注意MAP和FIELD偽指指令僅用用于定義義數(shù)據(jù)

17、結(jié)結(jié)構(gòu),并并不實(shí)際際分配存存儲(chǔ)單元元。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)9、FILED使用示例例:MAP0 x100;定義結(jié)構(gòu)構(gòu)化內(nèi)存存表首地地址的值值為0 x100。A FIELD 16 ;定義A的的長(zhǎng)度為為16字字節(jié),位位置為0 x100B FIELD 32 ;定義B的的長(zhǎng)度為為32字字節(jié),位位置為0 x110S FIELD 256;定義S的長(zhǎng)度度為256字節(jié)節(jié),位置置為0 x130ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)符號(hào)定義義偽指令令數(shù)據(jù)定義義偽指令令匯編控制制偽指令令和宏指指令其他偽指指令。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)匯編控制制(Assembl

18、y Control)偽指令令匯編控制制偽指令令用于控控制匯編編程序的的執(zhí)行流流程,常常用的匯匯編控制制偽指令令包括以以下幾條條: IF、ELSE、ENDIF WHILE、WEND MACRO、MEND MEXITARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)1、IF、ELSE、ENDIF語(yǔ)法格式式:IF邏邏輯表達(dá)達(dá)式指令序列列1ELSE指令序列列2ENDIF作用:IF、ELSE、ENDIF偽指令令能根據(jù)據(jù)條件的的成立與與否決定定是否執(zhí)執(zhí)行某個(gè)個(gè)指令序序列。當(dāng)當(dāng)IF后后面的邏邏輯表達(dá)達(dá)式為真真,則執(zhí)執(zhí)行指令令序列1,否則則執(zhí)行指指令序列列2。其其中,ELSE及指令令序列2可以沒(méi)沒(méi)有,此此時(shí),當(dāng)當(dāng)IF后后面的邏邏輯

19、表達(dá)達(dá)式為真真,則執(zhí)執(zhí)行指令令序列1,否則則繼續(xù)執(zhí)執(zhí)行后面面的指令令。IF、ELSE、ENDIF偽指令令可以嵌嵌套使用用。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)1、IF、ELSE、ENDIF使用示例例:GBLL Test;聲明一個(gè)個(gè)全局的的邏輯變變量,變變量名為為Test IFTest =TRUE指令序列列1ELSE指令序列列2ENDIFARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)2、WHILE、WEND語(yǔ)法格式式:WHILE邏邏輯表達(dá)達(dá)式指令序列列WEND作用:WHILE、WEND偽指令令能根據(jù)據(jù)條件的的成立與與否決定定是否循循環(huán)執(zhí)行行某個(gè)指指令序列列。當(dāng)WHILE后面面的邏輯輯表達(dá)式式為真,則執(zhí)行行指令序序列,該該

20、指令序序列執(zhí)行行完畢后后,再判判斷邏輯輯表達(dá)式式的值,若為真真則繼續(xù)續(xù)執(zhí)行,一直到到邏輯表表達(dá)式的的值為假假。WHILE、WEND偽指令令可以嵌嵌套使用用。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)2、WHILE、WEND使用示例例:GBLA Counter;聲明一個(gè)個(gè)全局的的數(shù)學(xué)變變量,變變量名為為CounterCounter SETA3;由變量量Counter控制制循環(huán)次次數(shù) WHILECounter 10指令序列列WENDARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)3、MACRO、MEND語(yǔ)法格式式:$標(biāo)號(hào)宏宏名$參數(shù)數(shù)1,$參數(shù)2,指令序列列MEND作用:MACRO、MEND偽指令令可以將將一段代代碼定義義為一個(gè)個(gè)

21、整體,稱為宏宏指令,然后就就可以在在程序中中通過(guò)宏宏指令多多次調(diào)用用該段代代碼。其其中,$標(biāo)號(hào)在在宏指令令被展開(kāi)開(kāi)時(shí),標(biāo)標(biāo)號(hào)會(huì)被被替換為為用戶定定義的符符號(hào),宏指令可可以使用用一個(gè)或或多個(gè)參參數(shù),當(dāng)當(dāng)宏指令令被展開(kāi)開(kāi)時(shí),這這些參數(shù)數(shù)被相應(yīng)應(yīng)的值替替換。宏指令的的使用方方式和功功能與子子程序有有些相似似,子程序可可以提供供模塊化化的程序序設(shè)計(jì)、節(jié)省存存儲(chǔ)空間間并提高高運(yùn)行速速度。但但在使用用子程序序結(jié)構(gòu)時(shí)時(shí)需要保保護(hù)現(xiàn)場(chǎng)場(chǎng),從而而增加了了系統(tǒng)的的開(kāi)銷,因此,在代碼較較短且需需要傳遞遞的參數(shù)數(shù)較多時(shí)時(shí),可以以使用宏宏指令代代替子程程序。包含在MACRO和MEND之間的的指令序序列稱為為宏定義義體,

22、在在宏定義義體的第第一行應(yīng)應(yīng)聲明宏宏的原型型(包含含宏名、所需的的參數(shù)),然后后就可以以在匯編編程序中中通過(guò)宏宏名來(lái)調(diào)調(diào)用該指指令序列列。在源源程序被被編譯時(shí)時(shí),匯編編器將宏宏調(diào)用展展開(kāi),用用宏定義義中的指指令序列列代替程程序中的的宏調(diào)用用,并將將實(shí)際參參數(shù)的值值傳遞給給宏定義義中的形形式參數(shù)數(shù)。MACRO、MEND偽指令令可以嵌嵌套使用用。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)4、MEXIT語(yǔ)法格式式:MEXIT作用:MEXIT用于于從宏定定義中跳跳轉(zhuǎn)出去去。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)符號(hào)定義義偽指令令數(shù)據(jù)定義義偽指令令匯編控制制偽指令令和宏指

23、指令其他偽指指令主要內(nèi)容容:其他常用用的偽指指令還有一些些其他的的偽指令令,在匯匯編程序序中經(jīng)常常會(huì)被使使用,包包括以下下幾條: AREA ALIGN CODE16、CODE32 ENTRY END EQU EXPORT(或GLOBAL) IMPORT EXTERN GET(或INCLUDE) INCBIN RN ROUTARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)1、AREA語(yǔ)法格式式:AREA 段名名 屬性性1,屬屬性2,作用:AREA偽指令令用于定定義一個(gè)個(gè)代碼段段或數(shù)據(jù)據(jù)段。其其中,段段名若以以數(shù)字開(kāi)開(kāi)頭,則則該段名名需用“|”括括起來(lái),如|1_test|。屬性字段段表示該該代碼段段(或數(shù)數(shù)據(jù)段)的相

24、關(guān)關(guān)屬性,多個(gè)屬屬性用逗逗號(hào)分隔隔。常用用的屬性性如下: CODE屬屬性:用用于定義義代碼段段,默認(rèn)認(rèn)為READONLY。 DATA屬屬性:用用于定義義數(shù)據(jù)段段,默認(rèn)認(rèn)為READWRITE。 READONLY屬性:指定本本段為只只讀,代代碼段默默認(rèn)為READONLY。 READWRITE屬性性:指定定本段為為可讀可可寫,數(shù)數(shù)據(jù)段的的默認(rèn)屬屬性為READWRITE。 ALIGN屬性:使用方方式為ALIGN表表達(dá)式。在默認(rèn)認(rèn)時(shí),ELF(可執(zhí)行行連接文文件)的的代碼段和和數(shù)據(jù)段段是按字字對(duì)齊的的,表達(dá)達(dá)式的取取值范圍圍為031,相應(yīng)的的對(duì)齊方方式為2表達(dá)式式次方。 COMMON屬性性:該屬屬性定義義

25、一個(gè)通通用的段段,不包包含任何何的用戶戶代碼和和數(shù)據(jù)。各源文文件中同同名的COMMON段段共享同同一段存存儲(chǔ)單元元。一個(gè)匯編編語(yǔ)言程程序至少少要包含含一個(gè)段段,當(dāng)程程序太長(zhǎng)長(zhǎng)時(shí),也也可以將將程序分分為多個(gè)個(gè)代碼段段和數(shù)據(jù)據(jù)段。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)使用示例例:AREA Init,CODE,READONLY指令序列列;該偽指指令定義義了一個(gè)個(gè)代碼段段,段名名為Init,屬性為為只讀ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)2、ALIGN語(yǔ)法格式式:ALIGN表達(dá)式式,偏偏移量作用:ALIGN偽指指令可通通過(guò)添加加填充字字節(jié)的方方式,使使當(dāng)前位位置滿足足一定的的對(duì)其方方式|。其中,表達(dá)式式的值用用于指定定

26、對(duì)齊方方式,可可能的取取值為2的冪,如1、2、4、8、16等等。若未未指定表表達(dá)式,則將當(dāng)當(dāng)前位置置對(duì)齊到到下一個(gè)個(gè)字的位位置。偏偏移量也也為一個(gè)個(gè)數(shù)字表表達(dá)式,若使用用該字段段,則當(dāng)當(dāng)前位置置的對(duì)齊齊方式為為:2的的表達(dá)式式次冪偏移量量。使用示例例:AREA Init,CODE,READONLY,ALIEN3;指定后后面的指指令為8字節(jié)對(duì)齊。指令序列列ENDARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)3、CODE16、CODE32語(yǔ)法格式式:CODE16(或CODE32)作用:CODE16偽偽指令通通知編譯譯器,其其后的指指令序列列為16位的Thumb指令令。CODE32偽偽指令通通知編譯譯器,其其后的指指

27、令序列列為32位的ARM指指令。若在匯編編源程序序中同時(shí)時(shí)包含ARM指指令和Thumb指令令時(shí),可可用CODE16偽指指令通知知編譯器器其后的的指令序序列為16位的的Thumb指指令,CODE32偽偽指令通通知編譯譯器其后后的指令令序列為為32位位的ARM指令令。因此此,在使使用ARM指令令和Thumb指令混混合編程程的代碼碼里,可可用這兩兩條偽指指令進(jìn)行行切換,但注意意他們只只通知編編譯器其其后指令令的類型型,并不不能對(duì)處處理器進(jìn)進(jìn)行狀態(tài)態(tài)的切換換。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)使用示例例:AREA Init,CODE,READONLY CODE32;通知知編譯器器其后的的指令為為32位位的A

28、RM指令令LDRR0,NEXT1;將跳轉(zhuǎn)轉(zhuǎn)地址放放入寄存存器R0BXR0;程序跳跳轉(zhuǎn)到新新的位置置執(zhí)行,并將處處理器切切換到Thumb工作作狀態(tài) CODE16;通知知編譯器器其后的的指令為為16位位的Thumb指令NEXT LDRR3,0 x3FF END;程序序結(jié)束ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)4、ENTRY語(yǔ)法格式式:ENTRY作用:ENTRY偽指指令用于于指定匯匯編程序序的入口口點(diǎn)。在在一個(gè)完完整的匯匯編程序序中至少少要有一一個(gè)ENTRY(也可可以有多多個(gè),當(dāng)當(dāng)有多個(gè)個(gè)ENTRY時(shí)時(shí),程序序的真正正入口點(diǎn)點(diǎn)由鏈接接器指定定),但但在一個(gè)個(gè)源文件件里最多多只能有有一個(gè)ENTRY(可可以沒(méi)有有

29、)。使用示例例:AREA Init,CODE,READONLYENTRY;指定應(yīng)應(yīng)用程序序的入口口點(diǎn) ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)5、END語(yǔ)法格式式:END作用:END偽偽指令用用于通知知編譯器器已經(jīng)到到了源程程序的結(jié)結(jié)尾。使用示例例:AREA Init,CODE,READONLY END;指定定應(yīng)用程程序的結(jié)結(jié)尾ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)6、EQU語(yǔ)法格式式:名稱EQU表表達(dá)式式,類類型作用:EQU偽偽指令用用于為程程序中的的常量、標(biāo)號(hào)等等定義一一個(gè)等效效的字符符名稱,類似于于C語(yǔ)言言中的define。其中中EQU可用“*”代代替。名稱為EQU偽偽指令定定義的字字符名稱稱,當(dāng)表表達(dá)式為為

30、32位位的常量量時(shí),可可以指定定表達(dá)式式的數(shù)據(jù)據(jù)類型,可以有有以下三三種類型型:CODE16、CODE32和DATA使用示例例:Test EQU50;定義標(biāo)標(biāo)號(hào)Test的的值為50Addr EQU0 x55,CODE32;定義Addr的值為為0 x55,且且該處為為32位位的ARM指令令。ARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)7、EXPORT(或GLOBAL)語(yǔ)法格式式:EXPORT標(biāo)標(biāo)號(hào)WEAK作用:EXPORT偽偽指令用用于在程程序中聲聲明一個(gè)個(gè)全局的的標(biāo)號(hào),該標(biāo)號(hào)號(hào)可在其其他的文文件中引引用。EXPORT可可用GLOBAL代替替。標(biāo)號(hào)號(hào)在程序序中區(qū)分分大小寫寫,WEAK選項(xiàng)項(xiàng)聲明其其他的同同名標(biāo)號(hào)

31、號(hào)優(yōu)先于于該標(biāo)號(hào)號(hào)被引用用。使用示例例:AREA Init,CODE,READONLYEXPORTStest;聲明明一個(gè)可可全局引引用的標(biāo)標(biāo)號(hào)Stest ENDARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)8、IMPORT語(yǔ)法格式式:IMPORT標(biāo)標(biāo)號(hào)WEAK作用:IMPORT偽偽指令用用于通知知編譯器器要使用用的標(biāo)號(hào)號(hào)在其他他的源文文件中定定義,但但要在當(dāng)當(dāng)前源文文件中引引用,而而且無(wú)論論當(dāng)前源源文件是是否引用用該標(biāo)號(hào)號(hào),該標(biāo)標(biāo)號(hào)均會(huì)會(huì)被加入入到當(dāng)前前源文件件的符號(hào)號(hào)表中。標(biāo)號(hào)在程程序中區(qū)區(qū)分大小小寫,WEAK選選項(xiàng)表示示當(dāng)所有有的源文文件都沒(méi)沒(méi)有定義義這樣一一個(gè)標(biāo)號(hào)號(hào)時(shí),編編譯器也也不給出出錯(cuò)誤信信息,在在

32、多數(shù)情情況下將將該標(biāo)號(hào)號(hào)置為0,若該該標(biāo)號(hào)為為B或BL指令令引用,則將B或BL指令置置為NOP操作作。使用示例例:AREA Init,CODE,READONLYIMPORTMain;通知編編譯器當(dāng)當(dāng)前文件件要引用用標(biāo)號(hào)Main,但Main在其他他源文件件中定義義 ENDARM匯匯編語(yǔ)言言程序設(shè)設(shè)計(jì)9、EXTERN語(yǔ)法格式式:EXTERN標(biāo)標(biāo)號(hào)WEAK作用:EXTERN偽偽指令用用于通知知編譯器器要使用用的標(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)表中中。標(biāo)號(hào)在程程序中區(qū)區(qū)分大小小寫,WEAK選選項(xiàng)表示示當(dāng)所有有的源文文件都沒(méi)沒(méi)有定義義這樣一一個(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指令置置為NO

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論