ARM匯編程序設(shè)計(jì)之:ARM匯編器所支持的偽操作
2.局部變量定義偽操作LCLA、LCLL和LCLS
(1)語(yǔ)法格式
LCLA、LCLL和LCLS偽指令用于定義一個(gè)ARM程序中的局部變量并將其初始化。其中:
LCLA偽操作用于定義一個(gè)局部的數(shù)字變量并初始化為0。
LCLL偽操作用于定義一個(gè)局部的邏輯變量并初始化為F(假)。
LCLS偽操作用于定義一個(gè)局部的字符串變量并初始化為空。
以上三條偽操作用于聲明局部變量,在其作用范圍內(nèi)變量名必須惟一。
語(yǔ)法格式如下。
lclx>variable>
①gblx>
取值為L(zhǎng)CLA、LCLL、LCLS之一。
②variable>
所定義的局部變量名,在其作用范圍內(nèi)必須惟一。局部變量作用范圍為包含該局部變量的宏。
(2)使用說(shuō)明
如果用這些偽操作重新聲明已經(jīng)聲明過(guò)的變量,則變量的值將被初始化成后一次聲明語(yǔ)句中的值。
(3)示例
①使用偽操作聲明局部變量。
LCLATest4 ;聲明一個(gè)局部的數(shù)字變量,變量名為T(mén)est4
Test3SETA0xaa ;將該變量賦值為0xaa
LCLLTest5 ;聲明一個(gè)局部的邏輯變量,變量名為T(mén)est5
Test4SETL{TRUE} ;將該變量賦值為真
LCLSTest6 ;定義一個(gè)局部的字符串變量,變量名為T(mén)est6
Test6SETSTesting ;將該變量賦值為“Testing”
②下面的例子定義一個(gè)宏,顯示了局部變量的作用范圍。
MACRO ;聲明一個(gè)宏
$labelmessage$a ;宏原型
LCLSerr ;聲明局部字符串變量
$label
INFO0,err:CC::STR:$a
MEND ;宏結(jié)束,局部變量不再起作用
3.變量賦值偽操作SETA、SETL和SETS
(1)語(yǔ)法格式
偽指令SETA、SETL和SETS用于給一個(gè)已經(jīng)定義的全局變量或局部變量賦值。
SETA偽操作用于給一個(gè)數(shù)學(xué)變量賦值;
SETL偽操作用于給一個(gè)邏輯變量賦值;
SETS偽操作用于給一個(gè)字符串變量賦值;
語(yǔ)法格式如下。
Variablesetx>expr
①Variable
變量名為已經(jīng)定義過(guò)的全局變量或局部變量,表達(dá)式為將要賦給變量的值。
②setx>
取值為SETA、SETL、SETS之一。
③expr
數(shù)學(xué)、邏輯或字符串表達(dá)式,也就是將要賦予變量的值。
(2)使用說(shuō)明
在向變量賦值前必須先聲明變量。
也可以在匯編指令中預(yù)定義變量,如:
Armasm--pdobjectsizeSETAoxff--oobjectfilesourcefile
(3)示例
①為預(yù)先定義的變量賦值。
LCLATest3 ;聲明一個(gè)局部的數(shù)字變量,變量名為T(mén)est3
Test3SETA0xaa ;將該變量賦值為0xaa
LCLLTest4 ;聲明一個(gè)局部的邏輯變量,變量名為T(mén)est4
Test4SETL{TRUE} ;將該變量賦值為真
LCLSTest6 ;定義一個(gè)局部的字符串變量,變量名為T(mén)est6
Test6SETSTesting ;將該變量賦值為“Testing”
②使用變量賦值偽操作,定義一些程序相關(guān)內(nèi)容。
GBLAversionNumber
VersionNumber SETA21
GBLLDebug
Debug SETL{TRUE}
GBLS versionString
VersionString SETSversion1.0
4.通用寄存器列表定義偽操作RLIST
(1)語(yǔ)法格式
RLIST偽操作可用于對(duì)一個(gè)通用寄存器列表定義名稱(chēng),使用該偽操作定義的名稱(chēng)可在ARM指令LDM/STM中使用。在LDM/STM指令中,列表中的寄存器訪問(wèn)次序根據(jù)寄存器的編號(hào)由低到高,與列表中的寄存器排列次序無(wú)關(guān)。
語(yǔ)法格式如下。
NameRLIST{list-of-registers}
①Name
寄存器列表的名稱(chēng)。
注意 | 該名稱(chēng)不能和已經(jīng)定義寄存器或協(xié)處理器名稱(chēng)相同。 |
②list-of-registers
通用寄存器列表。列表中的寄存器用“,”隔開(kāi),如果是編號(hào)連續(xù)的通用寄存器可以用“-”指定寄存器范圍。具體用法參見(jiàn)程序示例。
(2)使用說(shuō)明
在使用ARM匯編編譯器編譯源文件時(shí),可以使用“-checkreg”選項(xiàng)來(lái)指定匯編器進(jìn)行寄存器檢查。如果匯編器檢測(cè)到寄存器列表中的寄存器編號(hào)非升序排列,將給出編譯警告。
(3)示例
①將寄存器列表名稱(chēng)定義為RegList,可在ARM指令LDM/STM中通過(guò)該名稱(chēng)訪問(wèn)寄存器列表。
RegListRLIST{R0-R5,R8,R10};
②使用“-”在寄存器列表中,指定寄存器范圍。
ContextRLIST{r0-r6,r8,r10-r12,r15} ;
評(píng)論