色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM匯編程序設(shè)計(jì)之:匯編語(yǔ)言文件格式

          ARM匯編程序設(shè)計(jì)之:匯編語(yǔ)言文件格式

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

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

          10.3.6匯編語(yǔ)言的程序結(jié)構(gòu)

          (Thumb)匯編語(yǔ)言程序中以程序段為單位組織代碼。段是相對(duì)獨(dú)立的指令或數(shù)據(jù)序列,具有特定的名稱(chēng)。段可以分為代碼段(CodeSection)和數(shù)據(jù)段(DataSection),代碼段的內(nèi)容為執(zhí)行代碼,數(shù)據(jù)段存放代碼運(yùn)行時(shí)需要用到的數(shù)據(jù)。一個(gè)至少應(yīng)該有一個(gè)代碼段,當(dāng)程序較長(zhǎng)時(shí),可以分割為多個(gè)代碼段和數(shù)據(jù)段,多個(gè)段在程序編譯鏈接時(shí)最終形成一個(gè)可執(zhí)行的映像文件。

          可執(zhí)行映像文件通常由以下幾部分構(gòu)成。

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

          ·零個(gè)或多個(gè)數(shù)據(jù)段,數(shù)據(jù)段的屬性為可讀寫(xiě)。數(shù)據(jù)段可是被初始化的數(shù)據(jù)段或沒(méi)有被初始化的數(shù)據(jù)段(ZI,zeroinitialized)。

          鏈接器根據(jù)系統(tǒng)默認(rèn)或用戶(hù)設(shè)定的規(guī)則,將各個(gè)段安排在存儲(chǔ)器中的相應(yīng)位置。因此源程序中段之間的相對(duì)位置與可執(zhí)行的映像文件中段的相對(duì)位置一般不會(huì)相同。

          以下是一個(gè)匯編語(yǔ)言源程序的基本結(jié)構(gòu)。

          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

          在匯編語(yǔ)言程序中,用AREA偽操作定義一個(gè)段,并說(shuō)明所定義段的相關(guān)屬性,本例定義一個(gè)名為Init的代碼段,屬性為只讀。ENTRY偽操作標(biāo)識(shí)程序的入口點(diǎn),接下來(lái)為指令序列,程序的末尾為END偽指令,該偽操作告訴編譯器源文件的結(jié)束,每一個(gè)段都必須有一條END偽操作,指示代碼段的結(jié)束。

          10.3.7匯編語(yǔ)言子程序調(diào)用

          匯編語(yǔ)言程序中,子程序的調(diào)用一般是通過(guò)BL指令來(lái)實(shí)現(xiàn)的。在程序中,使用指令“BL子程序”名即可完成子程序的調(diào)用。

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

          注意

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

          以下是使用BL指令調(diào)用子程序的匯編語(yǔ)言源程序的基本結(jié)構(gòu):

          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


          上一頁(yè) 1 2 3 4 5 6 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉