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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 關(guān)于ARM匯編里的特殊符號

          關(guān)于ARM匯編里的特殊符號

          作者: 時間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
          先前企圖全部靠自己寫一個bootloader,結(jié)果嘗試了下,花了4天時間查各種技術(shù)資料,寫了個startup.s文件出來,寫的過程中才發(fā)現(xiàn),原來還有很多問題是我基本上不知道的,比如說如何進(jìn)行ARM的位操作、如何將堆棧設(shè)置到RAM中、UART的波特率計算方法等問題。

          在邊寫邊查資料的過程中,我又發(fā)現(xiàn)了別人的一些程序我看不懂。。。因為除了EQU、DCD等我基本不用偽指令。。。

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

          所以我開始看44B0 BootLoader的范例程序,可能是人家水平實在比較高,也可能是俺的水平確實有限,總之是有些地方看不怎么懂,特別是一些個特殊符號,現(xiàn)特將那些個麻煩的符號總結(jié)下:

          特殊符號 | 對應(yīng)指令 | 含義 | 示例

          -------------------|---------------------------------|----------------------------------|---------------------------------------

          ^ | MAP | 定義結(jié)構(gòu)化內(nèi)存表 | MAP 4096;內(nèi)存表首地

          | | | 址為4096

          -------------------|---------------------------------|----------------------------------|---------------------------------------

          # | FIELD | 定義內(nèi)存表中的數(shù) | MAP 4096

          | | 據(jù),結(jié)合MAP指令 | STACKSVC FIELD 256;

          | | 使用。 | 定義從4096開始的256字節(jié)

          | | |為SVC的堆??臻g。

          -------------------|---------------------------------|----------------------------------|---------------------------------------

          % | SPACE | 分配一塊內(nèi)存,并 | DataStruc SPACE 280

          | | 用“0”初始化 | 分配280字節(jié)內(nèi)存并初始化

          -------------------|---------------------------------|----------------------------------|---------------------------------------

          [|] | IF ELSE ENDIF | 條件編譯,有選擇的 | IF 邏輯表達(dá)式

          | | 確定需要編譯的代碼 | 指令或偽指令

          | | IF,ELSE,ENDIF | ELSE

          | | 可以嵌套使用 | 指令或偽指令

          | | | ENDIF

          -------------------|---------------------------------|----------------------------------|---------------------------------------

          另外還有符號: $

          如果在串變量前有一個$則在匯編時編譯器將用該串變量的數(shù)值取代該串變量,如:

          GBLS STR1

          GBLS STR2

          STR1 SETS “pen.”

          STR2 SETS “This is a $STR1"

          編譯后的結(jié)果是STR2的值為This is a pen.

          如果$后是數(shù)字變量(與串變量區(qū)分),在匯編時編譯器將該數(shù)字變量的數(shù)值轉(zhuǎn)換成十六進(jìn)制的串,然后用該十六進(jìn)制的串取代$后的數(shù)字變量。

          如果$后是邏輯變量,在匯編時編譯器將該邏輯變量替換成它的取值(T或者F)。

          如果程序中需要$,則用$$來表示,編譯器將不進(jìn)行變量替換。

          GBLS STR1

          GBLS B

          GBLA NUM1

          NUM1 SETA 14

          B SETS “CHANGED”

          STR1 SETS “abc$$B$NUM1”

          編譯結(jié)果STR1的值為:abcB0000000E。

          注意:在兩個豎線“|”之間的$并不表示進(jìn)行變量替換,但如果“|”是在雙引號內(nèi),則將進(jìn)行變量替換。

          使用點"."來表示變量名的結(jié)束。

          GBLS STR1

          GBLS STR2

          STR1 SETS “AAA”

          STR2 SETS “bbb$STR1.CCC"

          編譯結(jié)果STR2值為bbbAAACCC

          還有一個例外:“%”

          “%”除了表示SPACE外還可以在局部標(biāo)號中使用,具體意思見偽指令ROUT的使用示例:

          ◆ROUT

          ROUT偽指令定義局部標(biāo)好的有效范圍

          偽指令格式如下

          {name} ROUT

          其中 name 所定義的作用范圍的名稱

          當(dāng)沒有使用ROUT偽指令時,局部標(biāo)號的作用范圍所在段ROUT偽令的作用范

          圍在本ROUT偽指令和下一個ROUT偽指令之間(指同一段中的ROUT偽指令)

          偽指令應(yīng)用舉例如下:

          routineA ROUT ;定義局部標(biāo)號的有效范圍,名稱為routineA

          ......

          3routineA ;routineA范圍內(nèi)的局部標(biāo)號3

          ......

          BEQ %4routineA ;若條件成立,跳轉(zhuǎn)到routineA范圍內(nèi)的局部標(biāo)號 4

          ......

          BEQ %3routineA ;若條件成立,跳轉(zhuǎn)到routineA范Iq內(nèi)的局部標(biāo)號 3

          ......

          4routineA ;routineA范圍內(nèi)的局部標(biāo)號4

          ......

          otherstuff ROUT ;定義新的局部標(biāo)號的有效范圍



          關(guān)鍵詞: ARM匯編里特殊符

          評論


          技術(shù)專區(qū)

          關(guā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); })();