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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM匯編特殊符號 匯編符號引用

          ARM匯編特殊符號 匯編符號引用

          作者: 時間:2016-11-09 來源:網絡 收藏
          特殊符號 ---- 對應指令 ---- 含義 ---- 示例
          ^---- MAP----定義結構化內存表----MAP 4096;內存表首地址為4096
          #----FIELD----定義內存表中的數據,結合MAP指令使用----
          MAP 4096
          STACKSVC FIELD 256;定義從4096開始的256字節(jié)為SVC的堆??臻g。
          %----SPACE----分配一塊內存,并用“0”初始化----DataStruc SPACE 280;分配280字節(jié)內存并初始化
          [|] ----IF ELSE ENDIF----條件編譯,有選擇的確定需要編譯的代碼IF,ELSE,ENDIF,可以嵌套使用----
          IF 邏輯表達式
          指令或偽指令
          ELSE
          指令或偽指令
          ENDIF
          另外還有符號: $
          如果在串變量前有一個$,則在匯編時編譯器將用該串變量的數值取代該串變量,如:
          GBLS STR1
          GBLS STR2
          STR1 SETS “pen.”
          STR2 SETS “This is a $STR1"
          編譯后的結果是STR2的值為This is a pen.
          如果$后是數字變量(與串變量區(qū)分),在匯編時編譯器將該數字變量的數值轉換成十六進制的串,然后用該十六進制的串取代$后的數字變量。
          如果$后是邏輯變量,在匯編時編譯器將該邏輯變量替換成它的取值(T或者F)。
          如果程序中需要$,則用$$來表示,編譯器將不進行變量替換。
          GBLS STR1
          GBLS B
          GBLA NUM1
          NUM1 SETA 14
          B SETS “CHANGED”
          STR1 SETS “abc$$B$NUM1”
          編譯結果STR1的值為:abcB0000000E。
          注意:在兩個豎線“|”之間的$并不表示進行變量替換,但如果“|”是在雙引號內,則將進行變量替換。
          使用點"."來表示變量名的結束。
          GBLS STR1
          GBLS STR2
          STR1 SETS “AAA”
          STR2 SETS “bbb$STR1.CCC"
          編譯結果STR2值為bbbAAACCC
          還有一個例外:“%”
          “%”除了表示SPACE外,還可以在局部標號中使用,具體意思見偽指令ROUT的使用示例:
          ◆ROUT
          ROUT偽指令定義局部標號的有效范圍,偽指令格式如下:{name} ROUT。其中 name 所定義的作用范圍的名稱。
          當沒有使用ROUT偽指令時,局部標號的作用范圍為所在段;ROUT偽令的作用范圍在本ROUT偽指令和下一個ROUT偽指令之間(指同一段中的ROUT偽指令)
          偽指令應用舉例如下:
          routineA ROUT ;定義局部標號的有效范圍,名稱為routineA
          ......
          3routineA ;routineA范圍內的局部標號3
          ......
          BEQ %4routineA ;若條件成立,跳轉到routineA范圍內的局部標號 4
          ......
          BEQ %3routineA ;若條件成立,跳轉到routineA范Iq內的局部標號 3
          ......
          4routineA ;routineA范圍內的局部標號4
          ......
          otherstuff ROUT ;定義新的局部標號的有效范圍

          本文引用地址:http://www.ex-cimer.com/article/201611/317587.htm

          ----------------------------------------------------------------------

          ADS中ARM匯編語言程序設計的符號引用規(guī)范

          Error:Undefined symbols ....
          找到引用符號的匯編源文件和定義符號的匯編源文件仔細檢查和對比,符號沒有寫錯,而且在引用符號之前確實把符號使用IMPORT引入了進來。百思不得其解時,突然想到在定義符號的文件中沒有對符號EXPORT。非常低級的錯誤。
          在匯編語言程序設計中,養(yǎng)成良好的編程習慣,形成良好的編碼風格是非常重要的。這里僅根據個人習慣和體會略談一下使用ADS進行ARM匯編語言程序設計時的符號引用規(guī)則,主要是對不同性質的符號使用不同的引用辦法:
          (1)對于寄存器地址定義以及通用的常量或符號定義(使用EQU定義),可以按類定義在一個.s匯編文件中,在要使用這些定義的源文件中可使用INCLUDE將該.s匯編文件包含進來。
          這樣做的好處是:避免大量的IMPORT和EXPORT偽語句,增強代碼的可讀性,另外,對于多個源文件要使用許多相同寄存器地址定義或常量定義的場合,這樣做可以大大壓縮代碼尺寸(經筆者實踐證實)。
          (2)對于代碼段的地址標號或函數入口地址標號(函數名),在代碼段或函數的定義處使用EXPORT輸出;在要調用該代碼段或函數的源文件中使用IMPORT將符號引入。
          一定要保證IMPORT和EXPORT是成對使用的,若不EXPORT則IMPORT無效,若只EXPORT而不IMPORT也無法引用符號。


          評論


          技術專區(qū)

          關閉
          看屁屁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); })();