ARM汇编中的标号


标号(LABEL)是为一组机器指令所起名字,表示程序中的指令或者数据地址的符号。标号可有可无,只有当需要用符号地址来访问该语句时,才给此语句赋予标号。通过在目标地址的前面放上一个标号,可以在指令中使用标号来代替直接使用地址。标号是程序目标标志,总是和某地址相联系,供转移或循环指令控制转移使用。 标号是编译程序使用的,也就是说程序中最后生成的代码中标号都换成了相应的数值。

因标号表示是指令地址,所以它有三个属性,即段属性、偏移属性和类型属性。段属性即段地址,标号段必须在CS中。偏移属性是表示该标号到段首地址距离,单位是字节,是16位无符号整数。类型属性是距离属性,指标号和转移指令距离,该标号在本段内引用,距离在-128~ 127之间时称短标号,距离属性为SHORT,当标号在本段,距离在-32768~ 32767之间时称近标号,距离属性为NEAR,当引用标号指令和标号不在同一段时称远标号,距离属性为FAR。

根据标号的生成方式可分为3种:

1.基于PC的标号。

基于PC的标号是位于目标指令前或者程序中数据定义伪操作前的标号。这种标号在汇编时将被处理成PC值加上(或减去)一个数字常量。常用于表示跳转指令的目标地址,或者代码段中所嵌入的少量数据。

2.基于寄存器的标号。

基于寄存器的标号常用MAP和FIELD未定义操作,也可以该用EQU伪定义。这种标号在汇编时将被处理成寄存器的值加上(或减去)一个数据常量。常用于访问数据段中的数据。

3.绝对地址。

绝对地址是一个32位数据。它可以寻址2的32次方 -1,即直接可以寻址整个内存空间。

相关内容