标号的定义
就是地址的表示符号,标号的操作,就相当于对其所表示的地址的操作。
内部属性(编译时):段属性(属于哪个段),
偏移量属性(相对于本段首地址的偏移量,16位无符号整数,单位字节),
类型属性(标号和转移指令所处位置之间的距离
SHORT------段内,-128---127
NEAR--------段内,-32768~ 32767
FAR ---段外)
标号可以标示程序代码段的首地址(常用在指令前),
也可以用于标示数据段的首地址(常用在处处理数据的伪代码前)。
例如:程序代码段的标号
code_mark
mov r0,r2
。。。。
数据代码段的标号
data_mark1 DCW 12
map 0x100
data_mark2 field 256
标号的分类
1。 基于计数器PC偏移量的标号------通常是表示代码段的标号。
作用范围 :整个本源文件
对这些标号的操作的一些指令有
跳转指令 如 b code_mark
装载伪指令 adr r0,code_mark
注意: (1)伪指令ldr 并不是基于PC的 如 ldr r0,=code_mark ,
它的执行顺序是,首先判断是否可用mov进行操作,如果操作数不符合mov操作
的规则,则ldr 文字池的操作。进行绝对地址的寻址
(2)指令ldr r0,code_mark 作用是将code_mark表示的地址中的内容
装载到r0中。
2。基于寄存器的标号----------通常是对数据处理的伪代码前的标号。在汇编处理时,将寄存器的值
加上或者减去该标号,以达到的数据的访问 如(正确与否存有疑问!!!有待解决)
作用范围:本源文件
add r0,r0,a
map 0x100
A field 256
B field 256
3。绝对地址 是一个32位的数字量,可以用来寻址整个内存空间,当程序计数器PC赋值时,可以
实现程序跳转。
作用范围:本源文件
ldr pc,=0x30000000
3。局部标号 0~99的十进制数字
作用范围:当前段内
引用格式 %{B|F} N 注:B----搜索范围往后backward,F------搜索范围向前forward
N----局部标号
0
cmp ....
add 。。。
b %B0
b %F1
........
1
ldr ....
另 对本源文件外部标号的引入 IMPORT X(外部标号)
对本源文件中的标号设定为可导出 EXPORT Y(本源文件中的标号)
参考文献:http://blog.csdn.net/ce123/article/details/7181662
《ARM处理机裸机开发实践》-------王小强 等