<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          Linux下ARM匯編教程

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

          一. Linux匯編行結(jié)構(gòu)
          任何匯編行都是如下結(jié)構(gòu):
          [:] [} @ comment
          [:] [} @ 注釋
          Linux ARM 匯編中,任何以冒號結(jié)尾的標識符都被認為是一個標號,而不一定非要在一行的開始。
          【例1】定義一個"add"的函數(shù),返回兩個參數(shù)的和。
          .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的數(shù)字時為局部標號,局部標號可以重復出現(xiàn),使用方法如下:
          l 標號f: 在引用的地方向前的標號
          標號b: 在引用的地方向后的標號l
          【例2】使用局部符號的例子,一段循環(huán)程序
          1:
          subs r0,r0,#1 @每次循環(huán)使r0=r0-1
          bne 1f @跳轉(zhuǎn)到1標號去執(zhí)行
          局部標號代表它所在的地址,因此也可以當作變量或者函數(shù)來使用。
          三. Linux匯編程序中的分段
          (1).section偽操作
          用戶可以通過.section偽操作來自定義一個段,格式如下:
          .section section_name [, "flags"[, %type[,flag_specific_arguments]]]
          每一個段以段名為開始, 以下一個段名或者文件結(jié)尾為結(jié)束。這些段都有缺省的標志(flags),連接器可以識別這些標志。(與armasm中的AREA相同)。
          下面是ELF格式允許的段標志
          <標志> 含義
          a 允許段
          w 可寫段
          x 執(zhí)行段
          【例3】定義段
          .section .mysection @自定義數(shù)據(jù)段,段名為 “.mysection”
          .align 2
          strtemp:
          .ascii "Temp string n看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();