新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM匯編程序基本知識

        ARM匯編程序基本知識

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

        如:

        Str DCB “this is a test” ;分配一片連續的字節存儲單元并初始化

        Data DCW 1,2,3 ;分配一片連續的半字存儲單元并初始化

        Data DCD 4,5,6 ; 分配一片連續的字存儲單元并初始化

        Fdata DCFS 2e5,-5e-7 ;分配一片連續的字存儲單元并初始化為指定的單精度數

        Dspce SPACE 100 ;分配連續100字節的存儲單元并初始化為0

        控制偽操作

        IF ELSE ENDIF

        WHILE WEND

        MACRO MEND;MEXIT

        信息報告偽操作

        ASSERT

        INFO

        OPT

        其他常用偽操作

        AREA ALIGN CODE16/CODE32 ENTRY END EQU EXPORT(GLOBLE) IMPORT EXTERN GET(INCLUDE) INCBIN RN ROUT

        AREA

        格式:AREA 段名 屬性1,屬性2,……

        常用屬性有:

        CODE :用于定義代碼段,默認為READONLY

        DATA: 定義數據段,默認為READWRITE

        READONLY: 指定本段為只讀

        READWRITE: 指定本段為讀寫

        ALIGN: 使用方式為ALIGN表達式。在默認時,ELF(可執行鏈接文件)的代碼段和數據段是按字對齊的。表達式的取值范圍為0~31,相應的對齊方式為2次冪。

        COMMON: 定義一個通用的段,不包含任何用戶的代碼和數據。各源文件中同名的COMMON段共享同一段存儲單元。

        ALIGN

        格式:ALIGN [表達式[,偏移量]]

        ALIGN偽操作可通過添加填充字節的方式,使當前位置滿足一定的對齊方式。

        例:

        ……

        DATA1DCB “STRIN” ; 定義后不能保證地址對齊

        ALIGN 4 ;確保當前地址是4字節對齊

        ……

        例:

        AREA Cache, CODE, ALIGN=3 ; 指定本代碼段的指令時23=8字節對齊的

        ……

        MOV PC, LR ;程序跳轉后是4字節對齊,返回后需要繼續8字節對齊

        ALIGN 8 ;當前位置再次滿足8字節對齊

        ……

        注意上面,在AREA中使用和單獨使用ALIGN的區別,格式和計算方式不一樣。

        ENTRY

        用于指定匯編程序的入口點。一個程序可以由一個或者多個源文件組成,一個源文件由一個或者多個程序段組成。一個程序至少有一個入口點,也可有多個入口點,但是在一個源文件中,最多只能有一個ENTRY。當有多個ENTRY時,程序的真正入口點由鏈接器指定。編譯程序在編譯連接時根據程序入口點進行連接。在只有一個入口點時,編譯程序會把這個入口點的地址定義為系統復位后的程序起始點。

        END

        在源文件結束處寫上,表示源程序的結尾。

        EXPORT

        格式:EXPORT 標號 [,WEAK]

        聲明一個全局標號,該標號在其他文件中可引用。WEAK表示碰上其他同名標號時,其他標號優先。

        AREA INIT, CODE, READONLY

        EXPORT Stest

        ……

        END

        IMPORT

        格式:IMPORT 標號 [,WEAK]

        表示該引用的標號在其他源文件中,但要在當前文件中引用。WEAK表示找不到該標號時,也不報錯,一般講該標號值置為0,如果是B或者BL使用到,則該指令置為NOP。

        與EXTERN的不同的是,無論當前文件是否引用該標號,該標號都被加入當前源文件的符號表中。

        AREA INIT, CODE, READONLY

        IMPORT MAIN;

        ……

        END

        EXTERN

        和IMPORT一樣,不同之處在于,如果當前文件沒有引用該標號,該標號不會加入當前源文件的符號表中。

        GET(或INCLUDE)

        將一個源文件包含到當前的源文件中,并在當前位置進行編譯。

        AREA INIT, CODE, READONLY

        GET a1.s

        GET C:/a2.s

        ……

        END

        INCBIN

        將一個目標文件或者數據文件包含到當前,文件內容被原封不動的放在當前位置,編譯器不對文件內容進行編譯。

        AREA INIT, CODE, READONLY

        GET a1.s ; 包含a1.s并且對a1.s進行編譯

        INCBIN C:/d.txt ; 包含d.txt,不對內容進行編譯

        GET a2.s ; 包含a2.s,并對內容進行編譯

        END

        RN

        給一個寄存器定義一個別名。

        Temp RN, R0 ; 將R0定義一個別名 Temp


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 兴隆县| 河间市| 蕉岭县| 宁河县| 博罗县| 玉门市| 土默特右旗| 阜新市| 宁德市| 伊春市| 泰顺县| 永康市| 常州市| 开化县| 南通市| 芦溪县| 锦州市| 井陉县| 田阳县| 嵩明县| 安新县| 呼图壁县| 天祝| 永川市| 永春县| 富宁县| 江永县| 新平| 上杭县| 镇坪县| 灵川县| 香河县| 常山县| 清水县| 榆树市| 连云港市| 沙洋县| 平顶山市| 金昌市| 镇原县| 聂拉木县|