• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > ARM匯編程序設計之:匯編語言文件格式

    ARM匯編程序設計之:匯編語言文件格式

    作者: 時間:2013-09-30 來源:網絡 收藏

    本文引用地址:http://www.czjhyjcfj.com/article/257046.htm

    10.3.6匯編語言的程序結構

    (Thumb)匯編語言程序中以程序段為單位組織代碼。段是相對獨立的指令或數據序列,具有特定的名稱。段可以分為代碼段(CodeSection)和數據段(DataSection),代碼段的內容為執行代碼,數據段存放代碼運行時需要用到的數據。一個至少應該有一個代碼段,當程序較長時,可以分割為多個代碼段和數據段,多個段在程序編譯鏈接時最終形成一個可執行的映像文件。

    可執行映像文件通常由以下幾部分構成。

    ·一個或多個代碼段,代碼段的屬性為只讀。

    ·零個或多個數據段,數據段的屬性為可讀寫。數據段可是被初始化的數據段或沒有被初始化的數據段(ZI,zeroinitialized)。

    鏈接器根據系統默認或用戶設定的規則,將各個段安排在存儲器中的相應位置。因此源程序中段之間的相對位置與可執行的映像文件中段的相對位置一般不會相同。

    以下是一個匯編語言源程序的基本結構。

    AREA Init,CODE,READONLY

    ENTRY

    Start

    LDR R0,=0x3FF5000

    LDR R1,0xFF

    STR R1,[R0]

    LDR R0,=0x3FF5008

    LDR R1,0x01

    STR R1,[R0]

    ……

    END

    在匯編語言程序中,用AREA偽操作定義一個段,并說明所定義段的相關屬性,本例定義一個名為Init的代碼段,屬性為只讀。ENTRY偽操作標識程序的入口點,接下來為指令序列,程序的末尾為END偽指令,該偽操作告訴編譯器源文件的結束,每一個段都必須有一條END偽操作,指示代碼段的結束。

    10.3.7匯編語言子程序調用

    匯編語言程序中,子程序的調用一般是通過BL指令來實現的。在程序中,使用指令“BL子程序”名即可完成子程序的調用。

    該指令在執行時完成如下操作:將子程序的返回地址存放在連接寄存器LR中,同時將程序計數器PC指向子程序的入口點。當子程序執行完畢需要返回調用處時,只需要將存放在LR中的返回地址重新拷貝給程序計數器PC即可。在調用子程序的同時,也可以完成參數的傳遞和從子程序返回運算的結果,通??梢允褂眉拇嫫鱎0~R3完成。

    注意

    不同編譯器編譯的代碼間的相互調用,要遵循AAPCS(Architecture)。詳見ARM編譯工具手冊。

    以下是使用BL指令調用子程序的匯編語言源程序的基本結構:

    AREA Init,CODE,READONLY

    ENTRY

    Start

    LDR R0,=0x3FF5000

    LDR R1,0xFF

    STR R1,[R0]

    LDR R0,=0x3FF5008

    LDR R1,0x01

    STR R1,[R0]

    BL PRINT_TEXT

    ……

    PRINT_TEXT

    ……

    MOV PC,BL

    ……

    END


    上一頁 1 2 3 4 5 6 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 五莲县| 乾安县| 施秉县| 浮梁县| 六安市| 堆龙德庆县| 扎鲁特旗| 长治县| 阿坝县| 耿马| 广南县| 抚远县| 格尔木市| 嘉义县| 三亚市| 宝清县| 巴林右旗| 嘉祥县| 安宁市| 青浦区| 德江县| 嘉义县| 涪陵区| 漳州市| 潍坊市| 小金县| 玉门市| 秦皇岛市| 安国市| 韶山市| 达拉特旗| 新巴尔虎左旗| 怀仁县| 阳朔县| 定南县| 景谷| 永丰县| 芜湖县| 兰考县| 华坪县| 侯马市|