我知道本地标签更像PC相对跳转,它们需要指定搜索方向,我知道命名标签不需要指定的方向,而只需要跳转。
我是否正确地认为,本地标签更像是在内存中迭代,直到标签被击中,而命名标签更像是离散的预先已知的跳转?如果是这样的话,这会使本地标签比命名标签慢得多吗?
发布于 2019-06-04 22:19:53
基于@杰斯特的评论的回答
由于程序集是由汇编程序组装的,所以在组装代码时搜索本地标签的跳转并取消标记是汇编程序的工作。事实上,汇编程序也必须使用命名标签来实现这一点,它只是关注范围而不是本地标签。
所有CPU看到的都是运行时要进行的直接内存地址跳转,所以没有,运行时的速度没有差别。
发布于 2019-06-06 16:55:22
本地标签在代码效率方面没有差别。
参见:ARM分支指令和海里克氏分支页;无论什么情况,它们的操作码都是相同的。本地标签不会更改分支的距离。
那你为什么要用它们?
本地标签有三个好处。
exit_routine:)冲突的名称。比较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个选项,因为这对于短期内存来说很容易。我不会连续使用比这更多的本地标签,因为它可能会变得混乱。但是,我认为它们实际上可以帮助理解一些代码。
https://stackoverflow.com/questions/56451955
复制相似问题