資料介紹
10.3.1 ARM匯編語言語句格式
ARM(Thumb)匯編語法語句格式如下所示。
{symbol}{instruction|directive|pseudo-instruction}{;comment}
?、?symbol
程序符號。通常為地址標(biāo)號(label)。在指令和偽指令中通常為標(biāo)號;在一些偽操作中符號可能是變量或常數(shù)。詳見ARM偽操作一節(jié)。
在書寫中,符號必須從一行的行頭開始,前面不能包含空格或制表符tab。
?、?instruction
ARM或Thumb指令。
?、?directive
偽操作。詳見ARM偽操作一節(jié)。
④ pseudo-instruction
ARM偽指令。詳見ARM偽指令一節(jié)。
?、?comment
語句注釋。注釋以分號(;)開頭,注釋的結(jié)尾即為一行的結(jié)尾。為了程序清晰易讀,注釋也可以單獨(dú)占用一行。匯編器在對程序進(jìn)行匯編時忽略注釋。
在匯編語言程序設(shè)計(jì)中,每一條指令的助記符可以全部用大寫或全部用小寫,但不允許在一條指令中大、小寫混用。
同時,如果一條語句太長,可將該長語句分為若干行來書寫,在行的末尾用“\”表示下一行與本行為同一條語句。
10.3.2 ARM匯編語言中的符號
在匯編語言程序設(shè)計(jì)中,經(jīng)常使用各種符號代替地址(addresses)、變量(variables)和常量(constants)等,以增加程序的靈活性和可讀性。盡管符號的命名由編程者決定,但并不是任意的,必須遵循以下的約定。
?。?)符號區(qū)分大小寫,同名的大、小寫符號會被編譯器認(rèn)為是兩個不同的符號。
?。?)符號在其作用范圍內(nèi)必須惟一。
?。?)自定義的符號名不能與系統(tǒng)的保留字相同。其中保留字包括系統(tǒng)內(nèi)部變量
?。╞uilt in variable)和系統(tǒng)預(yù)定義(predefined symbol)的符號。
?。?)符號名不應(yīng)與指令或偽指令同名。如果要使用和指令或偽指令同名的符號要用雙斜杠“||”將其括起來,如“||ASSERT||”。
注意雖然符號被雙斜杠括起來,但雙斜杠并非符號名的一部分。
(5)局部標(biāo)號以數(shù)字開頭,其他的符號都不能以數(shù)字開頭。
1.變量(variable)
程序中的變量是指其值在程序的運(yùn)行過程中可以改變的量。ARM(Thumb)匯編程序所支持的變量有三種。
· 數(shù)字變量(numeric)。
· 邏輯變量(logical)。
· 字符串變量(string)。
數(shù)字變量用于在程序的運(yùn)行中保存數(shù)字值,但注意數(shù)字值的大小不應(yīng)超出數(shù)字變量所能表示的范圍。
邏輯變量用于在程序的運(yùn)行中保存邏輯值,邏輯值只有兩種取值情況:真({TURE})和假({FALSE})。
字符串變量用于在程序的運(yùn)行中保存一個字符串,注意字符串的長度不應(yīng)超出字符串變量所能表示的范圍。
在ARM(Thumb)匯編語言程序設(shè)計(jì)中,可使用GBLA、GBLL、GBLS偽指令聲明全局變量,使用LCLA、LCLL、LCLS偽指令聲明局部變量,可使用SETA、SETL和SETS對其進(jìn)行初始化。
2.常量(constants)
程序中的常量是指其值在程序的運(yùn)行過程中不能被改變的量。ARM(Thumb)匯編程序所支持的常量有數(shù)字常量、邏輯常量和字符串常量。
數(shù)字常量一般為32位的整數(shù),當(dāng)作為無符號數(shù)時,其取值范圍為0~232?1,當(dāng)作為有符號數(shù)時,其取值范圍為?231~231?1。匯編器認(rèn)為?n和232?n是相等的。對于關(guān)系操作,如比較兩個數(shù)的大小,匯編器將其操作數(shù)看作無符號的數(shù),也就是說“0》?1”,對匯編器來說取值為“假({FLASE})”。
邏輯常量只有兩種取值情況,真或假。
字符串常量為一個固定的字符串,一般用于程序運(yùn)行時的信息提示。
3.程序中的變量代換
匯編語言中的變量可以作為作為一整行出現(xiàn)在匯編程序中,也可以作為行的一部分使用。
如果在數(shù)字變量前面有一個代換操作符“$”,編譯器會將該數(shù)字變量的值轉(zhuǎn)換為十六進(jìn)制的字符串,并將該十六進(jìn)制的字符串代換“$”后的數(shù)字變量。
如果在邏輯變量前面有一個代換操作符“$”,編譯器會將該邏輯變量代換為它的取值(真或假)。
如果在字符串變量前面有一個代換操作符“$”,編譯器會將該字符串變量的值代換“$”后的字符串變量。
如果程序中需要字符“$”,則可以用“$$”來表示。匯編器將不進(jìn)行變量替換,而是將“$$”作為“$”。
下面的兩個例子說明了變量替換的過程。
; 直接的變量替換
GBLS add4ff
;
add4ff SETS “ADD r4,r4,#0xFF” ;給變量add4ff賦值
$add4ff.00 ;引用變量
; codes
ADD r4,r4,#0xFF00
; 有特殊符號的變量替換
GBLS s1
GBLS s2
GBLS fixup
GBLA count
;
count SETA 14
s1 SETS “a$$b$count” ;s1 =a$b0000000E
s2 SETS “abc”
fixup SETS “|xy$s2.z|” ;fixup= |xyabcz|
|C$$code| MOV r4,#16 ;label= C$$code
4.程序標(biāo)號(label)
在ARM匯編中,標(biāo)號代表一個地址,段內(nèi)標(biāo)號的地址在匯編時確定,而段外標(biāo)號地址值在鏈接時確定。根據(jù)標(biāo)號的生成方式,程序標(biāo)號分為以下三種。
· 程序相關(guān)標(biāo)號(Program-relative labels)。
· 寄存器相關(guān)標(biāo)號(Register-relative labels)。
· 絕對地址(Absolute address)。
?。?)程序相關(guān)標(biāo)號
程序相關(guān)標(biāo)號指位于目標(biāo)指令前的標(biāo)號或程序中的數(shù)據(jù)定義偽操作前的標(biāo)號。這種標(biāo)號在匯編時將被處理成PC值加上或減去一個數(shù)字常量。它常用于表示跳轉(zhuǎn)指令的目標(biāo)地址或代碼段中所嵌入的少量數(shù)據(jù)。
?。?)寄存器相關(guān)地址
這種標(biāo)號在匯編時將被處理成寄存器的值加上或減去一個數(shù)字常量。它常被用于訪問數(shù)據(jù)段中的數(shù)據(jù)。這種基于寄存器的標(biāo)號通常用MAP和FIELD偽操作定義,也可以用EQU偽操作定義。
(3)絕對地址
絕對地址是一個32位的數(shù)字量,使用它可以直接尋址整個內(nèi)存空間。
5.局部標(biāo)號
局部標(biāo)號是一個0~99之間的十進(jìn)制數(shù)字,可重復(fù)定義。局部標(biāo)號后面可以緊接一個通常表示該局部變量作用范圍的符號。局部變量的作用范圍為當(dāng)前段,也可以用偽操作ROUT來定義局部標(biāo)號的作用范圍。
局部標(biāo)號在子程序或程序循環(huán)中常被用到,也可以配合宏定義偽操作(MACRO和MEND)來使程序結(jié)構(gòu)更加合理。
在同一個段中,可以使用相同的數(shù)字命名不同的局部變量。默認(rèn)情況下,匯編器會尋址最近的變量。也可以通過匯編器命令選項(xiàng)來改變搜索順序。
局部變量命名語法如下。
n{routname}
局部變量引用的語法格式如下。
%{F|B}{A|T}n{routname}
其中,routname為變量作用范圍名稱;%表示引用操作;F指示匯編器只向前搜索;B指示匯編器只向后搜索;A指示匯編器搜索所有宏的嵌套。T指示匯編器只搜索宏的當(dāng)前層。
如果在引用過程中,沒有指定F和B,則匯編器先向后搜索,再向前搜索。
如果A和T沒有指定,匯編器搜索所有從當(dāng)前層次到宏最高層次,比當(dāng)前層次低的層次不再搜索。
如果指定了routname,匯編器向前搜索最近的ROUT操作,若routname與該ROUT偽操作定義的名稱不匹配,匯編器報(bào)告錯誤并結(jié)束匯編。
10.3.3 匯編語言程序中的表達(dá)式和運(yùn)算符
在匯編語言程序設(shè)計(jì)中經(jīng)常使用各種表達(dá)式,表達(dá)式一般由變量、常量、運(yùn)算符和括號構(gòu)成。常用的表達(dá)式有數(shù)字表達(dá)式、邏輯表達(dá)式和字符串表達(dá)式。
下面分別介紹表達(dá)式中各元素。
1.字符串表達(dá)式
字符串表達(dá)式一般由字符串常量、字符串變量、運(yùn)算符和括號構(gòu)成。字符串由包含在雙引號內(nèi)的一系列字符組成。編譯器所支持的字符串最大長度為512字節(jié)。
當(dāng)在字符串中包含“$”或引號時,可以用“$$”表示“$”,用兩個雙引號表示一個雙引號。
例如:
abc SETS “one ”“ double quote”
def SETS “one $$ dollar symbol”
上面的例子分別將字符串a(chǎn)bc和def賦值為“one “ double quote”和“one $ dollar symbol”。
字符串可以通過SETA、SETL、SETS偽操作對其賦值。
常用的與字符串表達(dá)式相關(guān)的運(yùn)算符如下。
· LEN:計(jì)算字符串長度運(yùn)算符。
· CHR:ASCII碼轉(zhuǎn)換運(yùn)算符。
· STR:字符串轉(zhuǎn)換運(yùn)算符。
· LEFT:字符串取左運(yùn)算符。
· RIGHT:字符串取右運(yùn)算符。
· CC:字符串連接運(yùn)算符。
詳見后面操作符一節(jié)。
下面的例子說明了如何使用字符串操作符給字符串變量賦值。
improb SETS ”literal“:CC:(strvar2:LEFT:4)
這個例子將字符串賦值為“l(fā)iteralatrv”。
2.整數(shù)表達(dá)式
整數(shù)表達(dá)式一般由數(shù)字常量、數(shù)字變量、數(shù)字運(yùn)算符和括號構(gòu)成。
整數(shù)表示式可以包含寄存器相關(guān)(register-relative)或程序相關(guān)(program-relative)表達(dá)式,這些表達(dá)式在編譯時被匯編器翻譯為地址無關(guān)數(shù)字常量。
整數(shù)表達(dá)式一般被計(jì)算為32位的整數(shù),當(dāng)此整數(shù)被定義為無符號數(shù)時,其取值范圍為0~232-1,當(dāng)被定義為有符號數(shù)時,其取值范圍為-231~231-1。匯編器認(rèn)為-n和232-n是相等的。對于關(guān)系操作,如比較兩個數(shù)的大小,匯編器將其操作數(shù)看作無符號的數(shù),也就是說“0》-1”對匯編器來說取值為“假({FLASE})”。
下面的例子說明了在程序中,如何對整數(shù)表達(dá)式進(jìn)行操作。
a SETA 256*256 ;將數(shù)字變量賦值為 256*256
MOV r1,#(a*22) ;將數(shù)字表達(dá)式(a*22) 的值放入r1
匯編語言中,整數(shù)數(shù)字量有以下幾種形式。
· 十進(jìn)制數(shù)(decimal-digis)
· “0x”+ 十六進(jìn)制數(shù)(0xhexadecimal-digits)
· “&”+ 十六進(jìn)制數(shù)(&hexadecimal-digits)
· n進(jìn)制數(shù)(n_base-n-digits)
· 字符(character)
其中,十進(jìn)制數(shù)(decimal-digis)可以是“0”到“9”數(shù)字的任意組合;十六進(jìn)制數(shù)(hexadecimal-digits)可以是“0”到“9”數(shù)字和字母“A”到“F”的任意組合;“n_”可以取2到9,“base-n-digits”是在n進(jìn)制下合法的任意數(shù)值;字符(character)可以是除單引號以外的所有字符。
下面的例子說明了整數(shù)表達(dá)式的基本用法。
a SETA 34906
addr DCD 0xA10E
LDR r4,=&1000000F
DCD 2_11001010
c3 SETA 8_74007
DCQ 0x0123456789abcdef
LDR r1,=‘A’ ;ARM偽指令將整數(shù)65(A的ASCII碼)存入寄存器
ADD r3,r2,#‘\’‘ ;將整數(shù)39(字符“/”的ASCII碼)加到r2,結(jié)果存入r3
3.浮點(diǎn)數(shù)字量表達(dá)式
浮點(diǎn)數(shù)字量有以下幾種形式。
· {-}digitsE{-}digits。
· {-}{digits}.digits{E{-}digits}。
· 0xhexdigits。
· &hexdigits。
其中,digits為十進(jìn)制數(shù),要在其后加上字母E(大寫或小寫)來表示其指數(shù);hexdigits為十六進(jìn)制數(shù)。
單精度浮點(diǎn)數(shù)的表示范圍為1.17549435e?38~3.40282347e+38;雙精度浮點(diǎn)數(shù)的表示范圍為2.22507385850720138e-308~1.79769313486231571e+308。
下面的例子說明了浮點(diǎn)數(shù)據(jù)量的基本用法。
DCFD 1E308,-4E-100
DCFS 1.0
DCFD 3.725e15
LDFS 0x7FC00000 ;
LDFD &FFF0000000000000 ;
4.邏輯表達(dá)式
邏輯表達(dá)式一般由邏輯量、邏輯運(yùn)算符和括號構(gòu)成,其表達(dá)式的運(yùn)算結(jié)果為真或假。與邏輯表達(dá)式相關(guān)的運(yùn)算符有“=”、“》”、“《”、“》=”、“《= ”、“/=”、“ 《》” 運(yùn)算符和“LAND”、“LOR”、“LNOT”及“LEOR”運(yùn)算符。
5.程序或寄存器相關(guān)表達(dá)式
寄存器相關(guān)表達(dá)式的值等于指定寄存器的值加上或減去一個數(shù)字表達(dá)式。
程序相關(guān)表達(dá)式的值等于程序計(jì)數(shù)器PC的值加上或減去一個數(shù)字表達(dá)式的值。此種表達(dá)式通常由程序中的標(biāo)號與一個數(shù)字表達(dá)式組成。
下面的例子說明了程序或寄存器相關(guān)表達(dá)式的基本使用方法。
LDR r4,=data+4*n ;n 是匯編時取值變量
; code
MOV pc,lr
data DCD value0
; n-1 個DCD 偽操作
DCD valuen ;data+4*n 指向此
;更多DCD偽操作
6.匯編中的操作符
?。?)操作符的優(yōu)先級
在匯編語言程序設(shè)計(jì)中,表達(dá)式包含一個擴(kuò)展的操作符集,這些操作符和高級語言中的運(yùn)算符十分接近。其運(yùn)算次序遵循如下的優(yōu)先級。
?、?優(yōu)先級相同的雙目運(yùn)算符的運(yùn)算順序?yàn)閺淖蟮接摇?br /> ?、?相鄰的單目運(yùn)算符的運(yùn)算順序?yàn)閺挠业阶?,單目運(yùn)算符的優(yōu)先級高于其他運(yùn)算符。
?、?括號運(yùn)算符的優(yōu)先級最高。
匯編語法的操作符優(yōu)先級和C語言中的不完全相同。例如在匯編中,下面的匯編語言
?。?+2∶SHR∶3)相當(dāng)于(1+(2∶SHR∶3)),而在C語言中,運(yùn)算則變?yōu)椋ǎ?+2)》》3)=0。類似于這樣的操作,在使用時要特別注意。
注意為了保證表達(dá)式運(yùn)算結(jié)果的正確,建議使用“()”來避免異義。
ARM(Thumb)匯編語法語句格式如下所示。
{symbol}{instruction|directive|pseudo-instruction}{;comment}
?、?symbol
程序符號。通常為地址標(biāo)號(label)。在指令和偽指令中通常為標(biāo)號;在一些偽操作中符號可能是變量或常數(shù)。詳見ARM偽操作一節(jié)。
在書寫中,符號必須從一行的行頭開始,前面不能包含空格或制表符tab。
?、?instruction
ARM或Thumb指令。
?、?directive
偽操作。詳見ARM偽操作一節(jié)。
④ pseudo-instruction
ARM偽指令。詳見ARM偽指令一節(jié)。
?、?comment
語句注釋。注釋以分號(;)開頭,注釋的結(jié)尾即為一行的結(jié)尾。為了程序清晰易讀,注釋也可以單獨(dú)占用一行。匯編器在對程序進(jìn)行匯編時忽略注釋。
在匯編語言程序設(shè)計(jì)中,每一條指令的助記符可以全部用大寫或全部用小寫,但不允許在一條指令中大、小寫混用。
同時,如果一條語句太長,可將該長語句分為若干行來書寫,在行的末尾用“\”表示下一行與本行為同一條語句。
10.3.2 ARM匯編語言中的符號
在匯編語言程序設(shè)計(jì)中,經(jīng)常使用各種符號代替地址(addresses)、變量(variables)和常量(constants)等,以增加程序的靈活性和可讀性。盡管符號的命名由編程者決定,但并不是任意的,必須遵循以下的約定。
?。?)符號區(qū)分大小寫,同名的大、小寫符號會被編譯器認(rèn)為是兩個不同的符號。
?。?)符號在其作用范圍內(nèi)必須惟一。
?。?)自定義的符號名不能與系統(tǒng)的保留字相同。其中保留字包括系統(tǒng)內(nèi)部變量
?。╞uilt in variable)和系統(tǒng)預(yù)定義(predefined symbol)的符號。
?。?)符號名不應(yīng)與指令或偽指令同名。如果要使用和指令或偽指令同名的符號要用雙斜杠“||”將其括起來,如“||ASSERT||”。
注意雖然符號被雙斜杠括起來,但雙斜杠并非符號名的一部分。
(5)局部標(biāo)號以數(shù)字開頭,其他的符號都不能以數(shù)字開頭。
1.變量(variable)
程序中的變量是指其值在程序的運(yùn)行過程中可以改變的量。ARM(Thumb)匯編程序所支持的變量有三種。
· 數(shù)字變量(numeric)。
· 邏輯變量(logical)。
· 字符串變量(string)。
數(shù)字變量用于在程序的運(yùn)行中保存數(shù)字值,但注意數(shù)字值的大小不應(yīng)超出數(shù)字變量所能表示的范圍。
邏輯變量用于在程序的運(yùn)行中保存邏輯值,邏輯值只有兩種取值情況:真({TURE})和假({FALSE})。
字符串變量用于在程序的運(yùn)行中保存一個字符串,注意字符串的長度不應(yīng)超出字符串變量所能表示的范圍。
在ARM(Thumb)匯編語言程序設(shè)計(jì)中,可使用GBLA、GBLL、GBLS偽指令聲明全局變量,使用LCLA、LCLL、LCLS偽指令聲明局部變量,可使用SETA、SETL和SETS對其進(jìn)行初始化。
2.常量(constants)
程序中的常量是指其值在程序的運(yùn)行過程中不能被改變的量。ARM(Thumb)匯編程序所支持的常量有數(shù)字常量、邏輯常量和字符串常量。
數(shù)字常量一般為32位的整數(shù),當(dāng)作為無符號數(shù)時,其取值范圍為0~232?1,當(dāng)作為有符號數(shù)時,其取值范圍為?231~231?1。匯編器認(rèn)為?n和232?n是相等的。對于關(guān)系操作,如比較兩個數(shù)的大小,匯編器將其操作數(shù)看作無符號的數(shù),也就是說“0》?1”,對匯編器來說取值為“假({FLASE})”。
邏輯常量只有兩種取值情況,真或假。
字符串常量為一個固定的字符串,一般用于程序運(yùn)行時的信息提示。
3.程序中的變量代換
匯編語言中的變量可以作為作為一整行出現(xiàn)在匯編程序中,也可以作為行的一部分使用。
如果在數(shù)字變量前面有一個代換操作符“$”,編譯器會將該數(shù)字變量的值轉(zhuǎn)換為十六進(jìn)制的字符串,并將該十六進(jìn)制的字符串代換“$”后的數(shù)字變量。
如果在邏輯變量前面有一個代換操作符“$”,編譯器會將該邏輯變量代換為它的取值(真或假)。
如果在字符串變量前面有一個代換操作符“$”,編譯器會將該字符串變量的值代換“$”后的字符串變量。
如果程序中需要字符“$”,則可以用“$$”來表示。匯編器將不進(jìn)行變量替換,而是將“$$”作為“$”。
下面的兩個例子說明了變量替換的過程。
; 直接的變量替換
GBLS add4ff
;
add4ff SETS “ADD r4,r4,#0xFF” ;給變量add4ff賦值
$add4ff.00 ;引用變量
; codes
ADD r4,r4,#0xFF00
; 有特殊符號的變量替換
GBLS s1
GBLS s2
GBLS fixup
GBLA count
;
count SETA 14
s1 SETS “a$$b$count” ;s1 =a$b0000000E
s2 SETS “abc”
fixup SETS “|xy$s2.z|” ;fixup= |xyabcz|
|C$$code| MOV r4,#16 ;label= C$$code
4.程序標(biāo)號(label)
在ARM匯編中,標(biāo)號代表一個地址,段內(nèi)標(biāo)號的地址在匯編時確定,而段外標(biāo)號地址值在鏈接時確定。根據(jù)標(biāo)號的生成方式,程序標(biāo)號分為以下三種。
· 程序相關(guān)標(biāo)號(Program-relative labels)。
· 寄存器相關(guān)標(biāo)號(Register-relative labels)。
· 絕對地址(Absolute address)。
?。?)程序相關(guān)標(biāo)號
程序相關(guān)標(biāo)號指位于目標(biāo)指令前的標(biāo)號或程序中的數(shù)據(jù)定義偽操作前的標(biāo)號。這種標(biāo)號在匯編時將被處理成PC值加上或減去一個數(shù)字常量。它常用于表示跳轉(zhuǎn)指令的目標(biāo)地址或代碼段中所嵌入的少量數(shù)據(jù)。
?。?)寄存器相關(guān)地址
這種標(biāo)號在匯編時將被處理成寄存器的值加上或減去一個數(shù)字常量。它常被用于訪問數(shù)據(jù)段中的數(shù)據(jù)。這種基于寄存器的標(biāo)號通常用MAP和FIELD偽操作定義,也可以用EQU偽操作定義。
(3)絕對地址
絕對地址是一個32位的數(shù)字量,使用它可以直接尋址整個內(nèi)存空間。
5.局部標(biāo)號
局部標(biāo)號是一個0~99之間的十進(jìn)制數(shù)字,可重復(fù)定義。局部標(biāo)號后面可以緊接一個通常表示該局部變量作用范圍的符號。局部變量的作用范圍為當(dāng)前段,也可以用偽操作ROUT來定義局部標(biāo)號的作用范圍。
局部標(biāo)號在子程序或程序循環(huán)中常被用到,也可以配合宏定義偽操作(MACRO和MEND)來使程序結(jié)構(gòu)更加合理。
在同一個段中,可以使用相同的數(shù)字命名不同的局部變量。默認(rèn)情況下,匯編器會尋址最近的變量。也可以通過匯編器命令選項(xiàng)來改變搜索順序。
局部變量命名語法如下。
n{routname}
局部變量引用的語法格式如下。
%{F|B}{A|T}n{routname}
其中,routname為變量作用范圍名稱;%表示引用操作;F指示匯編器只向前搜索;B指示匯編器只向后搜索;A指示匯編器搜索所有宏的嵌套。T指示匯編器只搜索宏的當(dāng)前層。
如果在引用過程中,沒有指定F和B,則匯編器先向后搜索,再向前搜索。
如果A和T沒有指定,匯編器搜索所有從當(dāng)前層次到宏最高層次,比當(dāng)前層次低的層次不再搜索。
如果指定了routname,匯編器向前搜索最近的ROUT操作,若routname與該ROUT偽操作定義的名稱不匹配,匯編器報(bào)告錯誤并結(jié)束匯編。
10.3.3 匯編語言程序中的表達(dá)式和運(yùn)算符
在匯編語言程序設(shè)計(jì)中經(jīng)常使用各種表達(dá)式,表達(dá)式一般由變量、常量、運(yùn)算符和括號構(gòu)成。常用的表達(dá)式有數(shù)字表達(dá)式、邏輯表達(dá)式和字符串表達(dá)式。
下面分別介紹表達(dá)式中各元素。
1.字符串表達(dá)式
字符串表達(dá)式一般由字符串常量、字符串變量、運(yùn)算符和括號構(gòu)成。字符串由包含在雙引號內(nèi)的一系列字符組成。編譯器所支持的字符串最大長度為512字節(jié)。
當(dāng)在字符串中包含“$”或引號時,可以用“$$”表示“$”,用兩個雙引號表示一個雙引號。
例如:
abc SETS “one ”“ double quote”
def SETS “one $$ dollar symbol”
上面的例子分別將字符串a(chǎn)bc和def賦值為“one “ double quote”和“one $ dollar symbol”。
字符串可以通過SETA、SETL、SETS偽操作對其賦值。
常用的與字符串表達(dá)式相關(guān)的運(yùn)算符如下。
· LEN:計(jì)算字符串長度運(yùn)算符。
· CHR:ASCII碼轉(zhuǎn)換運(yùn)算符。
· STR:字符串轉(zhuǎn)換運(yùn)算符。
· LEFT:字符串取左運(yùn)算符。
· RIGHT:字符串取右運(yùn)算符。
· CC:字符串連接運(yùn)算符。
詳見后面操作符一節(jié)。
下面的例子說明了如何使用字符串操作符給字符串變量賦值。
improb SETS ”literal“:CC:(strvar2:LEFT:4)
這個例子將字符串賦值為“l(fā)iteralatrv”。
2.整數(shù)表達(dá)式
整數(shù)表達(dá)式一般由數(shù)字常量、數(shù)字變量、數(shù)字運(yùn)算符和括號構(gòu)成。
整數(shù)表示式可以包含寄存器相關(guān)(register-relative)或程序相關(guān)(program-relative)表達(dá)式,這些表達(dá)式在編譯時被匯編器翻譯為地址無關(guān)數(shù)字常量。
整數(shù)表達(dá)式一般被計(jì)算為32位的整數(shù),當(dāng)此整數(shù)被定義為無符號數(shù)時,其取值范圍為0~232-1,當(dāng)被定義為有符號數(shù)時,其取值范圍為-231~231-1。匯編器認(rèn)為-n和232-n是相等的。對于關(guān)系操作,如比較兩個數(shù)的大小,匯編器將其操作數(shù)看作無符號的數(shù),也就是說“0》-1”對匯編器來說取值為“假({FLASE})”。
下面的例子說明了在程序中,如何對整數(shù)表達(dá)式進(jìn)行操作。
a SETA 256*256 ;將數(shù)字變量賦值為 256*256
MOV r1,#(a*22) ;將數(shù)字表達(dá)式(a*22) 的值放入r1
匯編語言中,整數(shù)數(shù)字量有以下幾種形式。
· 十進(jìn)制數(shù)(decimal-digis)
· “0x”+ 十六進(jìn)制數(shù)(0xhexadecimal-digits)
· “&”+ 十六進(jìn)制數(shù)(&hexadecimal-digits)
· n進(jìn)制數(shù)(n_base-n-digits)
· 字符(character)
其中,十進(jìn)制數(shù)(decimal-digis)可以是“0”到“9”數(shù)字的任意組合;十六進(jìn)制數(shù)(hexadecimal-digits)可以是“0”到“9”數(shù)字和字母“A”到“F”的任意組合;“n_”可以取2到9,“base-n-digits”是在n進(jìn)制下合法的任意數(shù)值;字符(character)可以是除單引號以外的所有字符。
下面的例子說明了整數(shù)表達(dá)式的基本用法。
a SETA 34906
addr DCD 0xA10E
LDR r4,=&1000000F
DCD 2_11001010
c3 SETA 8_74007
DCQ 0x0123456789abcdef
LDR r1,=‘A’ ;ARM偽指令將整數(shù)65(A的ASCII碼)存入寄存器
ADD r3,r2,#‘\’‘ ;將整數(shù)39(字符“/”的ASCII碼)加到r2,結(jié)果存入r3
3.浮點(diǎn)數(shù)字量表達(dá)式
浮點(diǎn)數(shù)字量有以下幾種形式。
· {-}digitsE{-}digits。
· {-}{digits}.digits{E{-}digits}。
· 0xhexdigits。
· &hexdigits。
其中,digits為十進(jìn)制數(shù),要在其后加上字母E(大寫或小寫)來表示其指數(shù);hexdigits為十六進(jìn)制數(shù)。
單精度浮點(diǎn)數(shù)的表示范圍為1.17549435e?38~3.40282347e+38;雙精度浮點(diǎn)數(shù)的表示范圍為2.22507385850720138e-308~1.79769313486231571e+308。
下面的例子說明了浮點(diǎn)數(shù)據(jù)量的基本用法。
DCFD 1E308,-4E-100
DCFS 1.0
DCFD 3.725e15
LDFS 0x7FC00000 ;
LDFD &FFF0000000000000 ;
4.邏輯表達(dá)式
邏輯表達(dá)式一般由邏輯量、邏輯運(yùn)算符和括號構(gòu)成,其表達(dá)式的運(yùn)算結(jié)果為真或假。與邏輯表達(dá)式相關(guān)的運(yùn)算符有“=”、“》”、“《”、“》=”、“《= ”、“/=”、“ 《》” 運(yùn)算符和“LAND”、“LOR”、“LNOT”及“LEOR”運(yùn)算符。
5.程序或寄存器相關(guān)表達(dá)式
寄存器相關(guān)表達(dá)式的值等于指定寄存器的值加上或減去一個數(shù)字表達(dá)式。
程序相關(guān)表達(dá)式的值等于程序計(jì)數(shù)器PC的值加上或減去一個數(shù)字表達(dá)式的值。此種表達(dá)式通常由程序中的標(biāo)號與一個數(shù)字表達(dá)式組成。
下面的例子說明了程序或寄存器相關(guān)表達(dá)式的基本使用方法。
LDR r4,=data+4*n ;n 是匯編時取值變量
; code
MOV pc,lr
data DCD value0
; n-1 個DCD 偽操作
DCD valuen ;data+4*n 指向此
;更多DCD偽操作
6.匯編中的操作符
?。?)操作符的優(yōu)先級
在匯編語言程序設(shè)計(jì)中,表達(dá)式包含一個擴(kuò)展的操作符集,這些操作符和高級語言中的運(yùn)算符十分接近。其運(yùn)算次序遵循如下的優(yōu)先級。
?、?優(yōu)先級相同的雙目運(yùn)算符的運(yùn)算順序?yàn)閺淖蟮接摇?br /> ?、?相鄰的單目運(yùn)算符的運(yùn)算順序?yàn)閺挠业阶?,單目運(yùn)算符的優(yōu)先級高于其他運(yùn)算符。
?、?括號運(yùn)算符的優(yōu)先級最高。
匯編語法的操作符優(yōu)先級和C語言中的不完全相同。例如在匯編中,下面的匯編語言
?。?+2∶SHR∶3)相當(dāng)于(1+(2∶SHR∶3)),而在C語言中,運(yùn)算則變?yōu)椋ǎ?+2)》》3)=0。類似于這樣的操作,在使用時要特別注意。
注意為了保證表達(dá)式運(yùn)算結(jié)果的正確,建議使用“()”來避免異義。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- ARM匯編語言的源程序免費(fèi)下載 16次下載
- 微機(jī)的匯編語言及匯編程序設(shè)計(jì)學(xué)習(xí)課件免費(fèi)下載 6次下載
- 匯編程序設(shè)計(jì)的教程課件免費(fèi)下載 17次下載
- 嵌入式系統(tǒng)原理及應(yīng)用教程之ARM匯編語言程序設(shè)計(jì)的詳細(xì)資料說明 11次下載
- 單片機(jī)匯編語言程序設(shè)計(jì)的詳細(xì)資料精講 28次下載
- AVR單片機(jī)匯編語言程序設(shè)計(jì)的詳細(xì)資料和實(shí)例說明 27次下載
- 微機(jī)原理--匯編語言程序設(shè)計(jì) 0次下載
- 匯編語言程序設(shè)計(jì) 0次下載
- 匯編語言程序設(shè)計(jì) 0次下載
- 匯編語言程序設(shè)計(jì)自學(xué)教程 40次下載
- 匯編語言學(xué)習(xí)課件_Windows匯編程序設(shè)計(jì)基礎(chǔ) 0次下載
- 匯編語言學(xué)習(xí)課件_匯編語言高級編程技巧 0次下載
- 匯編語言程序設(shè)計(jì)下載 0次下載
- 匯編語言程序設(shè)計(jì)pdf 0次下載
- 匯編程序設(shè)計(jì)
- 匯編語言結(jié)構(gòu)與8086概述 2523次閱讀
- 匯編語言的變量與編碼是什么 1453次閱讀
- 51單片機(jī)的匯編程序庫 9414次閱讀
- DS18B20和51單片機(jī)連接的匯編程序免費(fèi)下載 4463次閱讀
- PIC的指令系統(tǒng)和匯編語言指令格式說明 3386次閱讀
- 單片機(jī) | 基礎(chǔ)匯編語言編程實(shí)例 9876次閱讀
- 基于51匯編語言的外部中斷 3206次閱讀
- C語言程序內(nèi)存布局該關(guān)注哪些內(nèi)容 878次閱讀
- 高級語言和匯編語言_機(jī)器語言的區(qū)別 3w次閱讀
- 學(xué)習(xí)開發(fā)環(huán)境和編程語言:匯編語言和C語言的比較 8893次閱讀
- C語言與匯編語言相互結(jié)合的嵌套匯編語言 3419次閱讀
- 跑馬燈實(shí)驗(yàn)用匯編語言和C51語言做出的不同效果 3714次閱讀
- 單片機(jī)編程之匯編語言基礎(chǔ)-PIC單片機(jī)匯編指令 2977次閱讀
- 單片機(jī)編程之匯編語言基礎(chǔ)-常用指令和程序模式 1.5w次閱讀
- 匯編語言的結(jié)構(gòu)化設(shè)計(jì)及其在俄羅斯方塊中的應(yīng)用 2934次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費(fèi)下載
- 0.00 MB | 1490次下載 | 免費(fèi)
- 2單片機(jī)典型實(shí)例介紹
- 18.19 MB | 92次下載 | 1 積分
- 3S7-200PLC編程實(shí)例詳細(xì)資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識別和講解說明
- 4.28 MB | 18次下載 | 4 積分
- 5開關(guān)電源原理及各功能電路詳解
- 0.38 MB | 10次下載 | 免費(fèi)
- 6基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)
- 0.11 MB | 4次下載 | 免費(fèi)
- 7藍(lán)牙設(shè)備在嵌入式領(lǐng)域的廣泛應(yīng)用
- 0.63 MB | 3次下載 | 免費(fèi)
- 89天練會電子電路識圖
- 5.91 MB | 3次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費(fèi)
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費(fèi)
- 4LabView 8.0 專業(yè)版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費(fèi)
- 5555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33562次下載 | 免費(fèi)
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費(fèi)
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費(fèi)
- 8開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21539次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537791次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233045次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191183次下載 | 免費(fèi)
- 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183277次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138039次下載 | 免費(fèi)
評論
查看更多