ARM匯編器所支持的偽指令
在ARM的匯編程序中,有如下幾種偽指令:符號(hào)定義偽指令、數(shù)據(jù)定義偽指令、匯編控制偽指令、宏指令及其他偽指令。
1.符號(hào)定義(Symbol Definition)偽指令
符號(hào)定義偽指令用于定義ARM匯編程序中的變量、對(duì)變量賦值以及定義寄存器的別名等操作。常見的符號(hào)定義偽指令有如下幾種。
·用于定義全局變量的GBLA、GBLL和GBLS。
·用于定義局部變量的LCLA、LOLL和LCLS。
·用于對(duì)變量賦值的SETA、SETL、SETS。
·為通用寄存器列表定義名稱的RLIST。
(1)GBLA、 GBLL不口GBLS
GBLIA(GBLL或dDr O) 全局變量名
GBLA、GBLL和GBLS偽指令用于定義一個(gè)ARM程序中的全局變量,并將其初始化。其中:
·GBLA偽指令用于定義一個(gè)全局的數(shù)字變量,并初始化為0;
·GBLL偽指令用于定義一個(gè)全局的邏輯變量,并初始化為F(假);
。GBLS偽指令用于定義一個(gè)全局的字符串變量,并初始化為空。
由于以上三條偽指令用于定義全局變量,因此在整個(gè)程序范圍內(nèi)變量名必須唯一。
(2)LCLA、 LCLL不口LCLS
LCLA(LCLL或LCLS) 局部變量名
LOLA、LCLL和LCLS偽指令用于定義一個(gè)ARM程序中的局部變量,并將其初始化。其中:
·LCLA偽指令用于定義一個(gè)局部的數(shù)字變量,并初始化為0;
·LCLL偽指令用于定義一個(gè)局部的邏輯變量,并初始化為F(假);
·LCLS偽指令用于定義一個(gè)局部的字符串變量,并初始化為空。
以上三條偽指令用于聲明局部變量,在其作用范圍內(nèi)變量名必須唯一。
(3) SETA、 SETL 2-fl] SETS
變量名 SETA(IDLIL或SETS) 表達(dá)式
其中,變量名為已經(jīng)定義過的全局變量或局部變量,表達(dá)式為將要賦給變量的值。
偽指令SETA、SETL、SETS用于給一個(gè)已經(jīng)定義的全局變量或局部變量賦值。
·SETA偽指令用于給一個(gè)數(shù)學(xué)變量賦值;
·SETL偽指令用于給一個(gè)邏輯變量賦值;
·SETS偽指令用于給一個(gè)字符串變量賦值。
?。?)RLIST
名稱 RLTST (寄存器列表)
RLIST偽指令可用于對(duì)一個(gè)通用寄存器列表定義名稱,使用該偽指令定義的名稱可在ARM指令LDM/STM中使用。在LDM/STM指令中,列表中的寄存器訪問次序根據(jù)寄存器的編號(hào)由低到高,而與列表中的寄存器排列次序無關(guān)。
2. 數(shù)據(jù)定義 (Data Definition) 偽指令
數(shù)據(jù)定義偽指令一般用于為特定的數(shù)據(jù)分配存儲(chǔ)單元,同時(shí)可完成已分配存儲(chǔ)單元的初始化。常見的數(shù)據(jù)定義偽指令有如下幾種。
?。?)DCB
標(biāo)號(hào) DCB 表達(dá)式
DCB偽指令用于分配一片連續(xù)的字節(jié)存儲(chǔ)單元,并用偽指令中指定的表達(dá)式初始化。其中,表達(dá)式可以為0~255的數(shù)字或字符串。DCB也可用“=”代替。
?。?)DCW(或DCWU)
標(biāo)號(hào) DCW(或DCWU) 表達(dá)式
DCW(或DCWU)偽指令用于分配一片連續(xù)的半字存儲(chǔ)單元,并用偽指令中指定的表達(dá)式初始化。其中,表達(dá)式可以為程序標(biāo)號(hào)或數(shù)字表達(dá)式。
用DOW分配的字存儲(chǔ)單元是半字對(duì)齊的,而用DCWU分配的字存儲(chǔ)單元并不嚴(yán)格要求半字對(duì)齊。
評(píng)論