首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM AArch32本地标签与命名标签的速度

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

Stack Overflow用户
提问于 2019-06-04 22:08:33
回答 2查看 139关注 0票数 0

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

我是否正确地认为,本地标签更像是在内存中迭代,直到标签被击中,而命名标签更像是离散的预先已知的跳转?如果是这样的话,这会使本地标签比命名标签慢得多吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-04 22:19:53

基于@杰斯特的评论的回答

由于程序集是由汇编程序组装的,所以在组装代码时搜索本地标签的跳转并取消标记是汇编程序的工作。事实上,汇编程序也必须使用命名标签来实现这一点,它只是关注范围而不是本地标签。

所有CPU看到的都是运行时要进行的直接内存地址跳转,所以没有,运行时的速度没有差别。

票数 3
EN

Stack Overflow用户

发布于 2019-06-06 16:55:22

本地标签在代码效率方面没有差别。

参见:ARM分支指令海里克氏分支页;无论什么情况,它们的操作码都是相同的。本地标签不会更改分支的距离。

那你为什么要用它们?

本地标签有三个好处。

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

比较old_timers示例,

代码语言:javascript
复制
1:
   ...
   b 1b

相对于,

代码语言:javascript
复制
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

标签是荒谬的,所有额外的词只是掩盖了一个事实,它可能是跳到错误的地方,因为一个副本/粘贴。因此,许多人使用本地标签,因为在某些地方,他们实际上并没有向汇编程序添加太多信息。呃,计算一下,

代码语言:javascript
复制
start_calc:
   ; xxx
   cmp r0, #0
   bmi negative_case
;;; positive code
   ; xxx
   b done_calc
negative_case:
   ; xxx
done_calc:

这里,; xxx表示一些简单的说明。所有这些标签都不太有用,一开始就评论一下为什么你需要以不同的方式处理消极/积极的问题,对大多数人来说都会更有帮助。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56451955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档