在ARM AArch32架构中,本地标签(local label)和命名标签(named label)的速度是相同的。本地标签是以句点(.)开头的标签,用于局部跳转,只在当前函数或代码块中可见。命名标签则是全局可见的,可以在整个程序中使用。
下面是一个示例代码,演示了如何使用本地标签和命名标签:
.func main
main:
mov r0, #10
mov r1, #0
local_loop_start:
cmp r0, #0
ble local_loop_end
add r1, r1, r0
sub r0, r0, #1
b local_loop_start
local_loop_end:
mov r2, r1
b named_loop_start
.named_loop_start:
cmp r2, #0
ble named_loop_end
sub r2, r2, #1
b named_loop_start
named_loop_end:
mov r3, r2
.endfunc
在上面的示例代码中,local_loop_start
是一个本地标签,只在main
函数内可见。named_loop_start
和named_loop_end
是命名标签,可在整个程序中使用。
需要注意的是,速度的差异通常不是由标签类型引起的,而是由于跳转指令的类型和目标地址的位置决定的。在ARM架构中,相对地址寻址(PC-relative addressing)可以用于跳转到本地标签和命名标签,因此速度是相同的。