Локальные метки не имеют разницы в эффективности кода .
См .: Инструкция ARM Branch и Страница ветви Heyrick ; коды операций одинаковы, несмотря ни на что. Локальная метка не изменит расстояние ветвления.
Так почему вы можете их использовать?
Существуют три преимущества местных этикеток.
- Им не требуется имя, которое может конфликтовать с другими ярлыками (например,
exit_routine:
).
- Они позволяют макросам содержать «локальные» метки.
- Проще может быть лучше.
Сравнение примера old_timers,
1:
...
b 1b
Versus,
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 вариантов, поскольку это легко для кратковременной памяти. Я бы не использовал больше локальных меток, чем это подряд, так как это может сбить с толку. Однако я бы сказал, что они могут быть полезны для понимания некоторого кода.