新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM匯編程序設(shè)計(jì)之:ARM匯編器所支持的偽操作

ARM匯編程序設(shè)計(jì)之:ARM匯編器所支持的偽操作

作者: 時(shí)間:2013-09-30 來(lái)源:網(wǎng)絡(luò) 收藏

本文引用地址:http://butianyuan.cn/article/257006.htm

2.局部變量定義LCLA、LCLL和LCLS

(1)語(yǔ)法格式

LCLA、LCLL和LCLS偽指令用于定義一個(gè)程序中的局部變量并將其初始化。其中:

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)可在指令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ō)明

在使用匯編編譯器編譯源文件時(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)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉