ARM AArch32本地标签与命名标签的速度

时间:2019-06-04 22:08:33

标签: assembly arm

我知道本地标签更像是PC相对跳转,它们需要指定搜索方向,而且我知道命名标签不需要指定方向,而只是跳转。

我是否正确地认为本地标签更像是遍历内存,直到标签被命中,命名标签更像离散的已知跳转?如果是这样,这是否会使本地标签比命名标签慢得多?

2 个答案:

答案 0 :(得分:3)

根据@ Jester的评论进行回答

由于汇编是由汇编程序进行汇编的,因此在汇编代码时,搜索和取消标记本地标签的跳转是汇编程序的工作。实际上,汇编器也必须使用命名标签来执行此操作,它只是注意范围与使用本地标签不同。

所有CPU看到的都是在运行时进行的直接内存地址跳转,因此不行,运行时的速度没有差异。

答案 1 :(得分:0)

本地标签在代码效率上没有区别

请参阅:ARM Branch instructionHeyrick's branch page;无论什么操作码都是相同的。本地标签不会更改分支距离。

那么为什么要使用它们呢?

本地标签有三个好处。

  1. 他们不需要的名称可能会与其他标签(例如exit_routine:)冲突。
  2. 它们允许宏包含“本地”标签。
  3. 越简单越好。

比较old_timers示例,

1:
   ...
   b 1b

对,

my_label_which_is_to_long_and_obscures_intent_of_code_via_verbosity_57:
   ...
   b my_label_which_is_to_long_and_obscures_intent_of_code_via_verbosity_58

标签太可笑了,所有多余的单词都掩盖了由于复制/粘贴而可能跳到错误位置的事实。因此,许多人使用局部标签,因为在某些地方它们并没有真正向汇编程序添加太多信息。即,诸如此类的计算

start_calc:
   ; xxx
   cmp r0, #0
   bmi negative_case
;;; positive code
   ; xxx
   b done_calc
negative_case:
   ; xxx
done_calc:

; xxx代表一些简单的说明。所有这些标签都不太有用,在开始时说明为什么需要不同地处理否定/肯定的注释将对大多数人有帮助。

典型的用户界面指南提供了4-7个选项,因为这对于短期记忆很容易。我不会连续使用更多的本地标签,因为这会造成混乱。但是,我认为它们实际上可以帮助理解某些代码。