新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM 一些特殊符號

        ARM 一些特殊符號

        作者: 時間:2016-11-11 來源:網絡 收藏
        特殊符號對應指令含義

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

        特殊符號對應指令含義


        = DCB 分配一片連續的字節存儲單元并用指定的數據初始化


        &DCD 分配一片連續的字存儲單元并用指定的數據初始化


        % SPACE 分配一片連續的存儲單元


        ^ MAP 定義一個結構化內存表的首地址


        # FILED 定義一個結構化內存表的數據域


        *EQU 為程序中的常量、標號等定義一個等效的字符名稱,

        ! 地址更新,結果寫回到Rn中,Rn不允許是R15


        [ | ]相當于IFELSEENDIF

        其他:

        LDM中{∧}為可選后綴,當指令為LDM且寄存器列表中包含R15,選用該后綴時表示:除了正常的數據傳送之外,還將SPSR復制到 CPSR。同時,該后綴還表示傳入或傳出的是用戶模式下的寄存器,而不是當前模式下的寄存器。

        TST R1,#%1 // 用于測試在寄存器R1中是否設置了最低位(%表示二進制數

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

        GBLS STR1

        GBLS STR2

        STR1 SETS “pen.”

        STR2 SETS“This is a $STR1"

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

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

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

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

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

        B . //表示程序進入死循環。.為location counter,可在源文件中指示當前地址。該符號可以被引用或賦值。

        arm匯編程序中的符號

        在arm匯編語言中,符號(symbols)可以代表地址(addresse)、變量(variables)和數字常量(numeric constants)。當符號代表地址時,又稱為標號(lable)。當標號以數字開頭時,其作用范圍為當前段(當前段沒有使用ROUT偽操作時),這種標號又稱為局部標號(lacal lable)。符號變量包括變量、數字常量、標號和局部標號。

        1、變量

        在程序中,變量的值在匯編處理過程中可能會發生改變。在arm匯編中變量有數字變量、邏輯變量和串變量3種類型。變量的類型在程序中是不可以改變的。

        數字變量的取值范圍為數字常量和數字表達式所能表示的數值;邏輯變量的取值范圍為{true}和{flash};串變量的取值范圍為串表達式可以表達的范圍。

        在arm匯編語言中,使用GBLA、GBLL及GBLS聲明全局變量;使用LCLA、LCLL及LCLS聲明局部變量;使用SETA、SETL及SETS為這些變量賦值。

        2、數字常量

        數字常量是32位的整數。在arm匯編語言中,使用EQU來定義數字常量。數字常量一經定義就不可修改。 進行大小比較時,認為數字常量都是無符號數。

        3、匯編時變量的替換

        如果在串變量前有一個$字符,在匯編時編譯器將用改串的數值來取代該串變量。

        對于數字變量來說,如果該變量前面有一個$字符,在匯編時編譯器將該數字變量的數值轉換成十六進制的串,然后用該十六進制的串取代$字符后的數字變量。

        對于邏輯變量來說,如果該邏輯變量前面有一個$字符,在匯編時編譯器將該邏輯變量替換成它的取值(T或者F)

        如果程序中需要字符$,則用$$來表示,編譯器將不進行變量替換,而是將$$當作$.通常情況下,包含在兩個豎線(|)之間的$并不表示進行變量替換。但是如果豎線(|)是在雙引號內,則將進行變量替換。

        使用“.”來表示變量名稱的結束。

        4、標號

        標號是表示程序中的指令或者數據地址的符號。根據標號的生成方式可分為3種:基于PC的標號?;赑C的標號是位于目標指令前或者程序中數據定義偽操作前的標號。這種標號在匯編時將被處理成PC值加上(或減去)一個數字常量。常用于表示跳轉指令的目標地址,或者代碼段中所嵌入的少量數據。

        基于寄存器的標號?;诩拇嫫鞯臉颂柍S肕AP和FIELD未定義操作,也可以該用EQU偽定義。這種標號在匯編時將被處理成寄存器的值加上(或減去)一個數據常量。常用于訪問數據段中的數據。

        絕對地址。絕對地址是一個32位數據。它可以尋址2^32 -1,即直接可以尋址整個內存空間。

        5、局部標號

        局部標號主要在局部范圍內使用。它由兩部組成:開頭是一個0-99直接的數字,后面緊接一個通常表示該局部變量作用范圍的符號。

        局部變量的作用范圍通常為當前段,也可以用偽操作ROUT來定義局部變量的作用范圍。

        局部變量定義的語法格式如下:

        N{routname},其中,N為0~99之間的數字。routname為符號,通常為該變量作用范圍的名稱(用ROUT偽操作定義的)。

        局部變量引用的語法格式如下:

        %{F|B}{A|T}N{routname}

        其中,N為局部變量的數字號。

        routname為當前作用范圍的名稱(用ROUT偽操作定義的)

        %表示引用操作

        F指示編譯器只向前搜索

        B指示編譯器只向后搜索

        A指示編譯器搜索宏的所有嵌套層次

        T指示編譯器搜索宏的當前層次

        如果F和B都沒有指定,編譯器先向前搜索,再向后搜索如果A和T都沒有指定,編譯器搜索所有從當前層次到宏的最高層次,比當前層次低的層次不再搜索。

        如果指定了routname,編譯器向前搜索最近的ROUT偽操作,若routname與該ROUT偽操作定義的名稱不匹配,編譯器報告錯誤,匯編失敗。

        arm匯編語言中的表達式

        表達式是由符號、數值、單目或多目操作符以及括號組成的。

        1、字符串表達式

        字符串表達式由字符串、字符串變量、操作符以及括號組成。字符串的最大長度為512字節,最小長度為0.下面介紹字符串表達式的組成元素。

        字符串:由包含在雙引號內的一系列的字符組成。字符串的長度受到arm匯編語言語句長度的限制。當在字符串中包含美元符號$或者引號"時,用$$表示一個$,用""表示一個"。

        字符串變量:用偽操作GBLS或者LCLS聲明,用SETS賦值。

        操作符:

        (1)LEN:返回字符串的長度

        :LEN:A

        其中,A為字符串變量(2)CHR:可以將0~255之間的整數作為含一個ASCII字符的字符串。當有些ASCII字符不方便放在字符串中時,可以使用CHR將其放在字符串表達式中。

        :CHR:A

        其中,A為某一字符的ASCII值(3)STR:將一個數字量或者邏輯表達式轉換成串。對于32位的數字量而言,STR將其轉換成8個十六進制數組成的串;對于邏輯表達式而言,STR將其轉換成字符串T或者F

        :STR:A

        其中,A為數字量或者邏輯表達式

        (4)LEFT:返回一個字符串最左端一定長度的子串

        A:LEFT:B

        其中,A為源字符串,B為數字量,表示LEFT將返回的字符個數

        (5)RIGHT:返回一個字符串最右端一定長度的子串

        A:RIGHT:B

        其中,A為源字符串,B為數字量,表示RIGHT將返回的字符個數(6)CC:用于連接兩個字符串。

        A:CC:B

        其中,A為第1個源字符串。B為第2個源字符串。CC操作符將字符串B連接在字符串A的后面。

        2、數字表達式

        數字表達式由數字常量、數字變量、操作符和括號組成

        數字變量用偽操作GBLA或者LCLA聲明,用SETA賦值,它代表一個32位的數字量。

        操作符:

        (1)NOT:按位取反

        :NOT:A

        其中,A為一個32位數字量

        (2)+、—、×、/及MOD算術操作符

        A+B,A-B,A×B,A/B

        A:MOD:B表示A除以B的余數

        (3)ROL,ROR,SHL,SHR移位

        A:ROL:B將整數A循環左移B位

        A:SHL:B將整數A左移B位

        (4)AND、OR及EOR按位邏輯操作符

        A:AND:B將數字表達式A和B按位作邏輯與操作

        3、基于寄存器和基于PC的表達式

        基于寄存器的表達式表示了某個寄存器的值加上(或者減去)一個數字表達式

        基于PC的表達式表示了PC寄存器的值加上(或減去)一個數字表達式?;赑C的表達式通常由程序中的標號與一個數字表達式組成。相關的操作符:(1)BASE:返回基于寄存器的表達式中的寄存器編號。

        :BASE:A A為基于寄存器的表達式

        (2)INDEX:返回基于寄存器的表達式相對于其基址寄存器的偏移量。

        :INDEX:A A為基于寄存器的表達式

        (3)+、﹣:正負號,可以放在數字表達式或者基于PC的表達式前面。

        +A(﹣A)A為基于PC的表達式或者數字表達式

        4、邏輯表達式

        由邏輯量、邏輯操作符、關系操作符以及括號組成,取值范圍為{FLASE}和{TRUE}關系操作符:用于表示兩個同類表達式之間的關系。關系操作符和它的兩個操作數組成一個邏輯表達式,其取值為{FALSE}或{TRUE}

        如A=B表示A等于B

        A/=B,A<>B表示A不等于B邏輯操作符:進行兩個邏輯表達式之間的基本邏輯操作。操作的結果為{FLASE}或{TRUE}

        :LNOT:A邏輯表達式A的值取反

        A:LAND:B邏輯表達式A和B邏輯與

        5、其他的一些操作符

        (1)?:返回定義符號A的代碼行所生成的可執行代碼的字節數?A其中,A為一個符號

        (2)DEF:判斷某個符號是否已定義

        :DEF:A

        如果符號A已經定義,上述結果為{TRUE},否則為{FLASE}

        (3)SB_OFFSET_19_12

        :SB_OFFSET_19_12:label 其中,label為一個標號

        返回(label-SB)的bits[19:12]

        (4)SB_OFFSET_11_0

        :SB_OFFSET_11_0:label



        關鍵詞: ARM特殊符

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 淮北市| 梨树县| 利津县| 阳春市| 德庆县| 乌审旗| 河北省| 泰顺县| 宜宾市| 清涧县| 额尔古纳市| 筠连县| 乌拉特后旗| 浦江县| 满洲里市| 九龙县| 龙州县| 云浮市| 蒙城县| 乌拉特前旗| 阳原县| 湘西| 麻城市| 虹口区| 敦化市| 册亨县| 湖口县| 江孜县| 开封市| 新宾| 新密市| 蓝田县| 北京市| 浮梁县| 嘉峪关市| 丰台区| 洪洞县| 连城县| 安陆市| 叙永县| 莎车县|