标号Label
在ARM汇编指令中,可以使用符号表示一个地址、变量或常量。
当符号用来表示一条指令的标号时,符号的内容即为存放该条指令编码的地址。
当用来表示变量或常量时,符号即为该变量或常量的名称。
符号的命名规则如下:
• 标号可由a~z、A~Z、0~9、“.” 、“_”等字符组成,符号区分大小写。
• 局部地址标号允许以数字开头,其它用途符号不能以数字开头。
• 符号在其作用域范围内不允许重名。
• 符号不要与指令助记符、伪指令或编译系统保留字同名。
局部标号是一个0~99之间的十进制数字,后面可以接一个符号来表示该局部变量作用范围。局部变量作用范围为当前段,也可以使用伪指令 “ROUT”来指定局部标号的作用范围。局部标号可以通过跳转或调用等指令来引用,引用时可以附加参数(f、b、a、t)来指明标号的搜索方向。
例子:
(注:行号不是语句的内容)
109 ldr r0, =0x00ffffff /*r0=0x00ffffff */
110 bic r1, pc, r0 /* r1= pc & !(# 0x00ffffff), 屏蔽掉pc低24位地址*/
111 ldr r2, _TEXT_BASE /* r2=0x23E00000 因为_TEXT_BASE定义为0x23E00000 */
112 bic r2, r2, r0 /* r2=0x23000000*/
113 cmp r1, r2 /*比较r1(运行地址), r2(编译链接地址) */
114 beq 1f /*若r1 = r2条件成立,跳转到标号为1 的指令处执行 */
117 bl system_clock_init /*调用system_clock_init函数 /*
122 1: /*定义局部标号/*
124 bl uart_asm_init /*调用uart_asm_init函数*/114行是一条跳转指令,执行后将跳转到标号为“1”的指令处执行。
122行定义一个局部标号“1”,表示124行指令代码的存放地址,为114行跳转指令提供跳转位置。