教材:嵌入式系统及应用,罗蕾、李允、陈丽蓉等,电子工业出版社
ARM 伪指令
段定义伪指令
格式:
AREA <sectionname> {<attr>}{,<attr>}…
sectionname:段名,若段名以数字开头,则必须用符号“|”扩起来,如
|1_test|
attr:属性字段,多个属性字段用逗号分隔
属性 含义 备注 CODE 代码段 默认读/写属性为READONLY DATA 数据段 默认读/写属性为READWRITE READONLY 本段只读 READWRITE 本段可读可写 ALIGN表达式 对齐字节数 ELF的代码段和数据段为字对齐 COMMON 多源文件共享段 AREA Init, CODE, READONLY
该伪指令定义了一个代码段,段名为Init,属性为只读
一个汇编语言程序至少要有一个段
符号定义伪指令
- 符号的命名由编程者决定,但有以下约定
- 符号区分大小写,同名的大、小写符号会被编译器认为是两个不同的符号
- 符号在其作用范围内必须唯一
- 自定义的符号不能与系统保留字相同
- 符号不应与指令或伪指令同名
全局变量伪指令(GBLA、GBLL、GBLS)
GBLA、GBLL 和 GBLS 伪指令用于定义一个ARM程序中的全局变量,并将其初始化
GBLA Test1 ;定义一个全局数字变量,变量名为Test1,默认初值为0 GBLL Test2 ;定义一个全局逻辑变量,变量名为Test2,默认初值为F GBLS Test3 ;定义一个全局字符串变量,变量名为Test3,默认初值为空
全局变量的变量名在整个程序范围内必须具有唯一性
局部变量伪指令(LCLA、LCLL、LCLS )
LCLA、LCLL 和 LCLS 伪指令用于定义一个ARM程序中的局部变量,并将其初始化
LCLA Test4 ;定义一个局部数字变量,变量名为Test4,默认初值为0 LCLL Test5 ;定义一个局部逻辑变量,变量名为Test5,默认初值为F LCLS Test6 ;定义一个局部字符串变量,变量名为Test6,默认初值为空
局部变量的变量名在变量作用范围内必须具有唯一性
默认情况下,局部变量只在定义该变量的程序段内有效
变量赋值伪指令(SETA、SETL、SETS)
SETA、SETL 和 SETS 伪指令用于给一个已经定义的全局变量或局部变量进行赋值
Test1 SETA 0xAA ;将Test1变量赋值为0xAA Test2 SETL {TRUE} ;将Test2变量赋值为真 Test3 SETS "Testing" ;将Test3变量赋值为“Testing” Test4 SETA 0xBB ;将Test4变量赋值为0xBB Test5 SETL {TRUE} ;将Test5变量赋值为真 Test6 SETS