新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > linux 下arm匯編語法

        linux 下arm匯編語法

        作者: 時間:2016-11-20 來源:網絡 收藏
        第一部分 Linux下ARM匯編語法
        盡管在Linux下使用C或C++編寫程序很方便,但匯編源程序用于系統最基本的初始化,如初始化堆棧指針、設置頁表、操作ARM的協處理器等。初始化完成后就可以跳轉到C代碼執行。需要注意的是,GNU的匯編器遵循AT&T的匯編語法,可以從GNU的站點(www.gnu.org)上下載有關規范。

        一. Linux匯編行結構
        任何匯編行都是如下結構:
        [:] [} @ comment
        [:] [} @ 注釋
        Linux ARM 匯編中,任何以冒號結尾的標識符都被認為是一個標號,而不一定非要在一行的開始。
        定義一個"add"的函數,返回兩個參數的和。
        .section .text, “x”
        .global add @ give the symbol add external linkage
        add:
        ADD r0, r0, r1 @ add input arguments
        MOV pc, lr @ return from subroutine
        @ end of program

        二. Linux 匯編程序中的標號
        標號只能由a~z,A~Z,0~9,“.”,_等字符組成。當標號為0~9的數字時為局部標號,局部標號可以重復出現,使用方法如下:
        ? 標號f: 在引用的地方向前的標號
        ? 標號b: 在引用的地方向后的標號
        使用局部符號的例子,一段循環程序
        1:
        subs r0,r0,#1 @每次循環使r0=r0-1
        bne 1f @跳轉到1標號去執行
        局部標號代表它所在的地址,因此也可以當作變量或者函數來使用。

        三. Linux匯編程序中的分段
        (1).section偽操作
        用戶可以通過.section偽操作來自定義一個段,格式如下:
        .section section_name [, "flags"[, %type[,flag_specific_arguments]]]
        每一個段以段名為開始, 以下一個段名或者文件結尾為結束。這些段都有缺省的標志(flags),連接器可以識別這些標志。(與armasm中的AREA相同)。

        下面是ELF格式允許的段標志
        <標志> 含義
        a 允許段
        w 可寫段
        x 執行段

        定義段
        .section .mysection @自定義數據段,段名為 “.mysection”
        .align 2
        strtemp:
        .ascii "Temp string n 主站蜘蛛池模板: 武乡县| 新宁县| 都江堰市| 都兰县| 四子王旗| 肇庆市| 保靖县| 宁陵县| 南陵县| 高邮市| 奈曼旗| 白玉县| 开平市| 塔城市| 浏阳市| 介休市| 永福县| 衢州市| 延边| 永康市| 新兴县| 五寨县| 依安县| 重庆市| 赤城县| 信丰县| 定安县| 织金县| 剑河县| 平谷区| 柯坪县| 张家口市| 正镶白旗| 布拖县| 茶陵县| 定襄县| 前郭尔| 庆云县| 航空| 金沙县| 四子王旗|