课程列表

基本问题

开源资源

好好学习天天向上

联大大纲—通信电子 ;教师介绍; 单片机课程学习经验- 学习路线图; 1.概述 -应用 -定义 -特点 -构成; 2.嵌入式处理器 —DIY CPU处理器ARM处理器Cortex-A8S5PV210讨论; 3.汇编语言 -作业 4.Bootloader -作业 5.Linux内核移植 6.嵌入式Linux程序设计 7.图形用户接口QT 8.其他框架介绍; 9.嵌入式物联网应用系统设计

标号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, 屏蔽掉pc24位地址*/

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行跳转指令提供跳转位置。