新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM匯編程序設計之:匯編語言文件格式

        ARM匯編程序設計之:匯編語言文件格式

        作者: 時間:2013-09-30 來源:網絡 收藏

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

        3.浮點數字量表達式

        浮點數字量有以下幾種形式。

        ·{-}digitsE{-}digits。

        ·{-}{digits}.digits{E{-}digits}。

        ·0xhexdigits。

        ·hexdigits。

        其中,digits為十進制數,要在其后加上字母E(大寫或小寫)來表示其指數;hexdigits為十六進制數。

        單精度浮點數的表示范圍為1.17549435e−38~3.40282347e+38;雙精度浮點數的表示范圍為2.22507385850720138e-308~1.79769313486231571e+308。

        下面的例子說明了浮點數據量的基本用法。

        DCFD1E308,-4E-100

        DCFS1.0

        DCFD3.725e15

        LDFS0x7FC00000;

        LDFDFFF0000000000000;

        4.邏輯表達式

        邏輯表達式一般由邏輯量、邏輯運算符和括號構成,其表達式的運算結果為真或假。與邏輯表達式相關的運算符有“=”、“>”、“”、“>=”、“=”、“/=”、“>”運算符和“LAND”、“LOR”、“LNOT”及“LEOR”運算符。

        5.程序或寄存器相關表達式

        寄存器相關表達式的值等于指定寄存器的值加上或減去一個數字表達式。

        程序相關表達式的值等于程序計數器PC的值加上或減去一個數字表達式的值。此種表達式通常由程序中的標號與一個數字表達式組成。

        下面的例子說明了程序或寄存器相關表達式的基本使用方法。

        LDRr4,=data+4*n ;n是匯編時取值變量

        ;code

        MOVpc,lr

        dataDCDvalue0

        ;n-1個DCD偽操作

        DCDvaluen ;data+4*n指向此

        ;更多DCD偽操作

        6.匯編中的操作符

        (1)操作符的優先級

        在匯編語言程序設計中,表達式包含一個擴展的操作符集,這些操作符和高級語言中的運算符十分接近。其運算次序遵循如下的優先級。

        ①優先級相同的雙目運算符的運算順序為從左到右。

        ②相鄰的單目運算符的運算順序為從右到左,單目運算符的優先級高于其他運算符。

        ③括號運算符的優先級最高。

        匯編語法的操作符優先級和C語言中的不完全相同。例如在匯編中,下面的匯編語言

        (1+2∶SHR∶3)相當于(1+(2∶SHR∶3)),而在C語言中,運算則變為((1+2)>>3)=0。類似于這樣的操作,在使用時要特別注意。

        注意

        為了保證表達式運算結果的正確,建議使用“()”來避免異義。

        表10.4列出了匯編操作符的優先級以及對應的C語言運算符。

        表10.4 匯編操作符優先級

        匯編操作符

        C語言運算符

        單目運算

        單目運算

        */:MOD:

        */%

        字符串操作

        n/a

        :SHL::SHR::ROR::ROL:

        >>

        +-:AND::OR::EOR:

        +-$|

        =>>==/=>

        ==>>==!=

        :LAND::LOR::LEOR:

        ||

        說明

        表10.3是按操作符的優先級從上到下排列的。

        C語言運算符優先級從高到低排列如下。

        ·單目運算

        ·*/%

        ·+-(asbinaryoperators)

        ·>>

        ·=>>=

        ·==!=

        ·

        ·^

        ·|

        ·

        ·||

        (2)單目運算

        最高優先級的單目運算在表達式中最先被計算。單目操作符寫在操作數的前面。運算順序為從右到左。

        表10.5列出了匯編中單目運算操作符及其返回值。

        表10.5 匯編中單目運算操作符及其返回值。

        操作符

        使用

        描述

        :CHR:

        :CHR:A

        返回字母A的ASCII碼

        :LOWERCASE

        :LOWERCASE:string

        將給定字符串中的所有大寫字母變成小寫

        REVERSE_CC

        :REVERSE_CC:cond_code

        對條件碼取反

        :STR:

        :STR:A

        將一個數字量或邏輯表達式轉換成串

        :UPPERCASE:

        :UPPERCASE:string

        將給定字符串中的所有小寫字母變成大寫

        ?A

        返回定義符號A的代碼行所生產代碼行的字節數

        續表

        操作符

        使用

        描述

        +和-

        +A和-A

        單目加和單目減,操作數為數學或程序相關表達式

        :BASE:

        :BASE:A

        如果A是程序或寄存器相關表達式,:BASE:返回基址寄存器的編號

        :CC_ENCODING:

        :CC_ENCODING:cond_code

        返回條件碼中的數字值

        :DEF:

        :DEF:A

        判斷A是否被定義,如果被定義返回{TRUE};如果沒有定義返回{FALSE}

        :INDEX:

        :INDEX:A

        如果A是寄存器相關表達式,:INDEX:返回A相對于寄存器的偏移量,常用在宏操作中

        :LEN:

        :LEN:A

        字符串A的長

        :LNOT:

        :LNOT:A

        邏輯表達式A的值取反

        :NOT:

        :NOT:A

        ~A

        A的值按位取反

        :RCONT:

        :RCONT:Rn

        返回寄存器編號,0~15對應寄存器r0~r15



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 扬州市| 阳高县| 北票市| 永兴县| 湘乡市| 曲沃县| 平舆县| 越西县| 太白县| 霞浦县| 顺昌县| 冕宁县| 宜章县| 蕲春县| 苍南县| 长兴县| 广宗县| 望江县| 邳州市| 讷河市| 广德县| 五大连池市| 碌曲县| 安龙县| 灵山县| 秦皇岛市| 会宁县| 蒙山县| 江都市| 雅安市| 奉贤区| 马山县| 和政县| 安庆市| 米易县| 玛曲县| 桃园市| 宁河县| 巍山| 定兴县| 泽州县|