ARM源程序文件(即源文件)有特定的文件格式和語法規則,可以使用任意文本編輯器編寫程序代碼。一般地,ARM源程序文件名的後綴如表10.1所示。
表10.1 ARM源程序文件名後綴
程序
文件名
彙編
*.S
引入文件
*.INC
C程序
*.C
頭文件
*.H
在一個項目中,至少要有一個彙編源文件,可以有多個彙編源文件或多個C程序,或者C程序文件和彙編文件兩者的組合。
ARM彙編語言語句格式如下所示。
{label}{instruction/directive/pseudo-instruction}{;comment}
注意
所有指令均不能頂格寫,要用空格(space)或TAB開頭。
其中instruction即ARM指令集中的彙編指令。Directive為ARM彙編器所支持的偽操作。pseudo-instruction為ARM彙編器所支持的偽操作。下面章節分別介紹偽操作和偽指令。
10.1ARM彙編器所支持的偽操作在ARM彙編語言程序裡,有一些特殊指令助記符,這些助記符與指令系統的助記符不同,沒有相對應的操作碼,通常稱這些特殊指令助記符為偽操作標識符(directive),它們所完成的操作稱為偽操作。偽操作在源程序中的作用是為完成彙編程序作各種準備工作的,這些偽操作僅在彙編過程中起作用,一旦彙編結束,偽操作的使命就完成。
在ARM的彙編程序中,偽操作主要有符號定義偽操作、數據定義偽操作、彙編控制偽操作、宏指令等。
10.1.1符號定義(SymbolDefinition)偽操作符號定義偽操作用於定義ARM彙編程序中的變量、對變量賦值以及定義寄存器的別名等操作。常見的符號定義偽操作有如下幾種。
·用於定義全局變量的GBLA、GBLL和GBLS。
·用於定義局部變量的LCLA、LCLL和LCLS。
·用於對變量賦值的SETA、SETL、SETS。
·為通用寄存器列表定義名稱的RLIST。
·為協處理器寄存器定義別名的CN。
·為協處理器定義別名的CP。
·為VFP寄存器定義名稱的DN和SN。
·為FPA浮點指針寄存器定義名稱的FPA。
1.全局變量定義偽操作GBLA、GBLL和GBLS(1)語法格式
GBLA、GBLL和GBLS偽操作用於定義一個ARM程序中的全局變量並將其初始化。其中:
GBLA偽操作用於定義一個全局的數字變量並初始化為0。
GBLL偽操作用於定義一個全局的邏輯變量並初始化為F(假)。
GBLS偽操作用於定義一個全局的字符串變量並初始化為空。
由於以上3條偽指令用於定義全局變量,因此在整個程序範圍內變量名必須惟一。
語法格式如下。
gblx>variable>
①gblx>
取值為GBLA、GBLL、GBLS之一。
②variable>
定義的全局變量名,在其作用範圍內必須惟一。全局變量的作用範圍為包含該變量的源程序。
(2)使用說明
如果用這些偽操作重新聲明已經聲明過的變量,變量的值將被初始化成後一次聲明語句中的值。
(3)示例
①使用偽操作聲明全局變量。
GBLATest1 ;定義一個全局的數字變量,變量名為Test1
Test1SETA0xaa ;將該變量賦值為0xaa
GBLLTest2 ;定義一個全局的邏輯變量,變量名為Test2
Test2SETL{TRUE} ;將該變量賦值為真
GBLSTest3 ;定義一個全局的字符串變量,變量名為Test3
Test3SETSTesting ;將該變量賦值為「Testing」
②聲明變量objectsize並設置其值為0xff,為「SPACE」操作做準備。
GBLAobjectsize
ObjectsizeSETAoxff
SPACEobjectsize
③下面的例子顯示如何使用彙編命令設置變量的值。具體做法是使用「-pd」選項。
Armasm-pdobjectsizeSETAoxff-oobjectfilesourcefile