新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 關于ARM匯編里的特殊符號

        關于ARM匯編里的特殊符號

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

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

        本文引用地址:http://www.104case.com/article/201611/317238.htm

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

        特殊符號 | 對應指令 | 含義 | 示例

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

        ^ | MAP | 定義結構化內存表 | MAP 4096;內存表首地

        | | | 址為4096

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

        # | FIELD | 定義內存表中的數 | MAP 4096

        | | 據,結合MAP指令 | STACKSVC FIELD 256;

        | | 使用。 | 定義從4096開始的256字節

        | | |為SVC的堆棧空間。

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

        % | SPACE | 分配一塊內存,并 | DataStruc SPACE 280

        | | 用“0”初始化 | 分配280字節內存并初始化

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

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

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

        | | IF,ELSE,ENDIF | ELSE

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

        | | | ENDIF

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

        另外還有符號: $

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

        GBLS STR1

        GBLS STR2

        STR1 SETS “pen.”

        STR2 SETS “This is a $STR1"

        編譯后的結果是STR2的值為This is a pen.

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

        如果$后是邏輯變量,在匯編時編譯器將該邏輯變量替換成它的取值(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 ;定義新的局部標號的有效范圍



        關鍵詞: ARM匯編里特殊符

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 沙田区| 钟祥市| 万宁市| 体育| 保靖县| 客服| 永兴县| 嘉鱼县| 安新县| 来安县| 衡阳县| 井陉县| 沁阳市| 余庆县| 长垣县| 永和县| 沾化县| 沅陵县| 班戈县| 三穗县| 特克斯县| 邳州市| 隆安县| 邹城市| 龙山县| 岳阳县| 松原市| 抚松县| 沁水县| 米泉市| 成都市| 界首市| 迭部县| 原阳县| 南丰县| 大英县| 大同市| 长乐市| 西和县| 博客| 太仓市|