<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          ARM匯編偽指令介紹

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏


          4、MEXIT
          語(yǔ)法格式:
          MEXIT
          MEXIT用于從宏定義中跳轉(zhuǎn)出去。

          其他常用的偽指令
          還有一些其他的偽指令,在匯編程序中經(jīng)常會(huì)被使用,包括以下幾條:
          AREA
          ALIGN
          CODE16CODE32
          ENTRY
          END
          EQU
          EXPORT(或GLOBAL
          IMPORT
          EXTERN
          GET(或INCLUDE
          INCBIN
          RN
          ROUT
          1、AREA
          語(yǔ)法格式:
          AREA段名屬性1,屬性2,……
          AREA偽指令用于定義一個(gè)代碼段或數(shù)據(jù)段。其中,段名若以數(shù)字開頭,則該段名需用|括起來(lái),如|1_test|。
          屬性字段表示該代碼段(或數(shù)據(jù)段)的相關(guān)屬性,多個(gè)屬性用逗號(hào)分隔。常用的屬性如下:
          CODE屬性:用于定義代碼段,默認(rèn)為READONLY
          DATA屬性:用于定義數(shù)據(jù)段,默認(rèn)為READWRITE。
          READONLY屬性:指定本段為只讀,代碼段默認(rèn)為READONLY
          READWRITE屬性:指定本段為可讀可寫,數(shù)據(jù)段的默認(rèn)屬性為READWRITE。
          ALIGN屬性:使用方式為ALIGN表達(dá)式。在默認(rèn)時(shí),ELF(可執(zhí)行連接文件)的代碼段和數(shù)據(jù)段是按字對(duì)齊的,表達(dá)式的取值范圍為031,相應(yīng)的對(duì)齊方式為2表達(dá)式次方。
          COMMON屬性:該屬性定義一個(gè)通用的段,不包含任何的用戶代碼和數(shù)據(jù)。各源文件中同名的COMMON段共享同一段存儲(chǔ)單元。
          一個(gè)匯編語(yǔ)言程序至少要包含一個(gè)段,當(dāng)程序太長(zhǎng)時(shí),也可以將程序分為多個(gè)代碼段和數(shù)據(jù)段。
          使用示例:
          AREAInit,CODEREADONLY
          該偽指令定義了一個(gè)代碼段,段名為Init,屬性為只讀

          2、ALIGN
          語(yǔ)法格式:
          ALIGN{表達(dá)式{,偏移量}}
          ALIGN偽指令可通過(guò)添加填充字節(jié)的方式,使當(dāng)前位置滿足一定的對(duì)其方式|。其中,表達(dá)式的值用于指定對(duì)齊方式,可能的取值為2的冪,如12、4、816等。若未指定表達(dá)式,則將當(dāng)前位置對(duì)齊到下一個(gè)字的位置。偏移量也為一個(gè)數(shù)字表達(dá)式,若使用該字段,則當(dāng)前位置的對(duì)齊方式為:2的表達(dá)式次冪+偏移量。
          使用示例:
          AREAInit,CODE,READONLY,ALIEN3;指定后面的指令為8字節(jié)對(duì)齊。
          指令序列
          END

          3、CODE16、CODE32
          語(yǔ)法格式:
          CODE16(或CODE32
          CODE16偽指令通知編譯器,其后的指令序列為16位的Thumb指令。
          CODE32偽指令通知編譯器,其后的指令序列為32位的ARM指令。
          若在匯編源程序中同時(shí)包含ARM指令和Thumb指令時(shí),可用CODE16偽指令通知編譯器其后的指令序列為16位的Thumb指令,CODE32偽指令通知編譯器其后的指令序列為32位的ARM指令。因此,在使用ARM指令和Thumb指令混合編程的代碼里,可用這兩條偽指令進(jìn)行切換,但注意他們只通知編譯器其后指令的類型,并不能對(duì)處理器進(jìn)行狀態(tài)的切換。
          使用示例:
          AREAInit,CODE,READONLY
          ……
          CODE32;通知編譯器其后的指令為32位的ARM指令
          LDRR0,=NEXT1;將跳轉(zhuǎn)地址放入寄存器R0
          BXR0;程序跳轉(zhuǎn)到新的位置執(zhí)行,并將處理器切換到Thumb工作狀態(tài)
          ……
          CODE16;通知編譯器其后的指令為16位的Thumb指令
          NEXTLDRR3,=0x3FF
          ……
          END;程序結(jié)束

          4、ENTRY
          語(yǔ)法格式:
          ENTRY
          ENTRY偽指令用于指定匯編程序的入口點(diǎn)。在一個(gè)完整的匯編程序中至少要有一個(gè)ENTRY(也可以有多個(gè),當(dāng)有多個(gè)ENTRY時(shí),程序的真正入口點(diǎn)由鏈接器指定),但在一個(gè)源文件里最多只能有一個(gè)ENTRY(可以沒(méi)有)。
          使用示例:
          AREAInit,CODEREADONLY
          ENTRY;指定應(yīng)用程序的入口點(diǎn)
          ……

          5、END
          語(yǔ)法格式:
          END
          END偽指令用于通知編譯器已經(jīng)到了源程序的結(jié)尾。
          使用示例:
          AREAInitCODE,READONLY
          ……
          END;指定應(yīng)用程序的結(jié)尾

          6、EQU
          語(yǔ)法格式:
          名稱EQU表達(dá)式{,類型}
          EQU偽指令用于為程序中的常量、標(biāo)號(hào)等定義一個(gè)等效的字符名稱,類似于C語(yǔ)言中的#define。
          其中EQU可用*代替。
          名稱為EQU偽指令定義的字符名稱,當(dāng)表達(dá)式為32位的常量時(shí),可以指定表達(dá)式的數(shù)據(jù)類型,可以有以下三種類型:
          CODE16、CODE32DATA
          使用示例:
          TestEQU50;定義標(biāo)號(hào)Test的值為50
          AddrEQU0x55,CODE32;定義Addr的值為0x55,且該處為32位的ARM指令。

          7、EXPORT(或GLOBAL)
          語(yǔ)法格式:
          EXPORT標(biāo)號(hào){[WEAK]}
          EXPORT偽指令用于在程序中聲明一個(gè)全局的標(biāo)號(hào),該標(biāo)號(hào)可在其他的文件中引用。EXPORT可用GLOBAL代替。標(biāo)號(hào)在程序中區(qū)分大小寫,[WEAK]選項(xiàng)聲明其他的同名標(biāo)號(hào)優(yōu)先于該標(biāo)號(hào)被引用。
          使用示例:
          AREAInitCODEREADONLY
          EXPORTStest;聲明一個(gè)可全局引用的標(biāo)號(hào)Stest……
          END

          8、IMPORT
          語(yǔ)法格式:
          IMPORT標(biāo)號(hào){[WEAK]}
          IMPORT偽指令用于通知編譯器要使用的標(biāo)號(hào)在其他的源文件中定義,但要在當(dāng)前源文件中引用,而且無(wú)論當(dāng)前源文件是否引用該標(biāo)號(hào),該標(biāo)號(hào)均會(huì)被加入到當(dāng)前源文件的符號(hào)表中。
          標(biāo)號(hào)在程序中區(qū)分大小寫,[WEAK]選項(xiàng)表示當(dāng)所有的源文件都沒(méi)有定義這樣一個(gè)標(biāo)號(hào)時(shí),編譯器也不給出錯(cuò)誤信息,在多數(shù)情況下將該標(biāo)號(hào)置為0,若該標(biāo)號(hào)為BBL指令引用,則將BBL指令置為NOP操作。
          使用示例:
          AREAInit,CODE,READONLY
          IMPORTMain;通知編譯器當(dāng)前文件要引用標(biāo)號(hào)Main,但Main在其他源文件中定義……
          END

          9、EXTERN
          語(yǔ)法格式:
          EXTERN標(biāo)號(hào){[WEAK]}
          EXTERN偽指令用于通知編譯器要使用的標(biāo)號(hào)在其他的源文件中定義,但要在當(dāng)前源文件中引用,如果當(dāng)前源文件實(shí)際并未引用該標(biāo)號(hào),該標(biāo)號(hào)就不會(huì)被加入到當(dāng)前源文件的符號(hào)表中。標(biāo)號(hào)在程序中區(qū)分大小寫,[WEAK]選項(xiàng)表示當(dāng)所有的源文件都沒(méi)有定義這樣一個(gè)標(biāo)號(hào)時(shí),編譯器也不給出錯(cuò)誤信息,在多數(shù)情況下將該標(biāo)號(hào)置為0,若該標(biāo)號(hào)為BBL指令引用,則將BBL指令置為NOP操作。
          使用示例:
          AREAInitCODE,READONLY
          EXTERNMain;通知編譯器當(dāng)前文件要引用標(biāo)號(hào)Main,但Main在其他源文件中定義……
          END

          10、GET(或INCLUDE)
          語(yǔ)法格式:
          GET文件名
          GET偽指令用于將一個(gè)源文件包含到當(dāng)前的源文件中,并將被包含的源文件在當(dāng)前位置進(jìn)行匯編處理??梢允褂?wbr />INCLUDE代替GET。
          匯編程序中常用的方法是在某源文件中定義一些宏指令,用EQU定義常量的符號(hào)名稱,用MAP和FIELD定義結(jié)構(gòu)化的數(shù)據(jù)類型,然后用GET偽指令將這個(gè)源文件包含到其他的源文件中。使用方法與C語(yǔ)言中的include相似。
          GET偽指令只能用于包含源文件,包含目標(biāo)文件需要使用INCBIN偽指令
          使用示例:
          AREAInit,CODEREADONLY
          GETa1.s;通知編譯器當(dāng)前源文件包含源文件a1.s
          GETC:a2.s;通知編譯器當(dāng)前源文件包含源文件C:a2.s……
          END

          11、INCBIN
          語(yǔ)法格式:
          INCBIN文件名
          INCBIN偽指令用于將一個(gè)目標(biāo)文件或數(shù)據(jù)文件包含到當(dāng)前的源文件中,被包含的文件不作任何變動(dòng)的存放在當(dāng)前文件中,編譯器從其后開始繼續(xù)處理。
          使用示例:
          AREAInit,CODE,READONLY
          INCBINa1.dat;通知編譯器當(dāng)前源文件包含文件a1.dat
          INCBINC:a2.txt;通知編譯器當(dāng)前源文件包含文件C:a2.txt……
          END

          12、RN
          語(yǔ)法格式:
          名稱RN表達(dá)式
          RN偽指令用于給一個(gè)寄存器定義一個(gè)別名。采用這種方式可以方便程序員記憶該寄存器的功能。其中,名稱為給寄存器定義的別名,表達(dá)式為寄存器的編碼。
          使用示例:
          TempRNR0;將R0定義一個(gè)別名Temp

          13、ROUT
          語(yǔ)法格式:
          {名稱}ROUT
          ROUT偽指令用于給一個(gè)局部變量定義作用范圍。在程序中未使用該偽指令時(shí),局部變量的作用范圍為所在的AREA,而使用ROUT后,局部變量的作為范圍為當(dāng)前ROUT和下一個(gè)ROUT之間。

          本文引用地址:http://www.ex-cimer.com/article/201611/322954.htm

          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: ARM匯編偽指

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();