新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM匯編偽指令介紹

        ARM匯編偽指令介紹

        作者: 時間:2016-11-28 來源:網絡 收藏


        4、MEXIT
        語法格式:
        MEXIT
        MEXIT用于從宏定義中跳轉出去。

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

        2、ALIGN
        語法格式:
        ALIGN{表達式{,偏移量}}
        ALIGN偽指令可通過添加填充字節的方式,使當前位置滿足一定的對其方式|。其中,表達式的值用于指定對齊方式,可能的取值為2的冪,如124816等。若未指定表達式,則將當前位置對齊到下一個字的位置。偏移量也為一個數字表達式,若使用該字段,則當前位置的對齊方式為:2的表達式次冪+偏移量。
        使用示例:
        AREAInitCODEREADONLYALIEN3;指定后面的指令為8字節對齊。
        指令序列
        END

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

        4、ENTRY
        語法格式:
        ENTRY
        ENTRY偽指令用于指定匯編程序的入口點。在一個完整的匯編程序中至少要有一個ENTRY(也可以有多個,當有多個ENTRY時,程序的真正入口點由鏈接器指定),但在一個源文件里最多只能有一個ENTRY(可以沒有)。
        使用示例:
        AREAInitCODEREADONLY
        ENTRY;指定應用程序的入口點
        ……

        5、END
        語法格式:
        END
        END偽指令用于通知編譯器已經到了源程序的結尾。
        使用示例:
        AREAInitCODEREADONLY
        ……
        END;指定應用程序的結尾

        6、EQU
        語法格式:
        名稱EQU表達式{,類型}
        EQU偽指令用于為程序中的常量、標號等定義一個等效的字符名稱,類似于C語言中的#define
        其中EQU可用*代替。
        名稱為EQU偽指令定義的字符名稱,當表達式為32位的常量時,可以指定表達式的數據類型,可以有以下三種類型:
        CODE16CODE32DATA
        使用示例:
        TestEQU50;定義標號Test的值為50
        AddrEQU0x55CODE32;定義Addr的值為0x55,且該處為32位的ARM指令。

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

        8、IMPORT
        語法格式:
        IMPORT標號{[WEAK]}
        IMPORT偽指令用于通知編譯器要使用的標號在其他的源文件中定義,但要在當前源文件中引用,而且無論當前源文件是否引用該標號,該標號均會被加入到當前源文件的符號表中。
        標號在程序中區分大小寫,[WEAK]選項表示當所有的源文件都沒有定義這樣一個標號時,編譯器也不給出錯誤信息,在多數情況下將該標號置為0,若該標號為BBL指令引用,則將BBL指令置為NOP操作。
        使用示例:
        AREAInitCODEREADONLY
        IMPORTMain;通知編譯器當前文件要引用標號Main,但Main在其他源文件中定義……
        END

        9、EXTERN
        語法格式:
        EXTERN標號{[WEAK]}
        EXTERN偽指令用于通知編譯器要使用的標號在其他的源文件中定義,但要在當前源文件中引用,如果當前源文件實際并未引用該標號,該標號就不會被加入到當前源文件的符號表中。標號在程序中區分大小寫,[WEAK]選項表示當所有的源文件都沒有定義這樣一個標號時,編譯器也不給出錯誤信息,在多數情況下將該標號置為0,若該標號為BBL指令引用,則將BBL指令置為NOP操作。
        使用示例:
        AREAInitCODEREADONLY
        EXTERNMain;通知編譯器當前文件要引用標號Main,但Main在其他源文件中定義……
        END

        10、GET(或INCLUDE)
        語法格式:
        GET文件名
        GET偽指令用于將一個源文件包含到當前的源文件中,并將被包含的源文件在當前位置進行匯編處理。可以使用INCLUDE代替GET
        匯編程序中常用的方法是在某源文件中定義一些宏指令,用EQU定義常量的符號名稱,用MAP和FIELD定義結構化的數據類型,然后用GET偽指令將這個源文件包含到其他的源文件中。使用方法與C語言中的include相似。
        GET偽指令只能用于包含源文件,包含目標文件需要使用INCBIN偽指令
        使用示例:
        AREAInitCODEREADONLY
        GETa1.s;通知編譯器當前源文件包含源文件a1.s
        GETC:a2.s;通知編譯器當前源文件包含源文件C:a2.s……
        END

        11、INCBIN
        語法格式:
        INCBIN文件名
        INCBIN偽指令用于將一個目標文件或數據文件包含到當前的源文件中,被包含的文件不作任何變動的存放在當前文件中,編譯器從其后開始繼續處理。
        使用示例:
        AREAInitCODEREADONLY
        INCBINa1.dat;通知編譯器當前源文件包含文件a1.dat
        INCBINC:a2.txt;通知編譯器當前源文件包含文件C:a2.txt……
        END

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

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

        本文引用地址:http://www.104case.com/article/201611/322954.htm

        上一頁 1 2 下一頁

        關鍵詞: ARM匯編偽指

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 县级市| 渭南市| 色达县| 肥乡县| 祥云县| 娄底市| 襄汾县| 孙吴县| 枣庄市| 福安市| 台前县| 邵武市| 七台河市| 五大连池市| 于都县| 视频| 崇左市| 太仓市| 陇川县| 法库县| 武冈市| 清新县| 佛学| 会昌县| 三亚市| 凤山市| 阿鲁科尔沁旗| 金平| 炎陵县| 天祝| 如东县| 五大连池市| 墨脱县| 金秀| 佛学| 西宁市| 宁乡县| 长治县| 山东| 马龙县| 汝南县|