ARM匯編程序設計之:匯編語言文件格式
3.浮點數(shù)字量表達式
浮點數(shù)字量有以下幾種形式。
·{-}digitsE{-}digits。
·{-}{digits}.digits{E{-}digits}。
·0xhexdigits。
·hexdigits。
其中,digits為十進制數(shù),要在其后加上字母E(大寫或小寫)來表示其指數(shù);hexdigits為十六進制數(shù)。
單精度浮點數(shù)的表示范圍為1.17549435e−38~3.40282347e+38;雙精度浮點數(shù)的表示范圍為2.22507385850720138e-308~1.79769313486231571e+308。
下面的例子說明了浮點數(shù)據(jù)量的基本用法。
DCFD1E308,-4E-100
DCFS1.0
DCFD3.725e15
LDFS0x7FC00000;
LDFDFFF0000000000000;
4.邏輯表達式
邏輯表達式一般由邏輯量、邏輯運算符和括號構成,其表達式的運算結(jié)果為真或假。與邏輯表達式相關的運算符有“=”、“>”、“”、“>=”、“=”、“/=”、“>”運算符和“LAND”、“LOR”、“LNOT”及“LEOR”運算符。
5.程序或寄存器相關表達式
寄存器相關表達式的值等于指定寄存器的值加上或減去一個數(shù)字表達式。
程序相關表達式的值等于程序計數(shù)器PC的值加上或減去一個數(shù)字表達式的值。此種表達式通常由程序中的標號與一個數(shù)字表達式組成。
下面的例子說明了程序或寄存器相關表達式的基本使用方法。
LDRr4,=data+4*n ;n是匯編時取值變量
;code
MOVpc,lr
dataDCDvalue0
;n-1個DCD偽操作
DCDvaluen ;data+4*n指向此
;更多DCD偽操作
6.匯編中的操作符
(1)操作符的優(yōu)先級
在匯編語言程序設計中,表達式包含一個擴展的操作符集,這些操作符和高級語言中的運算符十分接近。其運算次序遵循如下的優(yōu)先級。
①優(yōu)先級相同的雙目運算符的運算順序為從左到右。
②相鄰的單目運算符的運算順序為從右到左,單目運算符的優(yōu)先級高于其他運算符。
③括號運算符的優(yōu)先級最高。
匯編語法的操作符優(yōu)先級和C語言中的不完全相同。例如在匯編中,下面的匯編語言
(1+2∶SHR∶3)相當于(1+(2∶SHR∶3)),而在C語言中,運算則變?yōu)椋ǎ?+2)>>3)=0。類似于這樣的操作,在使用時要特別注意。
注意 | 為了保證表達式運算結(jié)果的正確,建議使用“()”來避免異義。 |
表10.4列出了匯編操作符的優(yōu)先級以及對應的C語言運算符。
表10.4 匯編操作符優(yōu)先級
匯編操作符 | C語言運算符 |
單目運算 | 單目運算 |
*/:MOD: | */% |
字符串操作 | n/a |
:SHL::SHR::ROR::ROL: | >> |
+-:AND::OR::EOR: | +-$| |
=>>==/=> | ==>>==!= |
:LAND::LOR::LEOR: | || |
說明 | 表10.3是按操作符的優(yōu)先級從上到下排列的。 |
C語言運算符優(yōu)先級從高到低排列如下。
·單目運算
·*/%
·+-(asbinaryoperators)
·>>
·=>>=
·==!=
·
·^
·|
·
·||
(2)單目運算
最高優(yōu)先級的單目運算在表達式中最先被計算。單目操作符寫在操作數(shù)的前面。運算順序為從右到左。
表10.5列出了匯編中單目運算操作符及其返回值。
表10.5 匯編中單目運算操作符及其返回值。
操作符 | 使用 | 描述 |
:CHR: | :CHR:A | 返回字母A的ASCII碼 |
:LOWERCASE | :LOWERCASE:string | 將給定字符串中的所有大寫字母變成小寫 |
REVERSE_CC | :REVERSE_CC:cond_code | 對條件碼取反 |
:STR: | :STR:A | 將一個數(shù)字量或邏輯表達式轉(zhuǎn)換成串 |
:UPPERCASE: | :UPPERCASE:string | 將給定字符串中的所有小寫字母變成大寫 |
? | ?A | 返回定義符號A的代碼行所生產(chǎn)代碼行的字節(jié)數(shù) |
續(xù)表
操作符 | 使用 | 描述 |
+和- | +A和-A | 單目加和單目減,操作數(shù)為數(shù)學或程序相關表達式 |
:BASE: | :BASE:A | 如果A是程序或寄存器相關表達式,:BASE:返回基址寄存器的編號 |
:CC_ENCODING: | :CC_ENCODING:cond_code | 返回條件碼中的數(shù)字值 |
: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 |
評論